Git:如何处理多个代码库?

3
我有一个只读远程 git 仓库 A,在本地文件系统中已经克隆了。A 会定期更新,每次更新后我都会在系统中拉取并合并更新的代码。
我想要和我的团队成员一起协作修改 A 的文件,因此我创建了一个新的远程仓库 B。
如何管理同步 B 和我的本地仓库?我想学习正确的命令序列和配置选项来达到我的目标。以下是我想解决的情况:
1. 在 A 有更新后从 A 拉取,并将其推送到 B。 2. 从 A 拉取后,将其与我本地的文件合并,然后将其与 B 上的仓库合并后推送到 B。 3. 我希望 A、我的本地仓库和 B 都有相同的分支。
如果您能给予任何帮助,我将不胜感激。如果我的问题不太清楚,请指出,我将尝试编辑它。谢谢。

我建议阅读 git help workflows,它主要是关于分支管理的,但一旦你掌握了这个,管理众多的代码库就不会那么繁琐了。 - xenoterracide
3个回答

2

您可以尝试以下方法:

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或本地repo中...如果没有,您可以手动执行以下操作:

git checkout --track -b branch1 repoA/branch1

当您推送时,它们应该推送到远程相应的分支


感谢 @insidepower 的帮助。我们能够从一个远程代码库拉取并推送到另一个远程代码库吗?我需要更改一些配置设置(比如远程代码库1和远程代码库2的URL)吗? - vpk
@jjossarin:是的,你只需要执行 "git remote add <remote-ref> <server-url>" 然后 git push <remote-ref> <local-branch>:<remote-branch> 就可以了... - ken

1

我假设你有两个远程仓库,分别命名为 A 和 B,并且它们只配置了 URL。如果你没有遵循参考规范,请阅读 ProGit 书中的 相关章节

1:在 A 有更新后从 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都有相同的分支。


(Note: Simplified Chinese version)
$ 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

0
我建议在具有 B 的主机上设置 cron 作业。这样,来自 repo A 的更新会按时拉取(比如每小时两次)。你只需要从 B 拉取即可。

A上的只读repo包含更新,我的团队必须在该repo上工作。为此,我们现在都在本地机器上克隆了A,并在每次有新的更新时进行拉取。我们在本地文件上工作并相互交换文件。但我希望我们的团队拥有一个私有repo B,我们可以将更新推送到其中(以便其他人保持同步)。我没有B的ssh访问权限(或创建cron作业的特权)。我想学习正确的方法来完成任务-之后我会自己决定适当的自动化机制。 - vpk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接