【问题标题】:Manual merge on GIT在 GIT 上手动合并
【发布时间】:2011-03-03 13:32:31
【问题描述】:

我使用专有的脚本语言进行开发,其中的大部分配置都包含在代码本身中。

明显的问题是测试和生产环境之间代码本身的差异,而这正是我试图用 GIT 管理的。

由于我的测试环境非常不稳定,我想我可以在 GIT 中为它创建一个分支,同时进行更改(并在其中保留带有测试配置的代码)并且在代码被接受后我会合并它投入生产。

好吧,当我要求 git 合并我的分支时,它在代码方面做得很好。但是配置也被迁移了,而且我必须逐个文件打开,将其更改回原来的样子。

无论如何,我是否可以禁用 GIT 的自动合并并威胁所有内容,因为代码冲突需要手动与 WinMerge 或以后的东西合并?代码很短,真的。而且由于无论如何我都必须对其进行编辑以应用配置...

ps.:请注意,我不是在问如何在 git 上配置 WinMerge。我有这些工具工作。我的问题是如何始终在分支之间执行手动合并。

谢谢!

f.

【问题讨论】:

    标签: git merge manual


    【解决方案1】:

    禁用自动合并

    这可以通过编写一个小的合并驱动程序来实现,设置在a .gitattributes file
    unset 之类的策略可能正是您想要的。

    Unset
    

    取当前分支的版本作为暂定合并结果,并声明合并有冲突。 这适用于没有明确定义的合并语义的二进制文件。

    但另一个有趣的 gitattribute 驱动程序是 clean filer:

    这将在将“清理”内容提交到存储库之前自动执行您选择的“清理”脚本。
    这样的“clean”脚本可以帮助您自动化您必须对代码进行的更改,以保留或修改其中嵌入的配置值。

    【讨论】:

    • 嗯.. 这很有趣,但我对 GIT 驱动程序不太熟悉。我已将以下内容添加到我的.gitconfig 中:[merge "manual"] name = manual merge driver = Unset,然后添加到 .gitattribute:* merge=manual(从git help merge 中提取这些内容)但没有用。你能更具体地说明 git 驱动程序吗?谢谢! f.
    • @flpgdt:这将是一个自定义合并驱动程序(确实在 .gitconfig 文件中定义)。我指的是合并属性(请参阅kernel.org/pub/software/scm/git/docs/gitattributes.html)。一个简单的:echo *.xxx merge=unset > dirWithConfgFiles\.gitattributes 就足够了('xxx' 是代码文件的扩展名,包括配置值)
    • 嘿,伙计。它实际上没有用。我有我的 .gitattributes(在我的根文件夹和包含确切文件的文件夹中都试过了),比如*.xml merge=Unset。我会继续努力,不过还是谢谢你。我也在研究如何创建干净的驱动程序,虽然我认为我设法创建了它,但我不确定如何告诉 GIT 使用它:( 谢谢!f.
    • @flpgdt:这里有一个合并驱动程序的具体示例:stackoverflow.com/questions/928646/…。两个关键的东西: a/ 它是一个 sh 脚本(不是 DOS 脚本); b/ 脚本在$PATH中引用。
    • 嘿,再次感谢!我以前看过那篇文章,但这次设法用它来创建我的驱动程序。实际上,如何以我想要的方式使用 WinMerge 非常简单!但是,手动合并似乎仍然只在发现冲突时才开始......我希望我可以将它用于所有合并......
    【解决方案2】:

    您说“大多数配置都包含在代码本身中”,但希望所有配置都隔离在特定于配置的文件中。如果是这种情况,您可以将配置代码的测试和发布用例保存在同一个分支中。然后,您可以使用命令行开关来使用测试配置而不是普通配置。

    如果您的程序可以从命令行(或环境变量、注册表项、文本文件或其他)读取配置选择,那么您根本不需要合并。程序可以在命令行开关不存在时忽略测试配置文件,在命令行开关存在时忽略发布配置。

    这可以让您避免在合并期间可能出现的错误以及进行合并所需的时间。

    【讨论】:

    • hnf.. 我希望是这样。不幸的是,更糟糕的是,配置嵌入在代码本身中。从技术上讲,“代码”是一个复杂的配置文件,其中的一些内容处理其执行的环境(连接类型、ID 和路径)。不可能这么难...我只希望我能做类似git diff master dev 的事情,当我为每个文件点击保存时,更改将存储在当前分支中...
    猜你喜欢
    • 2012-07-13
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2011-06-07
    • 2020-11-20
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多