Import a remote repository as subdirectory with full history
我想将远程存储库作为具有完整历史记录的子目录进行合并和分离。如何做到这一点有几种方法和问题。我的第一次尝试是使用子树,但它似乎没有重写文件的历史记录,所以我无法查看合并存储库的历史记录。
下一个尝试是手动合并它,就像塞思·罗伯逊在他的答案中显示的那样:
And the trick to making this work: force Git to recognize the rename
by creating a subdirectory and moving the contents into it.
1
2
3 mkdir bdir
git mv B bdir
git commit -a -m bdir-renameReturn to repository"A" and fetch and merge the contents of"B":
1
2
3
4
5 cd ../a
git remote add -f B ../b
git merge -s ours --no-commit B/master
git read-tree --prefix= -u B/master
git commit -m"subtree merge B into bdir"To show that they're now merged:
1
2
3 cd bdir
echo BBB>>B
git commit -a -m BBBTo prove the full history is preserved in a connected chain:
1 git log --follow B
号
到目前为止工作还不错,但似乎大多数类似的工具都不使用
所以我需要另一种方法。有人能告诉我一种不用重新命名和保存历史的方法吗?
事先谢谢。
最后,将repo b导入repo a的子目录是"简单"的,我偶然发现了一个小工具,其中包含了如何使用
1 2 3 4 | 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"' \ --tag-name-filter cat \ -- --all |
完整的方法是在repo b上使用上面发布的
1 2 3 4 | git remote add -f B ../b git merge -s ours --no-commit B/master git read-tree --prefix= -u B/master git commit -m"subtree merge B into bdir" |
号