Git to svn: добавление даты фиксации для регистрации сообщений - PullRequest
6 голосов
/ 11 июня 2010

Как мне сделать, чтобы имя / дата автора (или коммиттера) были добавлены в журнал сообщение при "dcommitting" для SVN?

Например, если сообщение журнала в Git:

This is a nice modif

Я бы хотел, чтобы сообщение в svn было примерно таким:

This is a nice modif
-----
Author: John Doo <John.Doo@company.com>  2010-06-10 12:38:22
Committer: Nice Guy <nguy@acme.org>  2010-06-10 14:05:42

(Обратите внимание, что в основном меня интересует дата, поскольку я уже сопоставил пользователей svn с .svn-авторами)

Любой простой способ? Крюк нужен? Другое предложение?
(Смотрите также: http://article.gmane.org/gmane.comp.version-control.git/148861)

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Один из способов сделать это - использовать скрипт, переменную окружения 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.

0 голосов
/ 11 июня 2010

Это только изменение формата вывода журнала?

git log --pretty="format:%s %an %ae %cn %d"
git help log
...