我正在开发一个代码库,其中一个文件是自动生成的,并且经常更改。我发现重新定位我的本地分支通常会导致回退到这个文件的三路合并和失败。然后我必须修复文件并继续,但这可能会在一个rebase中发生多次,并且由于文件的性质,手动冲突解决通常非常讨厌。实际上,由于在尝试合并此特定文件时没有增加任何附加值,因此整个过程最终会陷入麻烦并且完全浪费时间。
鉴于它无论如何都是作为构建过程的一部分重新创建的,有没有办法告诉Git在rebase期间忽略这个文件?
请注意,我已经查看了其他类似的问题/答案,但没有看到任何具体解决这个问题的方法(如果有什么东西,请纠正我。)另外,为了记录,我不喜欢这种类型无论如何,文件都在版本控制中,但我担心我没有选择。
答案 0 :(得分:3)
如果文件是由您的构建生成的,那么它首先不应受版本控制。
git rm --cached <path/to/file>
echo <path/to/file> >> .gitignore
git add .gitignore
git commit -m "Removed <path/to/file> from version control"
答案 1 :(得分:1)
尽管我之前的回答是我仍然认为这是最干净的选择,但鉴于您的特殊情况,您仍然可以使用git帮助您处理始终存在冲突的文件,因为您无法影响源代码控制下的文件。
你需要告诉git它应该总是解决特定策略的特定文件的冲突(这里:theirs
win)。
git init
# Define a no-op merge driver for this repo
git config merge.theirs.driver true
# The file always-conflict is solved using the just setup 'theirs' driver
echo always-conflict merge=theirs >> .gitattributes
# Create two conflicts:
# - always-conflict is resolved automatically
# - other-conflict needs to be resolved by you
echo master-1 > always-conflict
echo master-1 > other-conflict
git add --all
git commit -m master-1
echo master-2 > always-conflict
echo master-2 > other-conflict
git add --all
git commit -m master-2
git checkout -b feature HEAD~1
echo feature > always-conflict
echo feature > other-conflict
git add --all
git commit -m feature
git rebase master
# The rebase will stop, but it'll only have you solve other-conflict.
如果您不希望将.gitattributes
文件提交给版本控制,请改用.git/info/attributes
。
答案 2 :(得分:1)
您可以通过将myfile.name binary
添加到.gitattributes
文件来告诉git将该特定文件视为二进制文件,其中myfile.name
是导致问题的文件的名称。这会告诉git该文件是二进制类型,不应该合并。
答案 3 :(得分:0)
您可以将文件(文件名和/或路径)放入名为.gitignore
的文件中
这将阻止git识别文件。