如何在两个不同的git存储库(而不是克隆)中同步文件并保留历史记录?

时间:2009-12-07 19:14:27

标签: git

我维护了两个不同的git repos,需要共享一些文件,我希望一个repo中的提交显示在另一个repo中。在每个回购中进行持续维护的最佳方法是什么?

我一直是perlfaq (Github)的维护者之一,最近我担任维护Perl核心文档的角色,这也是git。

在我开始维护perlfaq之前很久,它就住在一个单独的源代码控制库中。我最近将其转换为git。 perl5-porters中的一个会定期同步perlfaq repo和perl repo中的共享文件。既然我们已经切换到git,我们就会有点懒惰转换工具,现在我就是这样做的人。目前,两个回购将分开。

目前,为了同步perl的新(每月)版本的FAQ,我几乎惭愧地说我只是复制perlfaq仓库中的 perlfaq * .pod 文件并覆盖它们在perl repo中。这会丢失历史等等。此外,有时有人会对perl repo中的那些文件进行更改,最后我会覆盖它(是的,请检查git diff你这个白痴!)。这些文件在回购中没有相同的路径,但我认为这是我可以改变的。

我想做的事情,在彩虹和小马的神奇世界中,是从perlfaq仓库中取出物品并将它们应用于perl repo,反之亦然,因此历史和提交ID在每个

  • 创建补丁有效,但管理它也需要做很多工作
  • Git子模块似乎只能用于拉入整个外部仓库
  • 我没有找到类似svn文件外部的东西,但无论如何都可以在两个方向上工作
  • 我喜欢从一个人那里取物品,然后在另一个
  • 中挑选它们

管理这个的好方法是什么?

2 个答案:

答案 0 :(得分:1)

子树合并策略与脚本git subtree相结合,可能对此有所帮助 它适用于推拉 它仍然有一些issue with merges,虽然Git1.7.0会使用“-Xsubtree”选项修复它,但仍值得研究。

答案 1 :(得分:-2)

我假设你想在perl repo中使用perlfaq历史记录。我这样做(在perl repo中)

git remote add perlfaq git://perlfaq... # real uri
git checkout perlfaq/master -b perlfaq
git checkout master # or whatever
git merge perlfaq

与流行的观点相反,git 必须有共同的历史来执行合并。我知道我在regen2中以这种方式合并3+ repo。这可能是第一次痛苦。但在那之后它不应该痛苦。不幸的是,你只能合并1-way,但如果你愿意的话,你可以从perl repo中挑选补丁到perlfaq。