10

我对这个 Git 很陌生,需要一点帮助。

我最近在 GitHub 上创建了一个新的存储库并将其克隆到我的桌面上。我们称之为myProject。我的 GitHub 帐户中还有一个 fork,我将其作为子模块包含在 myProject 中。我们称之为myForkOfOtherProject,它是 otherProject 的一个分支

所以,这是目前的情况:

回购当前状态图

根据 GitHub

当一个 repo 被克隆时,它有一个名为origin的默认远程指向你在 GitHub 上的 fork,而不是它被 fork 的原始 repo。要跟踪原始存储库,您需要添加另一个名为upstream的远程。

所以,我的问题是,如何将上游设置为子模块?还是我不明白什么?

先感谢您。

4

2 回答 2

10

子模块

当您将一个子模块克隆到您的存储库中时,它将拥有自己的.git/config文件和自己的origin概念。假设子模块是您的(例如,您的遥控器上游没有第三方存储库),那么您无需担心为子模块创建上游遥控器。

如果您确实需要为子模块创建上游远程,这很容易。只需cd进入子模块的顶级目录,并以与主存储库相同的方式为其提供一个。

cd myForkOfOtherProject
git remote add upstream git://example.com/otherProject.git

没有命名空间冲突,因为子模块实际上只是一个普通的 git 存储库,在超级项目中跟踪了一些额外的元信息。超级项目和子模块不共享它们的.git/config文件。

出于所有意图和目的,您处理子模块内的上游的方式与处理任何其他存储库的方式相同。您在子模块中运行的 Git 命令独立于超级项目,超级项目最感兴趣的是跟踪子模块的当前提交 ID。

于 2012-06-17T08:42:57.297 回答
2
git remote add upstream git://github.com/otherUser/otherProject.git

仅当 git 协议(默认情况下,端口 9478)被 aithorized 时才有效。
我不能在工作中做到这一点(我什至没有提到 ssh 地址:ssh 也被“局域网外”远程地址阻止工作)。

git remote add upstream https://github.com/otheruser/otherProject.git

将工作(提供一些额外的设置

注意:在您的子模块存储库中创建上游(如CodeGnome 所述update that submodule with the latest of,已投票)对您对otherProject很有用

cd myForkOfOtherProject
git fetch upstream
# or fetch + merge:
git pull upstream

它不会用于你推回 otherProject (如果你分叉它,可能是因为你没有被列为合作者)。
如果您直接在 中进行任何进化myForkOfOtherProject,您将需要提交它,然后转到父 repo 并提交它(参见“子模块的真实性质”)。如果您希望初始维护者考虑到这一点,请提出拉取请求。otherProject

于 2012-06-17T10:33:03.720 回答