Как получить путь к файлу относительно корня репозитория Git?
Пример:
$ cd lib
$ git absolute-path test.c # how to do this?
lib/test.c
Ответы
Ответ 1
Начиная как минимум с git 1.6.0, используйте ls-files
:
$ cd lib
$ git ls-files --full-name test.c
lib/test.c
Для старых git используйте git ls-tree
:
$ cd lib
$ git ls-tree --full-name --name-only HEAD test.c
lib/test.c
Это работает только для файлов, которые были переданы в репо, но это лучше, чем ничего.
Ответ 2
Вставка следующего в ваш терминал bash будет работать независимо от того, существует ли в настоящее время "test.c" или нет. Вы можете скопировать функцию git -absolute-path в ваш .bashrc файл для удобства в будущем.
git-absolute-path () {
fullpath=$([[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}")
gitroot="$(git rev-parse --show-toplevel)" || return 1
[[ "$fullpath" =~ "$gitroot" ]] && echo "${fullpath/$gitroot\//}"
}
git-absolute-path test.c