Git子树合并时忽略--prefix参数。

3
我在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

在这两个仓库中,shared-repo 指的是包含共享代码的远程仓库。共享代码将存储在同名目录中。
在 repo2 中,我做了这件事:
# pull script
git fetch shared-repo
git subtree merge --prefix=shared-dir shared-repo/master

我期望它能获取共享文件并将其放在 repo2 中的目录 ./shared-dir/ 下。但实际上文件被放在了仓库根目录下!将文件移动到正确的文件夹,提交并执行类似于 repo1 推送脚本的操作会导致推送被拒绝,因为它说推送不是快进。再次运行拉取脚本会显示一切都是最新的。我很困惑,搜索互联网也没有发现有人遇到类似的问题。出了什么问题,我该怎么办?
更新:在Ubuntu 12.04上,使用来自git存储库约两周前的git-subtree脚本和git 1.7.9.5时,发生了同样的情况。我还尝试将命令更改为--prefix=./shared-dir/,但没有效果。
有趣的是,git subtree创建了shared-dir目录,但将共享文件放在根目录而不是该目录内部。
2个回答

2

我在从Github拉取的git仓库上遇到了类似的问题:执行git subtree pull命令会删除仓库中的内容。使用带有--prefix参数的git subtree add命令无法解决问题,因为前缀已经被添加。

对我有效的唯一解决方法是先删除目录,然后再次添加前缀。示例:

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

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

这是为什么发生的任何想法? - David S.

1
问题在于第一次将共享目录添加到代码库中应该使用以下命令完成:
git subtree add --prefix=... .../...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接