如何使用一个存储库作为父存储库?

Tho*_*sen 5 git

不确定标题是否正确,但是

我有repo-Arepo-B

在 BI 中将 A 和 B 设置为遥控器。
假设 B 是 A 的扩展,带有一些附加文件,我想定期使用 A 的更改更新 B,但不将附加 B 文件推送到 A

这可能吗。做这个的最好方式是什么

Sch*_*ern 2

除非有单独的存储库的具体要求,否则您所描述的内容最好作为分支来完成。git merge AB 是 A 的一个分支。使用或,将 B 更新为任何其他分支git rebase A,无论您喜欢什么。从现在开始我将假设合并。这就是合并后的样子。

 1 - 2 - 3 - 6 - 7 - 10 - 12 - 13 [A]
          \       \               \
           4 - 5 - M - 8 - 9 - 11 - M - 14 [B]
Run Code Online (Sandbox Code Playgroud)

如果它们必须是单独的存储库,您可以执行相同的操作,但使用远程分支。当您扩展一个您无法直接控制的项目时,您可以使用它。为了让事情更清楚一些,我们将 A 称为“上游”,B 是您的存储库。A 位于 B 的上游。B 只从上游拉动,从不推回。

通过首先克隆 A 进行设置,然后将其重命名origin(即 A)为upstream

  • git clone A
  • git remote rename origin upstream

然后添加一个新的原点,您要在其中远程存储修改并推送到它。

  • git remote add origin <url to your remote>
  • git push origin

现在你有了这个。请注意,所有三个分支都指向同一个提交。

1 - 2 - 3 [master] [origin/master] [upstream/master]
Run Code Online (Sandbox Code Playgroud)

正常工作,正常提交,推到原点。这是两次新提交和一次推送之后的结果。

1 - 2 - 3 [upstream/master]
         \
          4 - 5 [master] [origin/master]
Run Code Online (Sandbox Code Playgroud)

当你想更新时,首先git fetch upstream。这不会改变您的本地分支,它只会更新您的上游分支的副本。假设上游的主分支有两个新的提交。

1 - 2 - 3 - 6 - 7 [upstream/master]
         \
          4 - 5 [master] [origin/master]
Run Code Online (Sandbox Code Playgroud)

然后像其他分支一样合并git merge upstream/master

1 - 2 - 3 - 6 - 7 [upstream/master]
         \       \
          4 - 5 - M [master] [origin/master]
Run Code Online (Sandbox Code Playgroud)

您可以通过一个步骤完成此操作,如下所示git pull upstream master

继续这样做,你最终会得到与分支相同的结果。

 1 - 2 - 3 - 6 - 7 - 10 - 12 - 13 [upstream/master]
          \       \               \
           4 - 5 - M - 8 - 9 - 11 - M - 14 [master] [origin/master]
Run Code Online (Sandbox Code Playgroud)

重要的是:

  • 远程分支只是分支。
  • 从上游拉:git pull upstream
  • 推送到原点:git push origin