不确定标题是否正确,但
我有repo-A
和repo-B
在B中,我将A和B设置为遥控器 让我们说B是A的扩展,带有一些额外的文件,我想定期用A的变化更新B,但不要将附加的B文件推送到A
这可能吗?什么是最好的方法
答案 0 :(得分:2)
除非有特定要求有单独的回购,否则您所描述的最好是作为分支。 B是A.更新B的分支,与任何其他分支git merge A
或git 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