2015-03-23 3 views
1

Текст, приведенный ниже, является сообщением о фиксации, поступающим из зеркала Git живой Subversion, и все сообщения фиксации находятся в этом стиле. Есть ли какая-то команда, которую я могу использовать для извлечения информации в таблице, как, например, сиглевая строка для каждой фиксации.Какую команду я могу использовать для извлечения полей из этого сообщения Git svn mirror commit?

commit c49a28ae19400fd14d60cd42fda9b3f527a5ee80 
Author: martin <[email protected]> 
Date: Mon Mar 23 00:45:30 2015 +0000 

    SynEdit: win, IME Handler: Fixed (added) overwrite selection. Issue 0027712 

    git-svn-id: http://svn.freepascal.org/svn/lazarus/[email protected] 4005530d-fff6-0310-9dd1-cebe43e6787f 

В этом случае результат будет как

date, git-commit, svn-commit, author, note 
Mon Mar 23 00:45:30 2015 +0000, c49a28ae1, 48459, [email protected], SynEdit, etc 

и так далее. Я попытался с помощью некоторых команд, как

# get the commit id of the nth revision 
git log -n 1 | head -n 1 | cut -d " " -f 2 

и

# get svn id of HEAD revision 
git log -n 1 | head -n 7 | tail -n 1 | cut -d "@" -f 2 | cut -d " " -f 1 

Это становится довольно неудобно и волосатым, и я ищу для лучшего инструмента.

ответ

1

Я думаю, что вы ищете что-то вроде:

git log --format=format:"%ad,%h,,%ae,%s" <other selection parameters> 

за исключением того, что не включает в себя идентификатор SVN (и я не уверен, что если дата и электронной почты форматов, что вы хотите). Предположительно, СВН идентификатор можно извлечь из полной фиксации ноты, так что вы должны быть в состоянии использовать формат как

--format=format:"%ad,%h,,%ae,%s%n%N" 

и передать его через gawk скрипт что-то вроде:

awk 'NR==1{split($0,out,/,/);next;} 
    match($0,/@[0-9]+/){out[3]=substr($0,RSTART+1,RLENGTH-1)} 
    END{printf "%s,%s,%s,%s,%s\n",out[1],out[2],out[3],out[4],out[5]}' 

Ни одно из этого тестируется. :)