我有一个在两个分支中不同的配置文件。我希望在每个分支内跟踪这个配置文件,但在合并分支时总是忽略。
因此,在我合并两个分支之后,文件在每个分支中都保持与合并前相同。
我有一个在两个分支中不同的配置文件。我希望在每个分支内跟踪这个配置文件,但在合并分支时总是忽略。
因此,在我合并两个分支之后,文件在每个分支中都保持与合并前相同。
要使用下面的钩子,请执行例如
echo path/to/protected/file config >> .git/info/attributes
git config --add branch.server1.protect-attr config
属性config
和protect-attr
分支项正是为此而发明的。
.git/hooks/post-merge
:
#!/bin/sh
protect="$(git config --get-all branch."$(git branch|sed -n 's/^\*.//p')".protect-attr)"
if test ! -z "$protect"; then
git diff --name-only HEAD@{1} HEAD \
| git check-attr --stdin $protect \
| sed -n '/: unspecified$/!s,:.*,,p' \
| sort -u \
| sed -e 's,^,git checkout HEAD@{1} -- ",' -e 's,$," # protected file changed by merge,'
fi
foo
当您标记为配置的更改或任何其他文件合并到标记为保护它们的分支时,合并到分支配置将弹出恢复命令。
$ git merge wip
Updating 9906beb..888556e
Fast-forward
foo | 1 +
1 file changed, 1 insertion(+)
git checkout HEAD@{1} -- "foo" # protected file changed by merge
您还可以添加一个|sh -x
管道阶段来进行还原 - 甚至可以git commit --amend --no-edit
进行全自动操作。这几乎是一个入门工具包,请参阅githooks、gitattributes和git config手册页了解更多信息。
有一个libgit2
项目正在以一种对嵌入更友好的方式重新实现 git,它不是 git,但如果你不需要所有的 git,它有它的优势。不幸的是,它还不够完整,无法处理这个问题,所以请确保您使用的是完整的 git,而不是有限的客户端之一。
首先,您需要创建ours
合并驱动程序,除非您已经有一个。为此,请运行以下命令:
git config merge.ours.driver true
此驱动程序将允许您在合并会话期间首选目标分支的文件版本。
其次,让我们调用您的分支A
和B
.
在 branchA
上,在文件的目录中,创建一个名为的文件,.gitattributes
其中包含以下行:
myconfig.conf merge=ours
然后添加并提交.gitattributes
文件。
它会让 gitA
在myconfig.conf
合并B
到A
时始终保持. 如果您还需要合并A
到B
B
,请对分支重复相同的步骤。