问题
I am trying to merge two repositories, and there are only a couple of "real" conflicts, but there are about 70 file conflicts of "Both added". When viewing a git diff, however, it only shows file mode changed.
What would be the best way to mass-accept the current file mode and ignore the incoming file mode?
A little background: These 2 repositories are of the same code, but one has been tracked through SVN, so doesn't have a history. I'm using git-svn to track it now and merge it with the current git repository.
The incoming conflicts on merge appear as: CONFLICT (add/add): Merge conflict in framework/file/name.php Automatic merge failed; fix conflicts and then commit the result.
Git status shows: both added: framework/file/name.php
If I use the git mergetool, it does not show any conflicts. Going through each file using this method takes a very long time.
回答1:
So after trying all the various merge strategies, and determining that I needed to take the file mode from the repository, discarding the local file mode, the best solution I came up was to use:
git checkout --theirs <remote/branch> -- path for the filemode changes, and used git mergetool for the code conflict resolution.
Using git diff, I could see which files were filemode changes, and which were file code changes.
git merge uses --recursive -Xours as the default merge strategy.
There is a git config variable: core.fileMode that can ignore file mode changes. See: How do I make Git ignore file mode (chmod) changes?
回答2:
How about git merge -Xours branchToMergeIn? It will merge the two and give preference to your current branch. Never tried it with mode changes, but should do the trick...
edited with jeffromi's merge strategy.
来源:https://stackoverflow.com/questions/6835796/how-to-mass-resolve-git-conflicts-with-only-file-mode-changes