Как получить путь к файлу относительно корня репозитория Git? - программирование
Подтвердить что ты не робот

Как получить путь к файлу относительно корня репозитория Git?

Пример:

$ cd lib
$ git absolute-path test.c # how to do this?
lib/test.c
4b9b3361

Ответ 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