列出状态为 git 的文件
list files with git status
背景
我很清楚 git status
的工作原理,甚至 git ls-files
。通常 git status
是我所需要和想要的,它完美地回答了这个问题:“我的状态是什么,我需要注意哪些文件?”
但是,我一直无法找到回答以下问题的快速命令:“我有哪些文件,它们各自的状态是什么?”因此,我需要目录的完整列表(如 ls -la
),其中有一列显示每个 file/directory.
的状态
我试过的
git status -s --ignored
非常接近我想要的输出格式,但它不会列出 HEAD
、索引和工作目录之间未更改的文件。此外,它将递归到目录中。
git ls-files
似乎能够以脚本形式提供所有必需的信息,但我无法阻止它递归列出所有目录的内容。
显然,我可以破解一些东西来获取这两个命令的输出并提供我想要的视图。但是,如果那里已经有一些可用的命令,我不想重新发明轮子。
问题
是否有某种方法可以列出目录中的所有文件及其各自的 git 状态?
我想要一个显示与 ls
完全相同的文件的完整列表。
备注
This other question 没有回答我的问题,因为我绝对想要一个 ls
等价物。包括未修改、忽略和未跟踪的文件,但不包括目录内容。
因为git status -s
的输出已经足够了,我们就围绕这个函数做一个bash例程吧!然后对于未更改的文件,我们可以 手动回显 正确的信号。在 specification 之后,我们可能会使用 space 的两个符号 ' ' 为此目的或者其他一些符号。例如。对于 Git 未跟踪的目录,选择符号“_”作为状态代码:
for FILE in *
do
if [[ -f $FILE ]]
then
if ! [[ $(git status -s $FILE) ]]
then
# first two simbols below is a two-letter status code
echo " $FILE"
else
git status -s "$FILE"
fi
fi
if [[ -d $FILE ]]
then
# first two symbols just selected as status code for directories
echo "__ $FILE"
fi
done
该脚本的工作方式与 ls
相同。也可以用;
写成一行
要限制路径 Git 检查到当前目录,请使用它的 Unix glob pathspecs。由于 git status
对索引和 HEAD 做了很多检查,使用它,并填写其余文件 ls
会告诉你,使用 ls
,只需 munge 它的输出与 git status
的输出具有相同的格式,并且只采用 git status
尚未列出的格式。
( git status -s -- ':(glob)*'; ls -A --file-type | awk '{print " "[=10=]}' ) \
| sort -t$'\n' -usk1.4
:(glob)
告诉 Git pathspec 的其余部分是一个 Unix glob,即 *
应该只匹配一个级别,就像(启用 dotglob)shell 通配符¹.
-t$'\n'
告诉sort
字段分隔符是换行符,即都是一个大字段,-usk1.4
说u
niquify,只取第一个运行、s
table 的,在不违反排序键顺序的情况下保留输入顺序(这有点慢,所以你必须专门要求),k1.4
表示密钥从第一个字段开始,该字段中的第四个字符,没有给出从那里到最后的结尾。
¹ 为什么他们决定让路径规范在默认情况下既不匹配 shell 规范也不匹配 gitignore 规范,我可能永远不会费心去学习,因为我更喜欢无知地反对他们恼人的选择.
背景
我很清楚 git status
的工作原理,甚至 git ls-files
。通常 git status
是我所需要和想要的,它完美地回答了这个问题:“我的状态是什么,我需要注意哪些文件?”
但是,我一直无法找到回答以下问题的快速命令:“我有哪些文件,它们各自的状态是什么?”因此,我需要目录的完整列表(如 ls -la
),其中有一列显示每个 file/directory.
我试过的
git status -s --ignored
非常接近我想要的输出格式,但它不会列出 HEAD
、索引和工作目录之间未更改的文件。此外,它将递归到目录中。
git ls-files
似乎能够以脚本形式提供所有必需的信息,但我无法阻止它递归列出所有目录的内容。
显然,我可以破解一些东西来获取这两个命令的输出并提供我想要的视图。但是,如果那里已经有一些可用的命令,我不想重新发明轮子。
问题
是否有某种方法可以列出目录中的所有文件及其各自的 git 状态?
我想要一个显示与 ls
完全相同的文件的完整列表。
备注
This other question 没有回答我的问题,因为我绝对想要一个 ls
等价物。包括未修改、忽略和未跟踪的文件,但不包括目录内容。
因为git status -s
的输出已经足够了,我们就围绕这个函数做一个bash例程吧!然后对于未更改的文件,我们可以 手动回显 正确的信号。在 specification 之后,我们可能会使用 space 的两个符号 ' ' 为此目的或者其他一些符号。例如。对于 Git 未跟踪的目录,选择符号“_”作为状态代码:
for FILE in *
do
if [[ -f $FILE ]]
then
if ! [[ $(git status -s $FILE) ]]
then
# first two simbols below is a two-letter status code
echo " $FILE"
else
git status -s "$FILE"
fi
fi
if [[ -d $FILE ]]
then
# first two symbols just selected as status code for directories
echo "__ $FILE"
fi
done
该脚本的工作方式与 ls
相同。也可以用;
写成一行
要限制路径 Git 检查到当前目录,请使用它的 Unix glob pathspecs。由于 git status
对索引和 HEAD 做了很多检查,使用它,并填写其余文件 ls
会告诉你,使用 ls
,只需 munge 它的输出与 git status
的输出具有相同的格式,并且只采用 git status
尚未列出的格式。
( git status -s -- ':(glob)*'; ls -A --file-type | awk '{print " "[=10=]}' ) \
| sort -t$'\n' -usk1.4
:(glob)
告诉 Git pathspec 的其余部分是一个 Unix glob,即 *
应该只匹配一个级别,就像(启用 dotglob)shell 通配符¹.
-t$'\n'
告诉sort
字段分隔符是换行符,即都是一个大字段,-usk1.4
说u
niquify,只取第一个运行、s
table 的,在不违反排序键顺序的情况下保留输入顺序(这有点慢,所以你必须专门要求),k1.4
表示密钥从第一个字段开始,该字段中的第四个字符,没有给出从那里到最后的结尾。
¹ 为什么他们决定让路径规范在默认情况下既不匹配 shell 规范也不匹配 gitignore 规范,我可能永远不会费心去学习,因为我更喜欢无知地反对他们恼人的选择.