Загляните в репозиторий Git с помощью rev-parse
Если вы пишете много перехватчиков Git или активно используете Git в сценариях, rev-parse может оказаться той подкомандой, которую вы всегда хотели, даже не зная, что она вам нужна.
Я часто использую Git. На самом деле, вероятно, есть аргумент, что я иногда злоупотребляю этим. Я использую Git для создания CMS с плоскими файлами, веб-сайта и даже моего личного календаря.
Чтобы злоупотреблять Git, я пишу множество перехватчиков Git. Одна из моих любимых подкоманд Git — rev-parse
, потому что когда вы пишете сценарии с помощью Git, вам нужна информация о вашем репозитории Git так же часто, как вам нужна информация из этого.
Получение каталога верхнего уровня
Для Git нет каталогов дальше, чем его собственная папка верхнего уровня. Частично это позволяет переместить каталог Git, скажем, с вашего компьютера на флэш-накопитель или сервер без потери функциональности.
Git знает только о каталоге, содержащем скрытый каталог .git
, и обо всех отслеживаемых папках ниже него. Опция --show-toplevel
отображает корневой каталог вашего текущего репозитория Git. Это место, где все начинается, по крайней мере для Git.
Вот очевидный пример того, как вы можете его использовать:
$ cd ~/example.git
$ git rev-parse --show-toplevel
/home/seth/example.git
Это становится более полезным, когда вы углубляетесь в свой репозиторий Git. Независимо от того, где вы перемещаетесь внутри репозитория, rev-parse --show-toplevel
всегда знает ваш корневой каталог:
$ cd ~/example.git/foo/bar/baz
$ git rev-parse --show-toplevel
/home/seth/example.git
Аналогичным образом вы можете получить указатель на то, что делает этот каталог верхним уровнем: скрытую папку .git
.
$ git rev-parse --git-dir
/home/seth/example.com/.git
Найдите дорогу домой
Опция --show-cdup
сообщает вам (или, что более вероятно, вашему сценарию), как именно попасть в каталог верхнего уровня из вашего текущего рабочего каталога. Это намного проще, чем пытаться перепроектировать вывод --show-toplevel
, и это более портативно, чем надеяться, что оболочка имеет pushd
и popd
.
$ git rev-parse --show-cdup
../../..
Интересно, что вы можете солгать --show-cdup
, если захотите. Используйте опцию --prefix
, чтобы подделать каталог, из которого вы делаете запрос:
$ cd ~/example.git/foo/bar/baz
$ git rev-parse --prefix /home/seth/example.git/foo --show-cdup
../
Текущее местоположение
Если вам нужно подтверждение того, откуда выполняется команда, вы можете использовать --is-inside-work-tree
и --is-inside-git-dir
параметры. Они возвращают логическое значение на основе текущего рабочего каталога:
$ pwd
.git/hooks
$ git rev-parse --is-inside-git-dir
true
$ git rev-parse --is-inside-work-tree
false
Git-скрипты
Подкоманда rev-parse
утилитарна. Это не то, что большинству людей может понадобиться каждый день. Однако если вы пишете много перехватчиков Git или активно используете Git в сценариях, возможно, вам всегда нужна была именно та подкоманда Git, даже не зная, что она вам нужна.
Попробуйте это в следующий раз, когда будете вызывать Git в сценарии.