我的git存储库越来越大,所以我想将它分成一个或多个存储库。在搜索它时,我可以找到许多基于git-filter-branch的解决方案,这将重写整个存储库。
但是我要删除的文件都与单独的提交隔离开来,所以我不需要重写包含这些文件的提交,我只需要删除那些提交。也就是说,提交标记可以保持不变。在我看来,这是一个比使用git过滤器分支更漂亮的解决方案。
因此,我的想法是,我应该创建一个存储库的副本,这样当拆分完成时,用户就会使用这个副本。在此之后,我将删除一些类似git rebase -i的不想要的提交,并删除所有不想要的提交。但是有很多提交应该删除,所以有什么方法可以作为脚本运行吗?或者,如果git-filter-branch是一个被删除的完整提交,那么它可能已经在执行此操作了!?
有办法在所有的分支上自动完成吗?
那么,您认为这是一个很好的方法,还是应该使用git-filter-branch呢?
我想从这三个方面做些什么:
A - B - C - D - E - F
\
G - H - I - J是删除C、E和H:
A - B - D - F
\
G - I - J发布于 2020-12-21 15:25:14
在这方面使用rebase有几个问题。它一次只想处理最多一个分支(而不是真正针对其他参考文献)。它不能很好地处理合并。(惊奇的是,相对新增加的功能让人们喜欢声称他们“最终”增加了合并支持,但仍然不能很好地处理合并。)
所以你想做什么并不重要--关键是你想要改变整个回购的历史,而塔特更适合git filter-repo (或者,正如你注意到的,git filter-branch;但这是一个过时的工具,已经不受欢迎了)。
这些工具中的任何一个都可以做你想做的事。也就是说,您可以设置一些选项,以便如果重新编写提交以不进行任何更改,则该提交将被删除。(因此,在您的示例中,如果要删除文件,而提交只修改该文件,则提交将不再进行任何更改并将被删除。)
filter-branch和fitler-repo的用法非常不同,所以您必须先决定使用哪一种。除非您必须使用无法支持它的旧版本的git,否则filter-repo可能是更好的推荐(特别是因为,根据您所写的内容,您似乎必须学习一种新的工具。
这两种工具都是非常通用的,有很多选项可以控制它们所做的事情;它们也很有意义,所以你真的应该对它们有一个很好的理解,而不仅仅是遵循我们可以给你的一些食谱(如果出了问题,你就不知道该怎么做)。所以最好的建议是阅读文档:
https://stackoverflow.com/questions/65394309
复制相似问题