我有一个远程只读git存储库A
,我已经在我的本地文件系统中克隆了它。 A
会定期更新,每次更新后我都会在系统中提取并合并更新后的代码。
我想与我的团队成员就A
的文件进行协作,为此,我创建了一个新的远程存储库B
。
如何设法将B
与本地存储库同步?我想学习正确的命令序列和配置选项来实现我的目标。以下是我希望能够解决的方案:
1.在有更新后从A拉出,将其推送到B.
2.从A中拉出,将其与我的本地文件合并,然后将其推送到B,与B上的repo合并。
我希望所有的A,我的本地仓库和B都有相同的分支。
我会感谢任何帮助。 如果我的问题不是很清楚,请提及,我会尝试编辑它。 感谢。
答案 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
拉出来。