我如何使“ git ls-files”在子目录中起作用



我想运行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的行为?

默认情况下,许多git命令相对于您当前的工作目录(git状态,ls-files,...(。

您可以使用-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

最新更新