Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何使用一个存储库作为父存储库?_Git - Fatal编程技术网

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

Git 如何使用一个存储库作为父存储库?,git,Git,不确定标题的措辞是否正确,但是 我有repo-A和repo-B 在B中,我已将A和B设置为遥控器。 假设B是A的一个扩展名,带有一些附加文件,我希望定期用A的更改更新B,但不将附加的B文件推送到A 这可能吗。做这件事的最佳方法是什么?是的,你可以做得很简单: 在B中,我将A和B设置为遥控器 这正是你必须做的 您只需在项目中添加任意数量的遥控器,并以您喜欢的任何方式使用它们。(推至1,然后从另一个上拔出等) 远程地址是您的存储库可以与之通信的URL,您可以决定如何使用它们 克隆原始回购协议 添加

不确定标题的措辞是否正确,但是

我有
repo-A
repo-B


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


这可能吗。做这件事的最佳方法是什么?是的,你可以做得很简单:


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

这正是你必须做的

您只需在项目中添加任意数量的遥控器,并以您喜欢的任何方式使用它们。(推至1,然后从另一个上拔出等)

远程地址是您的存储库可以与之通信的URL,您可以决定如何使用它们

  • 克隆原始回购协议
  • 添加新远程
    git远程添加
  • 在单个repo中使用两个存储库中的代码
现在,您可以从两个远程设备中提取和合并分支,并将它们的代码保存在一个存储库中

# clone first repository
git clone <repo1>

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

# display the list of all the remotes
git remote -v
如下图所示,您将拥有2个存储库,用于构建大型存储库

# clone first repository
git clone <repo1>

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

# display the list of all the remotes
git remote -v
#克隆第一个存储库
git克隆
#添加远程
git远程添加
#显示所有遥控器的列表
git远程-v

我想用A的更改定期更新B,但不想将附加的B文件推送到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
#确保您位于存储库B的分支上
git拉原点A
#现在,在B分支中有了A的所有更改


除非有单独回购的具体要求,否则您所描述的最好是作为分支机构进行。B是a的一个分支。使用
git merge a
git rebase a
将B更新为任何其他分支,以您喜欢的为准。从现在起,我将假设合并。下面是合并后的情况

 1 - 2 - 3 - 6 - 7 - 10 - 12 - 13 [A]
          \       \               \
           4 - 5 - M - 8 - 9 - 11 - M - 14 [B]
如果它们必须是独立的存储库,您可以使用远程分支执行相同的操作。当您扩展一个您无法直接控制的项目时,您可以使用此选项。为了让事情更清楚一点,让我们称a为“上游”,B是您的存储库。A在B的上游。B只从上游拉动,从不后退

首先克隆A,然后将
origin
(即A)重命名为
上游

  • git克隆A
  • git远程重命名源站上游
然后添加一个新的原点,您希望远程存储修改并将其推送到该原点

  • git远程添加源站
  • git推送原点
现在你有了这个。请注意,所有三个分支都指向同一个提交

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 [upstream/master]
         \       \
          4 - 5 - M [master] [origin/master]
继续这样做,你会得到同样的结果,就像你做了一样

 1 - 2 - 3 - 6 - 7 - 10 - 12 - 13 [upstream/master]
          \       \               \
           4 - 5 - M - 8 - 9 - 11 - M - 14 [master] [origin/master]
重要的是:

  • 远程分支只是分支
  • 从上游拉动:
    git向上游拉动
  • 推送到原点:
    git推送到原点

“在B中,我已将A和B设置为遥控器”我将此理解为B是自己的遥控器。那没有道理。打字错误无论如何,你所描述的可以用一个分支做得更好。它们必须是单独的回购协议吗?@Schwern:不应该是打字错误。为什么说不通呢?在这种情况下,我不想要分支。这很复杂:)想想“社区版”和“高级版”,我想你的意思是“在我的本地存储库中,我将A和B设置为远程”。也许你应该解释一下你用git命令做了什么。