On Fri, Feb 19, 2010 at 02:25:14AM -0800, Geoffrey Lee wrote: > On Thu, Feb 18, 2010 at 12:37 PM, Jeff King <peff@xxxxxxxx> wrote: > > On Thu, Feb 18, 2010 at 03:40:07AM -0800, Geoffrey Lee wrote: > > > >> When I use "git format-patch", it doesn't seem to include merges. How > >> can I perform a merge and then e-mail it to someone as a set of > >> patches? > > > > Is it important that it be patches, or simply that it go over email? In > > the latter case, you can use "git bundle" to create a set of commits, > > including merges, and send them to the remote. > > I was not aware of "git bundle". That does exactly what I need. Thanks! Below is git-send-bdl, a small wrapper I use for git bundle. It creates bundles only for the commits which are not already known to the origin and mails them to a configured address. It requires mutt for sending emails (the -m option is just for show). It should probably use sendmail. But maybe this is still useful as a reference. Have fun, Clemens --- #!/bin/bash usage () { echo "`basename $0`: [-t <address>] [-m <mailer>] [-r <remote>] [<repo>...]" >&2 exit 1 } if ! test -x `which getopt` then echo "fatal: getopt required but not found" >&2 exit 2 fi OPT=`getopt -o et:m:r: -- "$@"` code=$? if test $code -gt 0 then usage exit 1 fi eval set -- "$OPT" mailer=${GIT_SEND_BDL_MAILER:-mutt} remote=origin addr= edit= while test "$1" != "--" do case "$1" in -r) remote="$2"; shift;; -m) mailer="$2"; shift;; -t) addr="$addr $2"; shift;; -e) edit=YesPlease;; -h) usage;; *) echo "unkown option: $1" >&2; exit 2;; esac shift done shift if test -z $addr then addr="$GIT_SEND_BDL_TO" fi if test $# -eq 0 then cdup=`git rev-parse --show-cdup 2>/dev/null` if test $? -gt 0 then echo "fatal: no repositories specified and none found" >&2 usage fi set -- "$PWD/${cdup}" fi if test -z "$addr" then echo "fatal: no recipients specified" >&2 usage fi if ! test -x `which $mailer` then echo "fatal: mailer not found: $mailer" >&2 usage fi bundle=() while test $# -gt 0 do path=$1 shift cd $path name=`basename "$PWD"` echo " * $name" target=/tmp/${name}.git if ! git remote | grep -q "^$remote\$" then echo error: unknown remote: $remote >&2 continue fi refs="--branches" remote_refs=`git show-ref | cut -f2 -d' ' | \ grep ^refs/remotes/$remote/` if test -n "$remote_refs" then refs="$refs --not $remote_refs" fi refs="$refs --tags" git bundle create $target $refs cd - >/dev/null bundle[${#bundle[@]}]=$target done attachments= for i in ${bundle[@]} do if test -f $i then attachments="$attachments $i" fi done exec 3</dev/null if test -n "$edit" then exec 3<&0 fi $mailer -s 'git bundles' -a $attachments -- $addr <&3 ret=$? exec 3<&- if test $ret -gt 0 then echo "fatal: mailer exited with status $ret" >&2 exit 1 fi rm -f ${bundle[@]} -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html