Подтвердить что ты не робот

Как показать номер версии SVN в журнале git?

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

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

4b9b3361

Ответ 1

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

git-svn-id: svn://path/to/[email protected]###### <domain>

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

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

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: svn:[^@]*@\([0-9]*\) .*/\1 r\2/'

Ответ 2

Рассмотрим команду 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)

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

Обратите внимание, что find-rev выполняет поиск в текущей ветки, поэтому, если вы находитесь в master, а rxyz произошло в ветки, find-rev не найдет его.
Вы можете предоставить опции -B (до) или -A (после) для более широкого поиска, см. раздел справочной страницы git svn find-rev.

Ответ 3

Run:

git rev-parse HEAD

который дает вам git commit hash.

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

git svn find-rev <commit_hash>

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

Ответ 4

Закончено с чем-то вроде этого:

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

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

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