git子树合并忽略--prefix

时间:2013-07-30 15:12:21

标签: git git-subtree

我在Windows上使用git 1.8.3时遇到了一个奇怪的错误。使用git subtree,我在两个项目之间共享一个文件并将其推送到另一个存储库。

所以,在repo1中我做到了这一点:

# push script
git subtree split --prefix=shared-dir --rejoin --branch split
git push shared-repo split:master
git branch -D split

在两个repos中,shared-repo指的是包含共享代码的遥控器。共享代码将驻留在具有相同名称的目录中。

在repo2中我这样做了:

# pull script
git fetch shared-repo
git subtree merge --prefix=shared-dir shared-repo/master

我期望它做的是获取共享文件并将其放在目录./shared-dir/下的repo2中。发生的事情是文件放在存储库的根目录中!

将文件移动到正确的文件夹,提交和执行与repo1的推送脚本类似的操作会导致推送中的拒绝,因为它表示推送不是快进的。再次运行pull脚本表示一切都是最新的。

我被踩了,在互联网上搜索并没有透露其他人有类似的问题。怎么了,我该怎么办?


更新:在Ubuntu 12.04上使用git 1.7.9.5也是如此,两周前从git存储库获取了git-subtree脚本。我也改变命令说--prefix=./shared-dir/无济于事。

有趣的是,git subtree创建了shared-dir目录,但是将共享文件放在根目录中而不是放在该目录中。

2 个答案:

答案 0 :(得分:2)

我在gith repo上遇到了类似的问题,我从Github撤出:git subtree pull删除了回购的内容。添加前缀git subtree add --prefix不起作用,因为前缀已经添加。

对我有用的唯一解决方案是删除目录,然后再次添加前缀。例如:

rm -rf JSQMessagesViewController
# now commit all, then add
git subtree add --prefix JSQMessagesViewController https://github.com/jessesquires/JSQMessagesViewController master --squash
# Now the pull will work!
git subtree pull --prefix JSQMessagesViewController https://github.com/jessesquires/JSQMessagesViewController master --squash

当然,欢迎更好的解决方案。

答案 1 :(得分:1)

问题是第一次将共享目录添加到存储库时应该使用:

git subtree add --prefix=... .../...