我有一个 XML 文件,我们认为它是 git 中的二进制文件。该文件是外部修改和提交的。
我不关心谁编辑了它以及文件中有什么新内容。我只想在每次拉取时都拥有最新的文件版本。这时,每次git pull
我都有一个合并冲突。
我只是希望这个文件被覆盖在 every 上,而不是像每次我必须同步我的 repo 时git pull
手动做的事情。git fetch/checkout/reset
小心:我只想覆盖那个文件,而不是每个文件。
谢谢
此答案显示了如何始终为特定文件上的冲突合并选择本地版本。但是,在回答的中途,作者还描述了如何始终使用远程版本。
本质上,您必须使用git 属性为该特定文件指定特定的合并驱动程序,其中:
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
请参阅该答案以获取详细说明。
我以为你可以使用Git Hooks,但我没有看到有人在拉之前运行......
一种可能的解决方法是制作一个脚本来删除此文件并与所需的链接git pull
...
如果对文件的更改不是实际更改,则不应提交它们。这将使您的版本历史变得混乱并导致许多问题。
从您的陈述中我不太确定是哪种情况,但有两种可能性:
有问题的文件是一个本地存储文件,其内容与您的实际源代码无关。在这种情况下,该文件应该是您的 .gitignore 的一部分。
此文件实际上是您的源代码的一部分,因此将来会有相关更改。通过像您计划的那样设置合并设置,一旦此文件实际更改,您将造成麻烦。因为合并将是破坏性的。
在这种情况下,解决方案会稍微复杂一些(除了修复这个糟糕的工具,它会改变它实际上并没有改变的东西……)。您可能正在寻找的是假设未更改的 git 功能。您可以使用以下命令访问它:
git update-index --assume-unchanged <file>
git 文档(git help update-index
):
您可以将“假设未更改”位设置为您未更改的路径,以导致 git 不执行此检查。请注意,在路径上设置此位并不意味着 git 将检查文件的内容以查看它是否已更改 - 它使 git 忽略任何检查并假设它没有更改。当您对工作树文件进行更改时,您必须在修改它们之前或之后通过删除“假设不变”位来明确告诉 git。