我使用的是git-subtree(来自Avery Pennarun)。在我当前的git repo中,我当然有我所有的项目文件/文件夹和一个名为"lib“的子树。如果我现在使用git clone克隆这个git代码库,我会得到所有的项目文件和子树"lib“(一切正常)。我现在尝试的是:我在克隆的存储库中更改了子树"lib“中的某些内容,并尝试使用git subtree push将更改推回到子树"lib”的远程存储库,但不起作用。有什么问题吗?我必须先用git subtree add将其添加为子树吗?
提前进行Thx
发布于 2012-10-10 20:56:43
免责声明,我想我只比你提前几天了解子树:-)
如果您只是使用git subtree push,那么您没有为子树提供足够的信息来提取和推送您的更改。
如果你正确地克隆了存储库,那么子树就已经在那里了。子树需要被告知你想从哪个子树推送(即使你只有一个),它也需要知道推送到哪里-具体地说,你不想推送到顶层存储库。因此,您需要类似以下内容:
git subtree push --prefix=lib git@github.com:arges-github/lib.git master显然,repo和refspec应该进行更改以匹配您的repo。
如果您想要了解这里发生了什么(它确实有帮助),子树实际上将影响子树内文件的更改拆分到不同的分支中,然后将其推送到子树存储库。要查看发生的情况,请使用subtree split
git subtree split --rejoin --branch=shared-changes --prefix=lib然后看看你做的分支:
git checkout lib-changes然后,手动推送
git push git@github.com:arges-github/lib.git master如果这不起作用,那么可能是您没有将子树合并到您的repo中。添加子树时:
git subtree add --squash --prefix lib git@github.com:arges-github/lib.git master您还需要合并子树并将其推送回顶级存储库。
git subtree pull --squash --prefix lib git@github.com:arges-github/lib.git master
git push发布于 2014-12-03 08:33:55
我遇到了和你完全一样的问题,我基本上用罗杰·诺兰建议的方法解决了这个问题。但是,如果您像我一样不幸地使用不区分大小写的文件系统,那么您还必须确保每次执行pull和push操作时,您的前缀的大小写保持不变。
如果你把大小写搞混了,git会认为你有两个子树,而文件系统上只有一个子树。
因此,我最终得到的解决方案(以防对任何人有帮助)是:
publish_<your-subtree-name>.update_<your-subtree-name>.PS>参数很重要,特别是如果您的报告的不同分支拉取了子树的不同分支,并且您的项目中有多个子树。
https://stackoverflow.com/questions/12801936
复制相似问题