Git:从现有存储库中创建Git子模块,并将父级更改反映到子存储库中
请注意,我是Git的新手 我有两份回购协议: 主存储库是Libgdx-REPO,我所有的工作都放在这个存储库中,主要是在。由于我希望gdx sqlite项目显示为一个单独的存储库,我所做的是:Git:从现有存储库中创建Git子模块,并将父级更改反映到子存储库中,git,github,repository,git-submodules,Git,Github,Repository,Git Submodules,请注意,我是Git的新手 我有两份回购协议: 主存储库是Libgdx-REPO,我所有的工作都放在这个存储库中,主要是在。由于我希望gdx sqlite项目显示为一个单独的存储库,我所做的是: 在GitHub上创建了一个新的repo(gdx sqlite repo) 在我的计算机上创建了本地repo(嵌套在本地libgdx repo中) 将本地嵌套repo的所有代码推送到远程gdx sqlite repo 这导致了所有问题,我认为嵌套存储库是罪魁祸首。后来我删除了本地嵌套存储库并恢复到以前的
这怎么可能呢?你说得对。对于这种情况,最好的方法是使用。这是在Git中处理依赖关系的最佳方法 作为主项目的扩展,您可以通过以下方式将其添加为子模块:
git clone git@github.com:mrafayaleem/libgdx.git libgdx
cd libgdx
# remove the old directory
rm -rf extensions/gdx-sqlite
git add extensions/gdx-sqlite
# add the submodule (note the read-only URL)
git submodule add git://github.com:mrafayaleem/gdx-sqlite.git extensions/gdx-sqlite
# commit the changes
git commit -m 'Add submodule for the gdx-sqlite extension'
然后要克隆项目(及其所有子模块):
或为您(具有写访问权限):
你应该看一看。
这允许您添加一个或多个git存储库作为子树
缺点之一是,你需要认真对待你的承诺。如果使用不同子树中的文件提交多个更改,则所有存储库的历史记录中都会有此提交。如果你试图在一个回购协议中确定一个变更,却找不到日志中提到的文件,因为该文件从未属于该回购协议,那么这可能会非常糟糕。解决方案是将提交拆分到不同的存储库 这对我很有用:
git ls-files --stage | grep $160000
基于这篇伟大的文章:子模块并不是他想要的。他希望子模块中的更改也反映在超级模块中。只有当他同时对两份回购协议进行变更时,才会出现这种情况。一个用于子模块中的更改,另一个用于更新“super”项目中的修订标记。它不像svn中的外部程序那样工作。还有其他类似的解决方案,但它们也有其他缺点。这里引用了一句话:“这是子模块的一个重要方面:您将它们记录为它们所处的确切提交状态。您不能在master或其他符号引用中记录子模块。”您在另一个问题上发布了这篇文章,在那里它或多或少起作用,但在这里,这似乎真的不相关。
git clone --recursive git@github.com:mrafayaleem/libgdx.git
git ls-files --stage | grep $160000