首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据提交而不是目录或文件类型拆分存储库

根据提交而不是目录或文件类型拆分存储库
EN

Stack Overflow用户
提问于 2020-12-21 14:13:29
回答 1查看 50关注 0票数 0

我的git存储库越来越大,所以我想将它分成一个或多个存储库。在搜索它时,我可以找到许多基于git-filter-branch的解决方案,这将重写整个存储库。

但是我要删除的文件都与单独的提交隔离开来,所以我不需要重写包含这些文件的提交,我只需要删除那些提交。也就是说,提交标记可以保持不变。在我看来,这是一个比使用git过滤器分支更漂亮的解决方案。

因此,我的想法是,我应该创建一个存储库的副本,这样当拆分完成时,用户就会使用这个副本。在此之后,我将删除一些类似git rebase -i的不想要的提交,并删除所有不想要的提交。但是有很多提交应该删除,所以有什么方法可以作为脚本运行吗?或者,如果git-filter-branch是一个被删除的完整提交,那么它可能已经在执行此操作了!?

有办法在所有的分支上自动完成吗?

那么,您认为这是一个很好的方法,还是应该使用git-filter-branch呢?

我想从这三个方面做些什么:

代码语言:javascript
复制
A - B - C - D - E - F
  \
   G - H - I - J

是删除C、E和H:

代码语言:javascript
复制
A - B  - D  - F
  \
   G - I - J
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 15:25:14

在这方面使用rebase有几个问题。它一次只想处理最多一个分支(而不是真正针对其他参考文献)。它不能很好地处理合并。(惊奇的是,相对新增加的功能让人们喜欢声称他们“最终”增加了合并支持,但仍然不能很好地处理合并。)

所以你想做什么并不重要--关键是你想要改变整个回购的历史,而塔特更适合git filter-repo (或者,正如你注意到的,git filter-branch;但这是一个过时的工具,已经不受欢迎了)。

这些工具中的任何一个都可以做你想做的事。也就是说,您可以设置一些选项,以便如果重新编写提交以不进行任何更改,则该提交将被删除。(因此,在您的示例中,如果要删除文件,而提交只修改该文件,则提交将不再进行任何更改并将被删除。)

filter-branchfitler-repo的用法非常不同,所以您必须先决定使用哪一种。除非您必须使用无法支持它的旧版本的git,否则filter-repo可能是更好的推荐(特别是因为,根据您所写的内容,您似乎必须学习一种新的工具。

这两种工具都是非常通用的,有很多选项可以控制它们所做的事情;它们也很有意义,所以你真的应该对它们有一个很好的理解,而不仅仅是遵循我们可以给你的一些食谱(如果出了问题,你就不知道该怎么做)。所以最好的建议是阅读文档:

https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65394309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档