Search code examples
gitmergegitattributes

merge strategy in .gitattributes not working


I want git to never have a conflict on this file:
test/file.txt
when merging. I tried the following in .gitattributes test/file.txt merge=theirs

but I need to define the theirs merge strategy. I saw online that I can define the ours strategy by executing this:
git config --global merge.theirs.driver true
which sets the driver to true (bash true) which will keep the local file instead of the new one.
I want to do the opposite. How can I define the theirs driver to get the new copy and discard the local one when merging (after a git pull)?


Solution

  • How can I define the theirs driver to get the new copy and discard the local one when merging (after a git pull)?

    As I mentioned in "How do I tell git to always select my local version for conflicted merges on a specific file?", you would need to call a script like:

    git config merge.keepTheir.name "always keep their during merge"
    git config merge.keepTheir.driver "keepTheir.sh %O %A %B"
    

    With keepTheir.sh (put anywhere in your PATH)

    cp -f $3 $2
    exit 0
    

    Or, as jthill suggests below in the comments, directly:

    git config merge.keepTheir.driver "cp -f %B %A"
    

    Plus, as noted by Tal Jacob - Sir Jacques in the comments:

    after you have configured the 'keepTheir' driver in the config file, you should navigate to your .gitattributes file and add the line:

    test/file.txt merge=keepTheir