我有两个代码库的URL,希望将它们同步,使它们都包含相同的内容。在Mercurial中,我想要做的是:
hg pull {repo1}
hg pull {repo2}
hg push -f {repo1}
hg push -f {repo2}
这将导致两个仓库都有两个分支(我知道拥有两个分支并不常见,但我正在进行同步,需要非交互式的方式。其中一个仓库的分支将手动合并,然后再次运行同步)。
我想在Git中做同样的事情。例如,没有用户交互,将所有更改应用于两个仓库,稍后合并多个分支/头等等。
我试图使用命令中的URL而不是添加远程仓库来实现这一点,因为可能涉及多个仓库,为它们全部添加别名只会让我的脚本更加复杂。
我目前正在使用
git clone --bar {repo1}
克隆仓库,但我无法“更新”它。我尝试了get fetch {repo1}
,但似乎没有拉取我的更改;git log
仍然没有显示在repo1中添加的变更集。我还尝试在我的
push
和clone
中使用--mirror
,但那似乎会删除在本地不存在的repo2的变更集,而我需要保留来自两个仓库的变更:/。最好的方法是什么?
编辑:为了让我的意图更加清晰...
我有两个代码库(例如 BitBucket 和 GitHub),希望人们能够向其中任何一个推送(最终,一个将是 Git,一个将是 Mercurial,但现在假设它们都是 Git 以简化问题)。我需要能够运行一个脚本,以“同步”这两个代码库,使它们都包含两组更改,并且可能需要手动合并。
最终,这意味着我只需与其中一个代码库(例如 Mercurial)交互,我的脚本将定期拉取 Git 更改,我可以进行合并,然后再次推送。
在 Mercurial 中,这非常容易!我只需从两个代码库中拉取,然后使用 -f/--force
推送以允许推送多个分支。然后,任何人都可以克隆其中一个代码库,合并分支,然后再次推送。我想知道如何在 Git 中实现最接近的类似事情。它必须是 100% 非交互式的,并且必须保持两个代码库处于可以无限重复该过程的状态(这意味着不要重写历史记录/更改 changesets 等)。
fetch --all
,然后将github/master推送到origin/github,在那里进行合并,然后再次执行fetch并将其推回github/master,一切似乎都很顺利 :-) - Danny Tuppeny