如何跨不同存储库将一个文件的更改合并到另一个文件中

How do I merge changes of one file into another across different repositories

将一个文件从一个分支合并到另一个分支 asked before with the rather concise solution 已完成:

git checkout A
git checkout --patch B f

但是如何跨两个存储库有效地做到这一点呢?

也有一个简单的解决方案,它涉及打补丁。 git 可以很好地处理通过电子邮件发送的补丁。这是 Linus Torvalds 的重要初始用例之一。所以我们首先在源仓库中生成这样一个补丁文件,然后在目标仓库中使用它:

cd source_repository/
git log --reverse --follow -p --format=email   filename  > patch

cd other_repository/
git am --whitespace=nowarn source_repository/patch

rm source_repository/patch

一些解释:

  • git am代表“git应用邮箱文件”,用于集成某人通过电子邮件发送的补丁
  • git log –p 可以使用选项 --format=email
  • 创建这样的补丁文件
  • --follow 用于跟踪文件的完整历史记录,即使它已重命名。 --follow 阻止 git log 接受多个文件名。但这是一个重要的开关,这就是为什么我建议在多个文件的循环中使用此方法。
  • 需要--reverse,因为git am要求提交按时间顺序排列,git log默认不输出。
  • 默认情况下 git am 警告带有尾随空格的行。 --whitespace=nowarn 抑制这些警告。您可能不想使用它并清除空格,但这是样式指南的问题