Я пишу shell-скрипт для автоматизации работы с Git. Мне нужен способ получить полный или относительный адрес корневой директории проекта при выполнении команды в любой вложенной директории (включая корневую).
Например, структура проекта, лежащего в Users/nickvolynkin/git-example
- root/
| - .git/
| - a/
| - b/
| - c/
| - c1/
| - c2/
cd c/c1/
echo somecommand
# вариант 1
../../
# вариант 2
Users/nickvolynkin/git-example
Ответ
Абсолютный путь через rev-parse
$ echo $(git rev-parse --show-toplevel)
Users/nickvolynkin/git-example
Относительный путь через rev-parse
$ echo $(git rev-parse --show-cdup)
../../
Абсолютный путь через alias
[alias]
root = "!pwd"
в shell-скрипте:
$ cd Users/nickvolynkin/git-example/c/c1
$ echo `git root`
Users/nickvolynkin/git-example
# отличие от просто pwd:
$ pwd
Users/nickvolynkin/git-example/c/c1
Абсолютный путь через временный alias (без регистрации и смс).
$ echo $(git -c alias.root='!pwd' root)
Для передачи аргументом в Git
Если этот адрес необходимо передать аргументом в какую-то из команд Git, то лучше использовать :/
# из любой папки делает reset на всю рабочую область
$ git reset :/
# то же самое, что и
$ git reset $(git rev-parse --show-toplevel)
Частично основано на ответах из Is there a way to get the git root directory in one command?
Комментариев нет:
Отправить комментарий