Программно определить разницу между git-svn и git-репозиториями?
-
03-07-2019 - |
Вопрос
У меня есть некоторые настройки оболочки, которые динамически определяют псевдонимы в зависимости от того, какой тип репозитория VC содержит CWD - так, например, «d» запускает «svn diff» или «git diff», в зависимости от.(На основе этот пост в блоге, если кому-то интересно...)
Я хотел бы определить некоторые псевдонимы по-разному в зависимости от того, нахожусь ли я в репозитории git или репозитории git-svn.Есть ли простой способ определить разницу между ними?
Решение
Вы должны быть немного осторожны при выборе того, какие именно репозитории являются репозиториями git-svn.Репозиторий может содержать более одного репозитория svn.
Решение Kafka будет работать только в том случае, если репозиторий 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
Но это, пожалуй, слишком запутанно.Вам решать.
Другие советы
Вероятно, вы можете использовать вывод git config
команда, позволяющая различать репозитории git и git-svn.
git config --get svn-remote.svn.url
должен возвращать синхронизируемый URL-адрес svn, если он есть.
Существует также ветка под названием «trunk» и ветка под названием «trunk@[REV».Однако я думаю, что подход codelogics проще и чище.