I am trying to merge two repositories, and there ar开发者_如何学Goe 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.
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?
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.
精彩评论