Git:如何使用多个存储库?

时间:2010-06-26 13:31:38

标签: git repository

我有一个远程只读git存储库A,我已经在我的本地文件系统中克隆了它。 A会定期更新,每次更新后我都会在系统中提取并合并更新后的代码。

我想与我的团队成员就A的文件进行协作,为此,我创建了一个新的远程存储库B

如何设法将B与本地存储库同步?我想学习正确的命令序列和配置选项来实现我的目标。以下是我希望能够解决的方案: 1.在有更新后从A拉出,将其推送到B. 2.从A中拉出,将其与我的本地文件合并,然后将其推送到B,与B上的repo合并。 我希望所有的A,我的本地仓库和B都有相同的分支。

我会感谢任何帮助。 如果我的问题不是很清楚,请提及,我会尝试编辑它。 感谢。

3 个答案:

答案 0 :(得分:2)

你可以尝试

  

git clone repoB url ...
  git remote add repoA url-to-repo-A
  git pull repoA

1)

  

git pull repoA
  git push repoB

2)

  

git pull repoA
  git checkout local-branch-to-merge
  git merge repoA / remote-branch-to-merge
  git push repoB

3) 我不确定是否有任何技巧可以通过一个命令检查repoA上的所有分支到repoB或本地仓库...如果没有,您可以随时手动执行

  

git checkout --track -b branch1 repoA / branch1

当你推动时,他们应该推送到远程

中的相应分支

答案 1 :(得分:1)

我假设你有两个名为A和B的遥控器,它们只配置了url。如果您不遵循refspecs,请阅读ProGit书中的relevant chapter

1:有更新后从A拉出,将其推送到B

$ # pull = fetch + (often fast-forward merge)
$ git fetch A # fetches all objects from A (all branches, commits; everything)
$ git push B 'refs/remotes/A/*:refs/heads/*'
$ # I've quoted so that the shell doesn't try to expand the *

编辑:我认为您不希望将更改合并到您的本地分支机构。

2:从A拉出,将其与我的本地文件合并,然后将其推送到B,与B上的回购合并。

$ git pull A # fetch + attempt to merge changes in all branches
$ # Resolve any conflicts here
$ git push B '+refs/heads/*:refs/heads/*' # omit the + if it's a FF push
$ # Default is to push matching branches

编辑:以上内容并未合并B中的更改。如果您愿意这样做,则必须从B中提取更改并将其合并到本地分支中,然后再推送。< / p>

3:我希望所有的A,我的本地仓库和B都有相同的分支

$ git pull A
$ git checkout branchx
$ git reset --hard A/branchx # Warning! All local changes will be destroyed
$ # Repeat the above for all branches
$ git push B '+refs/heads/*:refs/heads/*' # Warning! Data in B is overwritten

编辑:如果您要删除陈旧的跟踪分支,请运行

$ git remote prune A
$ git remote prune B

答案 2 :(得分:0)

我建议在拥有B的主机上设置cronjob。这样,来自回购A的更新将被及时提取(比如每小时两次)。你只需要从B拉出来。