Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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_Repository - Fatal编程技术网

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

Git:如何使用多个存储库?,git,repository,Git,Repository,我有一个远程只读git存储库a,我已经在本地文件系统中克隆了它定期更新,每次更新后,我都会在系统中提取并合并更新的代码 我想与我的团队成员就A的文件进行协作,为此,我创建了一个新的远程存储库B 如何将B与本地存储库同步?我想学习正确的命令序列和配置选项,以实现我的目标。以下是我希望能够解决的场景: 1.在有更新后从A中拉出,将其推送到B。 2.从A中提取,将其与我的本地文件合并,然后将其推送到B,与B上的回购合并。 3.我希望A、我的本地回购协议和B都有相同的分支机构 如果有任何帮助,我将不胜感

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

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

如何将
B
与本地存储库同步?我想学习正确的命令序列和配置选项,以实现我的目标。以下是我希望能够解决的场景: 1.在有更新后从A中拉出,将其推送到B。 2.从A中提取,将其与我的本地文件合并,然后将其推送到B,与B上的回购合并。 3.我希望A、我的本地回购协议和B都有相同的分支机构

如果有任何帮助,我将不胜感激。 如果我的问题不是很清楚,请提出来,我会尝试编辑它。
谢谢。

我建议在具有
B
的主机上设置cronjob。通过这种方式,回购
A
的更新将及时(比如说每小时两次)被提取出来。您只需从
B

中拉出即可尝试

git克隆repoB url…
git远程添加repo url-to-repo-A
git pull repoA

(一)

git pull repoA
git推送报告

(二)

git pull repoA
要合并的git签出本地分支
git merge repoA/要合并的远程分支
git推送报告

(三) 我不确定是否有任何技巧可以用一个命令将repoA上的所有分支签出到repoB或本地repo。。。如果没有,则始终可以使用手动执行

git签出--跟踪-b branch1 repoA/branch1


当您推送时,它们应该推送到remote中相应的分支。我假设您有两个名为A和B的remote,它们只配置了url。如果不遵循参考规范,请阅读ProGit手册中的

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中提取更改,并在推送之前将其合并到本地分支中

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

A上的只读回购包含更新,我的团队必须处理该回购。为此,现在,我们所有人都在本地机器上克隆了一个,每次有新的更新到来时,我们都会拉。我们处理本地文件并相互交换文件。但我希望我们的团队有一个私人回购协议,我们可以在这个协议上推送我们的更新(这样我们其他人就可以保持同步)。我没有对B的ssh访问权(或创建cron作业的特权)。我想学习正确的方法来完成这项任务,然后我会自己决定一个合适的自动化机制。谢谢@insidepower的帮助。我们是否可以从一个远程回购中退出,然后推进到另一个远程回购中?我是否需要更改一些配置设置(如远程repo1和远程repo2的URL)?@jjossarin:yup,您只需要执行“git remote add”,然后执行git push:…我建议您阅读
git help工作流
,它主要是关于分支管理的,但一旦您完成了这项工作,管理大量存储库似乎就不那个么繁重了。