【问题标题】:How do I merge changes of one file into another across different repositories如何跨不同存储库将一个文件的更改合并到另一个文件中
【发布时间】:2015-12-04 08:25:58
【问题描述】:

将一个文件从一个分支合并到另一个分支是 asked before 和相当简洁的 solution 来做:

git checkout A
git checkout --patch B f

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

【问题讨论】:

  • 推送或获取提交。
  • @jthill:这并不容易:您可以挑选单个提交,但如果其中一个提交的影响超过感兴趣的文件,您导入/合并不需要的更改。仅 fetch 会导入远程/源存储库的一个分支的完整历史记录。如果这两个 repos 与不相关的文件和不相关的历史无关,那么这是一个巨大的磁盘空间开销,您必须事后清理。

标签: git merge patch


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2012-10-05
    • 2011-03-25
    • 2019-07-18
    • 2021-09-26
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多