我有一个XML文件,我们在git中考虑二进制。该文件是外部修改和提交的。
我不关心谁编辑了它以及文件中的新内容。我只想在每次拉动时都有最新的文件版本。目前,每git pull
我都有合并冲突。
我只是想在每个git pull
上覆盖此文件,而不是每次我必须同步我的回购时手动执行git fetch/checkout/reset
之类的内容。
小心:我想覆盖那个文件,而不是每个文件。
由于
答案 0 :(得分:0)
我以为你可以使用Git Hooks,但我没有看到一个人在拉动之前跑步......
一种可能的解决方法是制作一个脚本来删除此文件并使用所需的git pull
链接......
答案 1 :(得分:0)
This answer显示了如何始终为特定文件上的冲突合并选择本地版本。但是,在答案的中途,作者还介绍了如何始终使用远程版本。
基本上,您必须使用git attributes为该特定文件指定特定的合并驱动程序,并使用:
echo binaryfile.xml merge=keepTheirs > dir/with/binary/file/.gitattributes
git config merge.keepTheirs.name "always keep their file during merge"
git config merge.keepTheirs.driver "keepTheirs.sh %O %A %B"
git add -A
git commit -m "commit file for git attributes"
然后在keepTheirs.sh
:
$PATH
cp -f "$3" "$2"
exit 0
请参阅该答案以获取详细说明。
答案 2 :(得分:0)
如果对文件的更改不是实际更改,则不应提交。这会使您的版本历史变得混乱并导致许多问题。
从你的陈述中我不太确定是哪种情况,但有两种可能性:
有问题的文件是本地存储文件,其内容与您的实际源代码无关。在这种情况下,该文件应该是.gitignore的一部分。
此文件实际上是您的来源的一部分,因此将来会有相关更改。通过像您计划的那样设置合并设置,一旦此文件实际更改,您将会遇到麻烦。因为合并将具有破坏性。
在这种情况下,解决方案有点复杂(除了修复蹩脚的工具,修改它实际上没有改变的东西......)。您可能正在寻找的是git的假设未更改功能。您可以使用以下命令访问它:
git update-index --assume-unchanged <file>
git docu(git help update-index
):
您可以将“假设未更改”位设置为 您没有更改的路径导致git不执行此检查。请注意,在路径上设置此位并不意味着git会检查 文件的内容,看它是否已经改变 - 它使git省略任何检查并假设它没有改变。当你做出改变时 对于工作树文件,您必须通过在修改之前或之后删除“假定未更改”位来明确告诉git 它们。