我对这个Git事情很陌生,需要一些帮助。
我最近在GitHub上创建了一个新的repo并将其克隆到我的桌面上。我们称之为 myProject 。我的GitHub帐户中也有一个fork,我将其作为子模块包含在myProject中。我们称之为 myForkOfOtherProject ,这是 otherProject 的分支。
所以,这是目前的情况:
当克隆了一个repo时,它有一个名为 origin 的默认远程 指向GitHub上的fork,而不是它分叉的原始repo 从。要跟踪原始仓库,您需要添加另一个仓库 远程名为上游。
所以,我的问题是,如何将上游设置为子模块?或者我不明白什么?
提前谢谢。
答案 0 :(得分:8)
将子模块克隆到存储库时,它将拥有自己的 .git / config 文件及其自己的 origin 概念。假设子模块是您的(例如,您的遥控器上游没有第三方存储库),那么您不必担心为子模块创建上游远程。
如果你做需要为你的子模块创建一个上游遥控器,这很容易。只需cd
进入子模块的顶级目录,并按照与主存储库相同的方式给它一个。
cd myForkOfOtherProject
git remote add upstream git://example.com/otherProject.git
没有命名空间冲突,因为子模块实际上只是一个普通的git存储库,在超级项目中跟踪了一些额外的元信息。超级项目和子模块不共享 .git / config 文件。
出于所有意图和目的,您可以像处理任何其他存储库一样处理子模块中的 origin 和 upstream 。您在子模块中运行的Git命令独立于超级项目,超级项目主要关注跟踪子模块的当前提交ID。
答案 1 :(得分:2)
git remote add upstream git://github.com/otherUser/otherProject.git
仅在git协议(默认情况下为端口9478)被理论化时才有效 我无法从工作中做到这一点(我甚至没有提到ssh地址:ssh也被禁止从“局域网外”远程地址工作。)
git remote add upstream https://github.com/otheruser/otherProject.git
将有效(提供some additional settings)
注意:在子模块仓库中创建上游(CodeGnome described,upvoted)对于update that submodule with the latest of
otherProject
cd myForkOfOtherProject
git fetch upstream
# or fetch + merge:
git pull upstream
它不会用于你推回到其他项目(如果你分叉它,可能是因为你没有被列为合作者)。
如果你直接在myForkOfOtherProject
中进行任何演化,你将需要提交它,然后转到父repo并提交它(参见“true nature of submodules”)。如果您希望初始otherProject
维护者考虑到这一点,请创建一个pull request。