【发布时间】:2010-09-08 17:20:59
【问题描述】:
更新:我试图简化此处的真实示例,以便清楚地解释我的选项,但这并没有真正奏效。到目前为止,下面的链接示例过于笼统,甚至无法使这个简单的示例正常工作。
我一直都能用 SVN 做这类事情,并且非常熟练。现在我发现它在 Git 中非常困难,并且开始相信我的历史基本上是混在一起的,无法将其分开。
现实世界的问题:我已经移动和重命名了大约十几个文件。他们的历史与我想要完全删除历史的数百个其他文件的历史混合在一起。
在 SVN 中,我可以使用一系列转储/包含过滤器/排除过滤器/加载来精简存储库,并且很少需要在加载之前在转储文件本身中手动重命名路径。
像这样的事情,我早就完成了:
SET Includes=trunk/src/Foo.aaa trunk/src/Foo.bbb trunk/src/Foo trunk/src/Bar
SET Excludes=trunk/src/Bar/Blah.aaa trunk/src/Foo/Blah.aaa
svnadmin dump FooSrc > Full.dump 2> Dump.log
svndumpfilter include %Includes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Full.dump > Filter_1.dump 2> Filter_1.log
svndumpfilter exclude %Excludes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Filter_1.dump > Filter_2.dump 2> Filter_2.log
svnadmin create FooDest
svnadmin load FooDest --ignore-uuid < Filter_2.dump > Load.log 2> Load_Errors.log
有没有人有一个很好的例子,不仅仅是简单地删除单个文件或导出单个子目录?
定义文件集的最简单方法是使用包含 7 个目录路径的列表。这些目录中的所有内容都需要保留,外部的所有内容都需要从历史记录中删除。
简化问题:
我有一个 Git 存储库,其中包含一些我想提取到它自己的存储库中的文件。问题是这些文件是在整个原始存储库的历史中创建和修改的,所以我无法弄清楚如何干净地提取它们。
这里是我的历史的概要(只有更多的提交和更多需要忽略的内容)。如您所见,我显然不打算稍后将这些文件从历史中挑选出来:
commit 4a09d3f977a8595d9e3f61766a5fd743e4265a56
M src/Foo/Bar/FileToExtract2.foo
A src/Foo/Bar/FileToExtract3.bar
D src/Foo/AnotherFileToIgnore.txt
commit 05d26f23518083270cc45bf037ced29bec45e064
M src/Foo/Blah/IgnoreThisOneToo.foo
M src/Foo/AnotherFileToIgnore.txt
commit 343187228f4bd8e4427395453034c34ebd9a95f3
M src/Foo/Bar/FileToExtract1.txt
M src/Foo/AnotherFileToIgnore.txt
commit 46a0129104ac31291462f657292aab43f8883d8d
A src/Foo/Bar/FileToExtract1.txt
A src/Foo/Bar/FileToExtract2.foo
M src/Foo/FileToIgnore.txt
commit 3fe6af56f0d8dc42fcb5b0bafee41bff534ba2cc
A src/ReadMe.txt
A src/IgnoreMe.foo
A src/Foo/FileToIgnore.txt
A src/Foo/Blah/IgnoreThisOneToo.foo
A src/Foo/AnotherFileToIgnore.txt
最后,我想要的是一个干净的存储库,其中包含src/Foo/Bar/ 中文件的完整历史记录。其余的可以忽略。我也可以将这个存储库保持原样(即不重写历史记录)并为整个目录提交删除。
在 SVN 中,我会使用 svnadmin dump、svndumpfilter 和 svnadmin load。如果我小心的话,我什至可以手动编辑转储文件以清理路径等。
我一直在查看 Git 命令,但找不到执行此操作的方法。任何帮助将不胜感激。
【问题讨论】:
标签: git version-control history