Bash git filter repo能否从多个按日期交织提交的回购中创建monorepo?
使用是否可以将N个存储库合并到一个单存储库中,重新编写提交,以便提交相互交织,或按日期“压缩”? 目前,我只测试了2个回购协议,每个回购协议都有自己的子目录。操作完成后,每个回购协议的提交都位于彼此的“顶部”,而不是相互交织。我真正想要的是能够通过编写的数据拥有一个完全线性的历史,而无需添加合并提交Bash git filter repo能否从多个按日期交织提交的回购中创建monorepo?,bash,git,github,git-filter-repo,Bash,Git,Github,Git Filter Repo,使用是否可以将N个存储库合并到一个单存储库中,重新编写提交,以便提交相互交织,或按日期“压缩”? 目前,我只测试了2个回购协议,每个回购协议都有自己的子目录。操作完成后,每个回购协议的提交都位于彼此的“顶部”,而不是相互交织。我真正想要的是能够通过编写的数据拥有一个完全线性的历史,而无需添加合并提交 强调eftshift0的评论:重定和重写历史可能导致提交按看似荒谬的时间顺序排列 如果您知道所有提交都是有序的(例如:父提交的提交日期总是“早于”其子提交的提交日期),那么您可能能够生成提交的正确
强调eftshift0的评论:重定和重写历史可能导致提交按看似荒谬的时间顺序排列 如果您知道所有提交都是有序的(例如:父提交的提交日期总是“早于”其子提交的提交日期),那么您可能能够生成提交的正确列表,以输入
git rebase-i
脚本
[编辑]仔细考虑后,这可能足以满足您的用例: 使用日期订单查看回购历史记录:
git log --graph --oneline --date-order
如果提交的顺序与预期相符,则可以使用git log
生成rebase-i
顺序脚本:
# --reverse : 'rebase -i' asks for entries starting from the oldest
# --no-merges : do not mention the "merge" commits
# sed -e 's/^/pick /' : use any way you see fit to prefix each line with 'pick '
# (another valid way is to copy paste the list of commits in an editor,
# and add 'pick ' to each line ...)
git log --reverse --no-merges --oneline --date-order |\
sed -e 's/^/pick /' > /tmp/rebase-apply.txt
然后重新确定回购的完整历史记录:
git rebase -i --root
在编辑器中,复制/粘贴使用第一个命令创建的脚本,
保存并关闭
希望您将获得一个无冲突的统一历史记录。这似乎是一个可能的解决方案,但我自己没有尝试过。在将修订应用于分支时重新排序很容易导致冲突。有趣的解决方案,我没有想到以编程方式为重基创建一组有序的提交。
git rebase -i --root