Git log shows very little after doing a read-tree merge
因此,我将另一个存储库合并到当前存储库的子目录中,如下所示:
1 2 3 4 | git remote add -f Bproject /path/to/B git merge -s ours --no-commit Bproject/master git read-tree --prefix=dir-B/ -u Bproject/master git commit -m"Merge B project as our subdirectory" |
不过,似乎有一些微妙的问题。当我这样做的时候
1 | git log dir-B/ |
号
结果只是"merge b project as our subdirectory"消息。如何获取所需的日志信息,即dir-b的导入历史记录?
合并提交显示
1 2 | --follow Continue listing the history of a file beyond renames (works only for a single file). |
如果你真的很想正确显示差异,你可以重写
如果您想这样做,我建议先单独克隆
1 2 3 4 5 6 7 8 | git-filter-branch manpage To move the whole tree into a subdirectory, or remove it from there: git filter-branch --index-filter \ 'git ls-files -s | sed"s-\t"*-&newsubdir/-" | GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ git update-index --index-info && mv"$GIT_INDEX_FILE.new""$GIT_INDEX_FILE"' HEAD |
号
确认新的历史记录看起来正确后,可以将重写的版本作为远程文件添加到主项目中,并使用普通的合并将其合并。
基于r3m0t重写历史的想法,以下几行为我完成了整个技巧,将另一个git存储库作为新的分支合并到我现有的一个子目录中:
(在
1 2 3 4 5 6 7 8 9 10 | co -b my-new-branch remote add -f origin-my-old-standalone-project ../my-old-standalone-project/ pull origin-my-old-standalone-project master mkdir my-new-subdir ci -am"merge 'old' standalone project as new branch 'my-new-branch'" git filter-branch --index-filter \ 'git ls-files -s | sed"s%\t"*%&my-new-subdir/%" | GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ git update-index --index-info && mv"$GIT_INDEX_FILE.new""$GIT_INDEX_FILE"' HEAD |
在那之后,我有了两个:一个是新子目录中单个文件的历史记录,就像它们一直都在那里一样;另一个是主目录中的正常历史记录,就像子目录中的新文件总是在那里一样。(如您所见,不需要读取树或任何其他非日常使用的命令,"过滤分支"完成了整个技巧。)IDE可以(resp。应该;成功测试了pycharm)才能正常工作。
之后,您应该能够像往常一样合并分支,将所有项目合并为一个项目。
tl;dr: