如何跨不同存储库将一个文件的更改合并到另一个文件中
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
抑制这些警告。您可能不想使用它并清除空格,但这是样式指南的问题
将一个文件从一个分支合并到另一个分支 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
抑制这些警告。您可能不想使用它并清除空格,但这是样式指南的问题