声明,我怀疑我在你前面只有几天性学习的有关子树:-)
如果你只是使用git subtree push
你不给子树足够的信息来提取和推动你的改变。
如果您正确地克隆了回购,子树已经在那里。需要知道子树需要从哪个子树中推出(即使只有一个子树),并且还需要知道应该推到哪里 - 具体而言,您不希望推向顶层回购。因此,你想要的东西是这样的:
git subtree push --prefix=lib [email protected]:arges-github/lib.git master
显然repo和refspec应该改变,以符合你的回购。
如果你想看看这里发生了什么(它确实有帮助),子树实际上会将影响子树内文件的更改分解到不同的分支,然后将其推送到子树回购。看到这样的情况,使用subtree split
git subtree split --rejoin --branch=shared-changes --prefix=lib
然后看看你所做的分支:
git checkout lib-changes
和手动把他们
git push [email protected]:arges-github/lib.git master
如果不是那么可能是因为您没有将子树合并到您的回购库中。当您添加子树时:
git subtree add --squash --prefix lib [email protected]:arges-github/lib.git master
您还需要合并子树并将其推回到您的顶级回购。
git subtree pull --squash --prefix lib [email protected]:arges-github/lib.git master
git push
您是如何将子树添加到顶级项目的?你只是建立一个目录并克隆进它? –
嗨!我使用“git subtree add”将子树添加到我的顶级项目中。也许我的问题还不够清楚:如果我在其他机器上克隆回购,那么我将所有项目文件加上子树“lib”。现在我在克隆的repo中的子树“lib”中更改了一些内容,我无法使用“git subtree push”将更改推回到远程服务器,这是我的问题。 – arge
答案有帮助吗? –