Line 1: | Line 1: | ||
+ | == Easier merging when you know you always want "mine" or "theirs" == | ||
<code>cp</code> can be added as a "merge tool" which you can use selectively to accept one side or the other of merge conflicts automatically, without having to run a visual diff. (But it's a good idea to run visual diff or regular diff first to make sure whether you want the "local" or "remote" version!) Seems that so far in such cases I always want the "remote" version (in other words, the second version in the diff, or the non-HEAD version), so I just add cp in that direction as a "merge tool": | <code>cp</code> can be added as a "merge tool" which you can use selectively to accept one side or the other of merge conflicts automatically, without having to run a visual diff. (But it's a good idea to run visual diff or regular diff first to make sure whether you want the "local" or "remote" version!) Seems that so far in such cases I always want the "remote" version (in other words, the second version in the diff, or the non-HEAD version), so I just add cp in that direction as a "merge tool": | ||
Line 26: | Line 27: | ||
and so on for each file to be merged. | and so on for each file to be merged. | ||
+ | ==lsgit== | ||
<code>lsgit</code> is a script to list subdirectories which are git repositories, recursively, along with the branch or SHA1 of each. It depends on /etc/bash_completion.d/git though for the __git_ps1 function. (It would be better if I would find out the porcelain commands for that if possible, but I didn't.) | <code>lsgit</code> is a script to list subdirectories which are git repositories, recursively, along with the branch or SHA1 of each. It depends on /etc/bash_completion.d/git though for the __git_ps1 function. (It would be better if I would find out the porcelain commands for that if possible, but I didn't.) | ||
Revision as of 07:33, 18 May 2012
Easier merging when you know you always want "mine" or "theirs"
cp
can be added as a "merge tool" which you can use selectively to accept one side or the other of merge conflicts automatically, without having to run a visual diff. (But it's a good idea to run visual diff or regular diff first to make sure whether you want the "local" or "remote" version!) Seems that so far in such cases I always want the "remote" version (in other words, the second version in the diff, or the non-HEAD version), so I just add cp in that direction as a "merge tool":
git config --global mergetool.accept-remote.cmd 'cp $REMOTE $MERGED' git config --global mergetool.accept-remote.trustExitCode true
Usage:
git mergetool --tool=accept-remote [file ...]
and it will interact with you, something like this:
# git mergetool --tool=accept-remote Merging: file1.c file2.h Normal merge conflict for 'file1.c': {local}: modified {remote}: modified Hit return to start merge resolution tool (accept-remote): ...
and so on for each file to be merged.
lsgit
lsgit
is a script to list subdirectories which are git repositories, recursively, along with the branch or SHA1 of each. It depends on /etc/bash_completion.d/git though for the __git_ps1 function. (It would be better if I would find out the porcelain commands for that if possible, but I didn't.)
#!/bin/sh source /etc/bash_completion.d/git for d in `find -name ".git" | sort` do repopath=`dirname ${d}` pushd ${repopath} > /dev/null echo -e "$repopath \033[60G\033[33m `__git_ps1 %s` \033[0m" if [ "$1" == '-v' ]; then git status -uno fi popd > /dev/null done