Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash git filter repo能否从多个按日期交织提交的回购中创建monorepo?_Bash_Git_Github_Git Filter Repo - Fatal编程技术网

Bash git filter repo能否从多个按日期交织提交的回购中创建monorepo?

Bash git filter repo能否从多个按日期交织提交的回购中创建monorepo?,bash,git,github,git-filter-repo,Bash,Git,Github,Git Filter Repo,使用是否可以将N个存储库合并到一个单存储库中,重新编写提交,以便提交相互交织,或按日期“压缩”? 目前,我只测试了2个回购协议,每个回购协议都有自己的子目录。操作完成后,每个回购协议的提交都位于彼此的“顶部”,而不是相互交织。我真正想要的是能够通过编写的数据拥有一个完全线性的历史,而无需添加合并提交 强调eftshift0的评论:重定和重写历史可能导致提交按看似荒谬的时间顺序排列 如果您知道所有提交都是有序的(例如:父提交的提交日期总是“早于”其子提交的提交日期),那么您可能能够生成提交的正确

使用是否可以将N个存储库合并到一个单存储库中,重新编写提交,以便提交相互交织,或按日期“压缩”? 目前,我只测试了2个回购协议,每个回购协议都有自己的子目录。操作完成后,每个回购协议的提交都位于彼此的“顶部”,而不是相互交织。我真正想要的是能够通过编写的数据拥有一个完全线性的历史,而无需添加合并提交


强调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