在使用 git-filter-repo --subdirectory-filter 命令后如何更新 Git 仓库

3
我使用以下命令将一个工具文件夹提取到自己的代码库中: git-filter-repo --subdirectory-filter path/to/tools 与此同时,原始代码库中正在进行新的提交。
我想定期将更改合并到筛选后的代码库中。 我能想到的唯一方法是再次克隆原始代码库(包括更改),然后再次应用子目录过滤器,并将其添加为我的代码库的远程分支,然后从那里选择/合并分支。每次有小变化时都执行这么多操作很繁琐。我认为可能有一种聪明的方式从主代码库创建筛选的补丁,然后将其应用到经过筛选的代码库中,但我的git技能还不足。
有人能想出更好的方法吗?

我认为这里讨论的“子树合并”可能是合适的:https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_subtree_merge。还有一个“git subtree”命令(或曾经有过?),但它似乎没有列在在线手册中(被删除了吗?) - IMSoP
嗯,手册页面仍然在git存储库中;我猜只是从网站上消失了...https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt - IMSoP
@IMSoP 这是一个贡献包,目前维护不佳,所以买家自负... - torek
@torek 喔,那样就有道理了。我记得几年前用它的时候,惊讶于很难找到文档。看起来最近有一些修复,也许值得 OP 考虑。 - IMSoP
@LeGEC:跑通了。它确实可以在共享历史记录上重新映射哈希值,这很好。但每次重新过滤和添加到远程仓库仍需要大量工作... - amirblum
显示剩余2条评论
1个回答

3

由于如果在相同的历史记录上两次运行 git filter-repo,它将重新创建 完全相同的提交(您通过测试已经确认了),因此您可以使用 git merge 来集成新的提交,这些提交将显示为先前提取提交的后代。


1
你为我节省了数小时测试奇怪策略的时间。谢谢! - Tim
1
@Tim +1。唯一的注意点是:将来的所有更新中,您必须使用完全相同的命令。 - LeGEC
1
我昨天做了这件事,并在现有分支上进行了变基/快进操作,历史记录看起来很漂亮。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接