Программно определить разницу между git-svn и git-репозиториями? - PullRequest
4 голосов
/ 30 декабря 2008

У меня есть некоторые настройки оболочки, которые динамически определяют псевдонимы в зависимости от того, какой репозиторий VC содержит CWD - так, например, 'd' выполняет 'svn diff' или 'git diff', в зависимости (На основании этого блога , если кому-то интересно ...)

Я хотел бы определить некоторые псевдонимы по-разному, в зависимости от того, нахожусь ли я в git-репо или в git-svn-репо. Есть ли простой способ определить разницу между ними?

Ответы [ 3 ]

5 голосов
/ 31 декабря 2008

Вы должны быть немного осторожны, когда решаете, какие именно репозитории являются репозиториями git-svn. Хранилище может содержать более одного svn-хранилища.

Решение Кафки будет работать только в том случае, если репозиторий svn был клонирован с опцией -s или --std-layout, в которой на самом деле есть ветвь trunk.

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

Самый простой способ проверить, есть ли svn-remote в конфигурации:

$ git config --get-regexp ^svn-remote

Это найдет любой настроенный репозиторий git-svn, как бы он ни назывался. Он выйдет со статусом 0, если есть совпадение, и 1, если нет совпадения.

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

$ git rev-list -1 --grep='git-svn-id' HEAD

Но это, пожалуй, слишком запутанно. Вы решаете.

5 голосов
/ 30 декабря 2008

Вероятно, вы можете использовать вывод команды git config, чтобы различать git и git-svn repo.

git config --get svn-remote.svn.url

должен возвращать синхронизируемый URL svn, если он есть.

0 голосов
/ 30 декабря 2008

Существует также ветвь с именем trunk и ветвь с названием trunk @ [REV]. Тем не менее, я думаю, что подход к codelogics проще и чище.

...