我想在我的工作git存储库中合并一个远程git存储库作为它的子目录.我希望生成的存储库包含两个存储库的合并历史记录,并且合并存储库的每个文件都保留其在远程存储库中的历史记录.我尝试使用如何使用子树合并策略中提到的子树策略,但是在遵循该过程之后,尽管生成的存储库确实包含两个存储库的合并历史记录,但来自远程存储库的单个文件尚未保留其历史记录(任何一个'git log'只显示一条消息"Merged branch ...").
此外,我不想使用子模块,因为我不希望两个组合的git存储库再次分开.
是否可以将远程git存储库合并为另一个存储库作为子目录,来自远程存储库的单个文件保留其历史记录?
非常感谢您的帮助.
编辑:我目前正在尝试使用git filter-branch重写合并的存储库历史记录的解决方案.它似乎确实有效,但我需要再测试一下.我将回来报告我的发现.
编辑2:希望我让自己更清楚我给出了与git的子树策略一起使用的确切命令,这导致远程存储库文件的历史明显丢失.设A是我正在使用的git repo和B git repo我想将它作为它的子目录合并到A中.它做了以下事情:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
Run Code Online (Sandbox Code Playgroud)
在这些命令进入目录subdir/Iwant/to/put/B/in后,我看到B的所有文件,但是git log在其中任何一个文件中只显示提交消息"将子目录合并为子目录/ Iwant/to/put/B /中".它们在B中的文件历史记录丢失了.
什么似乎工作(因为我在混帐初学者我可能是错的)如下:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed …Run Code Online (Sandbox Code Playgroud) git ×1