Как определить, что вы находитесь в командной строке репозитория git-svn? - PullRequest
4 голосов
/ 31 января 2012

Я пытаюсь изменить приглашение bash для распечатки, если я нахожусь в репозитории git-svn. Я вижу, что в репозиториях git svn есть папка .git / svn, поэтому я могу проверить с помощью:

# Find the top level git folder
_git_dir=`git rev-parse --show-toplevel 2> /dev/null`
# Find svn folder
_gsvn_check=`cd $_git_dir; ls .git/svn 2> /dev/null`

Но потом я заметил, что в моем обычном git-репозитории есть папка .git / svn. Есть ли способ узнать наверняка, что вы находитесь в git-svn?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Каталог .git/svn может быть создан, если вы запустите любую команду git svn в любом репозитории - например, просто запустить git svn info, а Карл Норум предполагает, что создаст его. Тем не менее, немного лучшим тестом может быть то, что .git/svn существует и не является пустым, например,

[ -d .git/svn  ] && [ x != x"$(ls -A .git/svn/)" ] && echo Looks like git-svn

Если вы хотите более строгий тест, вы можете просмотреть историю HEAD любых сообщений о фиксации, которые содержат git-svn-id - по сути, это то, что git svn info делает, прежде чем оно сдается. Например:

[ x != x"$(git log -n 1 --grep='^\s*git-svn-id' --oneline)" ] && echo "git-svn!"

... но звучит так, как будто это может быть слишком медленно для вашего варианта использования.

Исходный код git-svn.perl описывает макет репозитория git-svn в его различных версиях:

... чтобы вы могли написать тесты для всех этих, если вы хотите быть осторожными, чтобы поймать все разные версии.

1 голос
/ 31 января 2012

Вы должны быть в состоянии использовать git svn info. Пример вывода для репозитория git-svn:

Path: .
URL: svn+ssh://url/path/to/something/trunk
Repository Root: svn+ssh://path/to/something
Repository UUID: c22683c8-8Bcb-47f9-aeb8-1c337d8f7a2d
Revision: 12345
Node Kind: directory
Schedule: normal
Last Changed Author: somebody
Last Changed Rev: 12345
Last Changed Date: 2012-01-24 16:38:36 -0800 (Tue, 24 Jan 2012)

И для обычного git-репо:

Unable to determine upstream SVN information from working tree history
...