Как заставить 'git ls-files' работать в подкаталогах? - PullRequest
2 голосов
/ 15 мая 2019

Я хочу запустить git ls-file --modified, чтобы получить список файлов с неизмененными изменениями.Я был удивлен, обнаружив, что он работает в корневом каталоге, но не в любом подкаталоге, где он печатает только файлы из подкаталога (в отличие от git status, например).

Шаги для воспроизведения:

mkdir repo
cd repo
git init
touch file.txt
git add file.txt 
mkdir subdirectory
echo "foo" >> file.txt    # file now has unstaged changes
git ls-files --modified   # This prints 'file.txt'
cd subdirectory/
git ls-files --modified   # This prints nothing

Как я могу изменить поведение git здесь?

1 Ответ

3 голосов
/ 15 мая 2019

По умолчанию многие команды git выполняются относительно вашего текущего рабочего каталога (состояние git, ls-файлы, ...).

Вы можете использовать -C:

git -C ../ ls-files --modified

если вы хотите, чтобы команда выполнялась относительно git 'toplevel', вы можете выполнить:

git -C $(git rev-parse --show-toplevel) ls-files --modified

со справочной страницы git:

   -C <path>
       Run as if git was started in <path> instead of the current working directory. When multiple -C options are given, each subsequent

EDIT Это также зависит от того, какой вывод вы хотите, так как @phd нет. Смотрите команды ниже и вывод, чтобы понять различные опции и их вывод:

> git -C ../ ls-files --modified
file.txt
> git -C $(git rev-parse --show-toplevel) ls-files --modified # wrt git toplevel no matter how deep you are in the tree
file.txt
> git ls-files --modified ../
../file.txt
> git ls-files --modified $(git rev-parse --show-cdup) # wrt git toplevel no matter how deep you are in the tree
../file.txt
...