我想运行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的行为?
答案 0 :(得分:3)
默认情况下,许多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
编辑 它还取决于您想要哪种输出,而不是@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