如何将一个存储库用作父存储库?

时间:2016-05-08 20:42:10

标签: git

不确定标题是否正确,但

我有repo-Arepo-B

在B中,我将A和B设置为遥控器 让我们说B是A的扩展,带有一些额外的文件,我想定期用A的变化更新B,但不要将附加的B文件推送到A

这可能吗?什么是最好的方法

2 个答案:

答案 0 :(得分:2)

除非有特定要求有单独的回购,否则您所描述的最好是作为分支。 B是A.更新B的分支,与任何其他分支git merge Agit rebase A一样,无论您喜欢哪个。从这里出来我会假设合并。这是合并后的样子。

 1 - 2 - 3 - 6 - 7 - 10 - 12 - 13 [A]
          \       \               \
           4 - 5 - M - 8 - 9 - 11 - M - 14 [B]

如果它们必须是单独的存储库,则使用远程分支执行相同的操作。当您扩展无法直接控制的项目时,可以使用此方法。为了使事情更清楚,让我们称之为“上游”,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]

正常工作,正常工作,推动原产地。这是在两次新提交和推送之后。

1 - 2 - 3 [upstream/master]
         \
          4 - 5 [master] [origin/master]

如果要更新,请先git fetch upstream。这不会改变您的本地分支机构,它只会更新您的上游分支机构的副本。假设上游的主分支有两个新的提交。

1 - 2 - 3 - 6 - 7 [upstream/master]
         \
          4 - 5 [master] [origin/master]

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

1 - 2 - 3 - 6 - 7 [upstream/master]
         \       \
          4 - 5 - M [master] [origin/master]

您可以一步完成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]

重要的是:

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

答案 1 :(得分:1)

是的,你可以很简单地做到:

  

在B中,我将A和B设置为遥控器。

这正是您必须做的事情

您只需要为您的项目添加任何数字的遥控器,并以您喜欢的任何方式使用它们。 (推到1并从另一个拉等)。

遥控器是您的存储库可以与之交谈的网址,您可以决定如何使用它们。

  • 克隆原始仓库
  • 添加新的远程git remote add <origin2> <url2>
  • 使用单个仓库中的两个存储库中的代码

现在,您可以从2个遥控器中拉出并合并分支,并将它们的代码放在一个存储库中。

如下图所示,您将拥有2个存储库,可构建您的大型存储库。

# clone first repository
git clone <repo1>

# add remote 
git remote add <remote2> <url2>

# display the list of all the remotes
git remote -v
  
    

我希望定期更新B并更改A但不将其他B文件推送到A

  

此时您只需要将A中的更改拉到

# make sure you are on the branch from repository B
git pull origin A <branch>

# now you have all the changes from A in your B branch

enter image description here