如何获得单个子文件夹的git-status?
当我在我的仓库的子文件夹中执行git status时,它也包括父文件夹的状态。
有没有办法将git-status限制到一个特定的文件夹?
git status .
将显示当前目录和子目录的状态。
例如,在这个树中给出文件(数字):
a/1 a/2 b/3 b/4 b/c/5 b/c/6
从子目录“b”, git status
显示整个树中的新文件:
% git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: ../a/1 # new file: ../a/2 # new file: 3 # new file: 4 # new file: c/5 # new file: c/6 #
但git status .
只是在“b”和下面显示文件。
% git status . # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: 3 # new file: 4 # new file: c/5 # new file: c/6 #
只是这个子目录,不在下面
git status .
以recursion方式显示“b”下的所有文件。 为了只显示“b”中的文件,而不是下面的文件,你需要传递一个文件列表(而不是目录)到git status
。 这有点烦琐,取决于你的shell。
岩组
在zsh中,您可以select具有“glob限定符” (.)
普通文件。 例如:
% git status *(.) On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: 3 new file: 4
巴什
Bash没有glob限定符,但是你可以使用GNU find
来select普通文件,然后将它们传递给git status
如下所示:
bash-3.2$ find . -type f -maxdepth 1 -exec git status {} + On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: 3 new file: 4
这使用-maxdepth
这是一个GNU查找扩展。 POSIX find没有-maxdepth
,但你可以这样做:
bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} + On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: 3 new file: 4
一些pipe道命令做一个目录作为参数:
git ls-files -t -o -m aDirectory
会给你所有的文件改变,但没有更新(不添加到阶段),或未跟踪。 而那个目录。
正如在这个线程中写的,git ls-files不支持“ --added
选项。
更根本的原因是因为
ls-files
pipe道是关于索引 。
添加不是关于索引和工作树之间的比较。
它位于HEAD提交和索引之间,不属于ls-filespipe道。
所以,使用这里提到的命令:
git diff-index --name-only -B -R -M -C HEAD src
会给你两个不添加和添加的文件
git diff-files --name-only -B -R -M -C src
只会给你没有添加的文件。 (在检测重写,重命名,复制,…)
像通常的pipe道命令一样,一些脚本是按顺序的;)
不完美的,但是这也可以在你感兴趣的目录中工作:
git status | grep -v ' \.\./'
这将隐藏所有需要在相对path中向上引用的目录。
如果你想从另一端得到颜色,把color.status
设置为always
:
git config color.status always
当我尝试git时,我没有find办法做到这一点。
我结束了:
x@x:~/x$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # b # main/a nothing added to commit but untracked files present (use "git add" to track) x@x:~/x$ git status | grep main # main/a
cd YOUR_REQUIRED_DIRECTORY,然后,
git状态。