Как показать номер ревизии SVN в журнале git? - PullRequest
31 голосов
/ 20 мая 2010

Я настраиваю свой журнал git, чтобы все было в одной строке. В частности, я добавил следующий псевдоним:

lg = log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%an%Creset - %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative

Итак, когда я запускаю git lg, я вижу следующее:

* 41a49ad - zain - commit 1 message here (3 hours ago)
* 6087812 - zain - commit 2 message here (5 hours ago)
* 74842dd - zain - commit 3 message here (6 hours ago)

Однако я тоже хочу добавить туда номер редакции SVN, чтобы он выглядел примерно так:

* 41a49ad - r1593 - zain - commit 1 message here (3 hours ago)

Обычный git log показывает номер ревизии SVN, поэтому я уверен, что это должно быть возможно. Как мне это сделать?

Ответы [ 4 ]

30 голосов
/ 20 мая 2010

Рассмотрим команду git svn

  • имеет функцию журнала, аналогичную git log: git svn log
  • имеет параметр find-rev (для извлечения SVN-версии из ключа SHA1) (представлен в git 1.6.0 )

Я не уверен, что вы можете объединить эти два параметра в одной командной строке.
Сценарий (немного похожий на этот , который не совсем то, что вы хотите, но все же может дать некоторую идею) может быть в порядке.


sdaau добавляет в комментариях :

Пример этого:

git svn find-rev $(git log --max-count 1 --pretty=format:%H)
14 голосов
/ 18 января 2013

Пробег:

git rev-parse HEAD

, который дает вам хэш коммитов.

Затем используйте этот хеш коммита для запуска:

git svn find-rev <commit_hash>

Что дает вам SVN ревизию.

9 голосов
/ 20 мая 2010

Когда вы говорите, что "обычный git log показывает номер ревизии SVN", я предполагаю, что вы имеете в виду, что имеете дело с репозиторием, обработанным git svn, который по умолчанию добавляет такую ​​строку в конце синхронизированные коммиты:

git-svn-id: svn://path/to/repository@###### <domain>

Теперь, что касается git, это просто случайный текст, поэтому я сомневаюсь, что вы можете найти аксессор % для чтения номера ревизии ###### оттуда.

На данный момент лучшим вариантом будет просто проанализировать вывод простого git log самостоятельно. Вот грубая отправная точка:

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: svn:[^@]*@\([0-9]*\) .*/\1 r\2/'
8 голосов
/ 12 марта 2012

Закончилось примерно так:

git svn log --oneline -1 | cut -d '|' -f1

Это дает последнюю ревизию из этого репо (вы можете настроить параметры git svn log для отображения другой ревизии, но сохранить --oneline и -1), но с конечным пробелом (что-то вроде "r9441 "), который я считаю должно быть легко раздеться.

Надеюсь, это поможет ...

...