Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GIT上的手动合并_Git_Merge_Manual - Fatal编程技术网

GIT上的手动合并

GIT上的手动合并,git,merge,manual,Git,Merge,Manual,我用一种专有的脚本语言开发代码,其中大部分配置都包含在代码本身中 显而易见的问题是测试环境和生产环境之间代码本身的差异,这正是我试图用GIT来管理的 由于我的测试环境非常不稳定,我想我可以在GIT中为它创建一个分支,同时进行更改(并将带有测试配置的代码保存在其中),在代码被接受后,我会将其合并到生产环境中 嗯,当我要求git合并我的分支时,它在代码方面做得非常好。。但是配置也被迁移了,我不得不一个文件一个文件地打开,把它改回原来的样子 我是否可以禁用GIT中的自动合并,并在代码冲突时威胁所有内容

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

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

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

嗯,当我要求git合并我的分支时,它在代码方面做得非常好。。但是配置也被迁移了,我不得不一个文件一个文件地打开,把它改回原来的样子

我是否可以禁用GIT中的自动合并,并在代码冲突时威胁所有内容,以便稍后手动与WinMerge或其他东西合并?代码很短,真的。既然我必须编辑它来应用配置

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

谢谢

f、

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

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

这样可以避免合并过程中可能出现的错误以及执行合并所需的时间

禁用自动合并

这可以通过编写一个小型合并驱动程序来实现,设置为。
unset
这样的策略可能就是您要寻找的

Unset
将当前分支中的版本作为暂定合并结果,并声明合并存在冲突。 这适用于没有定义良好的合并语义的二进制文件

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

这将在将“已清理”内容提交到回购之前自动执行您选择的“已清理”脚本。

这样的“
clean
”脚本可以帮助您自动更改代码,以保留或修改嵌入其中的配置值。

hnf。。我希望是这样。不幸的是,更糟糕的是,配置被嵌入到代码本身中。从技术上讲,“代码”是一个复杂的配置文件,其中一些内容涉及执行代码的环境(连接、ID和路径的种类)。这不可能这么难。。。我只希望我能做一些像
git diff master dev
这样的事情,当我为每个文件点击save时,更改都存储在当前分支中……嗯。。这很有趣,但我对GIT驱动程序不太熟悉。我已将以下内容添加到我的
.gitconfig
中:
[merge“manual”]name=manual merge driver=Unset
,然后添加到.git属性中:
*merge=manual
(从
git help merge
中拾取这些内容)但不起作用。你能对git驱动程序说得更具体些吗?谢谢f、 @flpgdt:这将是一个自定义合并驱动程序(在.gitconfig文件中定义)。我只是指合并属性(请参见)。一个简单的:
echo*.xxx merge=unset>dirWithConfgFiles\.gittattributes
就足够了(其中“xxx”是包含配置值的代码文件的扩展名)。它实际上不起作用。我有我的.gittributes(在我的根文件夹和包含确切文件的文件夹中都尝试过),比如
*.xml merge=Unset
。我会继续努力,不过还是要谢谢你。我还研究了如何创建干净的驱动程序,虽然我想我已经成功创建了它,但我不确定如何告诉GIT使用它:(谢谢!f.@flpgdt:这里有一个合并驱动程序的具体示例:。两个关键点:a/它是一个sh脚本(不是DOS脚本);b/脚本在
$PATH
中引用。嘿,再次感谢!我以前看过那篇文章,但这次成功地用它创建了我的驱动程序。实际上,以我想要的方式使用WinMerge非常简单!但是,手动合并似乎只有在发现冲突时才会生效……我希望我可以在所有合并中使用它。..