Один из способов сделать это - использовать скрипт, переменную окружения GIT_EDITOR
и опцию dcommit
--edit
.
Сохранить следующее в файл, назовем его svnmessage.sh
:
#!/bin/sh
c=`git rev-parse HEAD`
t=`git cat-file -t $c`
m=`cat "$1"`
if [ "commit" = "$t" ]; then
o=`git cat-file $t $c`
o_a=`echo "$o" | grep '^author '`
o_c=`echo "$o" | grep '^committer '`
author=`echo "$o_a" | sed -e 's/^author \(.*>\).*$/\1/'`
authorts=`echo "$o_a" | sed -e 's/^author .*> \([0-9]\+\) .*$/\1/'`
authordt=`date -d @$authorts +"%Y-%m-%d %H:%M:%S %z"`
committer=`echo "$o_c" | sed -e 's/^committer \(.*>\).*$/\1/'`
committerts=`echo "$o_c" | sed -e 's/^committer .*> \([0-9]\+\) .*$/\1/'`
committerdt=`date -d @$committerts +"%Y-%m-%d %H:%M:%S %z"`
m="$m
-----
Author: $author $authordt
Committer: $committer $committerdt"
fi
echo "$m" > "$1"
Убедитесь, что скрипт исполняемый: chmod +x svnmessage.sh
.И запустите ваш dcommit
как:
GIT_EDITOR="/path/to/script/svnmessage.sh" git svn dcommit --edit
Опция --edit
будет edit the commit message before committing to SVN
, используя переменную окружения GIT_EDITOR
для обработки сообщения фиксации.См. git-svn
и git-var
для получения дополнительной информации.
Вы можете создать псевдоним, чтобы сделать вещи немного проще:
git config --global alias.dcommit-edit '!GIT_EDITOR="$HOME/bin/svnmessage.sh" git svn dcommit --edit'
Затем просто используйте git dcommit-edit
.
Сценарий полагается на то, как git-svn.perl
перекачивает вывод git cat-file
для создания сообщения фиксации SVN.Эта же техника используется для извлечения информации об авторе и коммиттере.Простой коммит может выглядеть следующим образом:
$ git cat-file commit 24aef4f
tree eba872d9caad7246406f310c926427cfc5e73c8d
parent 7dd9de9b5c68b9de1fc3b798edbab2e350ae6eac
author User <user@acme.com> 1321054806 -0500
committer User <user@acme.com> 1321054806 -0500
foo-27
Как правило, сценарию передается .git/COMMIT_EDITMSG
в качестве параметра;содержимое которого будет содержать сообщение Git commit, которое будет использоваться для сообщения SVN commit.