我有一个配置文件,在两个分支中是不同的。我希望这个配置文件在每个分支中都被跟踪,但在合并分支时始终被忽略。
因此,在我合并这两个分支之后,该文件在每个分支中仍然保持与合并之前相同的状态。
我有一个配置文件,在两个分支中是不同的。我希望这个配置文件在每个分支中都被跟踪,但在合并分支时始终被忽略。
因此,在我合并这两个分支之后,该文件在每个分支中仍然保持与合并之前相同的状态。
ours
合并驱动程序,您需要创建它。要执行此操作,请运行以下命令: git config merge.ours.driver true
A
和B
。A
上,在该文件的目录中,创建一个名为.gitattributes
的文件,并在其中添加此行:myconfig.conf merge=ours
然后添加并提交.gitattributes
文件。
这将使得Git在将B
合并到A
时始终保留A
版本的myconfig.conf
。如果您还需要将A
合并到B
,请为B
分支重复相同步骤。
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)"
如果测试不为空 "$protect",则执行以下操作:
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工具而不是其中的有限客户端。
git config --global merge.ours.driver true
? - codiacgit checkout -f HEAD
放弃所有更改,然后重新执行合并。 - shakurov--no-ff
。 - Edward Thomson--no-ff
。 快进合并不执行合并操作;它检测到不需要进行合并并将分支设置为指向另一个提交。 没有忽略任何东西的机会。 - Edward Thomson