【问题标题】:Merge changes from specific file to its copy in same branch in Git将特定文件的更改合并到 Git 同一分支中的副本
【发布时间】:2014-12-22 22:00:40
【问题描述】:

我需要将 Git 中特定文件 A 的更改合并到同一分支中的另一个文件 A(这是 A 的副本,之后进行更改)。我是 git 新手,但我可能无法在这里使用分支。

我有两个分支:

Branch "Manufacturer"
Branch "CustomDevelopment"

还有以下文件:

"Manufacturer" -> /files/A
"CustomDevelopment" -> /files/A
"CustomDevelopment" -> /files/extensions/override/A (copy of /files/A with modifications)

该应用程序有一个特殊的概念,我可以通过简单地将文件放入/files/extensions/override/A 来覆盖/file/A。然后应用程序使用覆盖文件夹中的文件 A 而不是 /file 中的 A

现在,当制造商发布新版本时,我会更新 Manufacturer 分支,然后将更改合并到 CustomDevelopment 分支。现在的问题是:如何使用 git 将 /files/A 上所做的更改变为 /files/extensions/override/A

更新: 文件是 HTML 模板。因此,如果没有 git,就不可能使用特定于语言的概念来解决这个问题。在“制造商”上,我无法进行自定义更改/开发,需要使用现有文件。

【问题讨论】:

    标签: git merge git-merge


    【解决方案1】:

    配置或行为覆盖最好通过某种继承或组合机制在语言本身中处理。 “这就像/files/A,但有这些不同......”。例如,文件包含后跟覆盖定义。如果你没有,下一个最好的办法是生成带有一些文本(预)处理的文件。

    您确实希望避免不断将/files/A 中的更改合并到派生的/files/extensions/override/A

    也就是说,您可以以补丁形式获取对/files/A 的更改,然后使用patchgit apply 应用它们。使用补丁条级别删除组件。比如:

    files $ git diff <rev1> <rev2> -- A > ../A-patch.diff
    files $ cd ../extensions/override
    extensions/override $ git apply -p2 < ../../A-patch.diff
    

    【讨论】:

    • 谢谢!看来我必须尝试你的最后一个建议(补丁)。因为这些文件是 HTML 文件所以我不能使用别的东西。
    • 问题:GIT 补丁/应用是否考虑了这样一个事实,即覆盖/A 是文件/A 的副本,还是在不知道/使用相同来源信息的情况下两个不同文件之间的普通合并操作?
    • @CubeSilence HTML 文件可以通过文本处理生成。项目源代码的结构不必是部署的镜像;部署的结构可以通过一些构建过程生成。
    • 嘿,感谢您的想法,但文件已经是生成网页的模板。所以它不能那样工作。如果没有选项可以使用 GIT 正确实现这一点 - 我们必须像看起来那样手动进行这些合并。
    • @CubeSilence 模板可以由元模板生成。例如 PHP 代码在服务器应用程序中生成网页。如果您可以使用 M4 等宏处理器从一个文件生成它,您就不会想要复制和粘贴大量类似的 PHP。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 2011-12-16
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多