如何获取单个文件夹的git-status非递归?这不是this question的重复,因为它们解决了如何git-status单个文件夹和子目录,例如。例如,接受的答案是使用git status .,它返回递归结果。
git-status
git status .
hc8w905p1#
进入所需的文件夹并用途:
这将显示您现在所在的给定文件夹的状态。另一个选项是用途:
git ls-files -t -o -m <desired path>
这将显示所有已更改但未更新(取消暂存)或未跟踪给定目录的文件。
在所需的文件夹中,使用git status + grep的组合来过滤结果
git status | grep -v /
wgxvkvu92#
解决方案是pathspec的定义(参见man pathspec)。它允许非递归的glob模式,甚至排除模式和属性过滤。本质上:可以给出以:开头的特殊路径,并在实际路径之前给出一些“魔术签名”。签名有长的和短的形式。对于您的情况,下面的工作很好:
pathspec
man pathspec
:
git status ':(glob)mypath/*'
:(*)…
*
glob
您还可以通过编写以下代码来明确排除子目录内容:
git status ':^mypath/*/*'
:?…
?
^
:^
:(exclude)
此变体可能具有略微不同的含义。(我还没有证实这一点,但它可能包括对实际子目录本身的更改,但不包括对其中文件的更改。)
2条答案
按热度按时间hc8w905p1#
进入所需的文件夹并用途:
这将显示您现在所在的给定文件夹的状态。
另一个选项是用途:
这将显示所有已更改但未更新(取消暂存)或未跟踪给定目录的文件。
非递归方式:
在所需的文件夹中,使用git status + grep的组合来过滤结果
wgxvkvu92#
解决方案是
pathspec
的定义(参见man pathspec
)。它允许非递归的glob模式,甚至排除模式和属性过滤。本质上:可以给出以
:
开头的特殊路径,并在实际路径之前给出一些“魔术签名”。签名有长的和短的形式。对于您的情况,下面的工作很好:
:(*)…
,其中*
是一个关键字。(glob
在这种情况下。)glob
没有短的。***注意单引号,**使 *git本身 * glob,而不是shell。(如果你选择的目录有很多条目,这可能会导致向git传递大量参数。)
您还可以通过编写以下代码来明确排除子目录内容:
:?…
,其中?
是一个关键字符。(^
在这种情况下。:^
的长形式是:(exclude)
。*此变体可能具有略微不同的含义。(我还没有证实这一点,但它可能包括对实际子目录本身的更改,但不包括对其中文件的更改。)