我如何使 `git ls-files` 在子目录中工作?
How an I make `git ls-files` work in subdirectories?
我想运行 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
我想运行 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