对我来说,查看未跟踪文件的文件大小以及更改文件的旧/新大小将非常方便。
是否可以配置git以显示这些信息?
对我来说,查看未跟踪文件的文件大小以及更改文件的旧/新大小将非常方便。
是否可以配置git以显示这些信息?
git status --porcelain | awk '{print $2}' | xargs ls -hs | sort -h
git status --porcelain
会显示文件被修改。$ git status
?? IMG_20160813_205506_AO_HDR.jpg
?? IMG_20160813_205539_AO_HDR.jpg
?? IMG_20160813_211139_HDR.jpg
?? IMG_20160814_143649_HDR.jpg
awk '{print $2}'
将提取 ??
之后的内容。ls -hs
将以人类可读的格式显示每个文件的大小,并且 sort -h
将按大小排序。$ git status --porcelain | awk '{print $2}' | xargs ls -hs | sort -h
136 IMG_20160813_205506_AO_HDR.jpg
384 IMG_20160813_205539_AO_HDR.jpg
784 IMG_20160813_211139_HDR.jpg
5667898 IMG_20160814_143649_HDR.jpg
gst
以带有文件大小信息的漂亮格式输出。alias gst="git_status_size"
git_status_size(){
git status --porcelain | awk '{print $2}' | xargs ls -hl | sort -r -h | awk '{print $5 "\t" $9}'
}
输出:
$ gst
287MB video.mp4
53B README.md
33B 222.txt
18B 333.txt
6B 111.txt
git status
这样做。git status
这样做,因为你可以编写自己的命令来代替它。使用:git -C "$(git rev-parse --show-cdup)" ls-files --other --exclude-standard
获取文件列表。然后,您可以使用任何命令查看这些文件的统计信息。您可能希望在git status
之后立即运行此命令,并使用--untracked-files=no
禁止git status
列出它自己的内容。例如:
alias st='git status -uno;
git -C "$(git rev-parse --show-cdup)" ls-files --others --exclude-standard -z |
xargs -0 ls -lR'
这里我使用了-z
,因为我正在使用的命令xargs -0 ls -l
可以处理它,并将其表示为一个shell别名而不是一个Git别名。
这里有一个缺陷。虽然git status
与-uall
将枚举目录中的所有未跟踪文件,但git ls-files --others
不会:它的行为类似于默认的git status
,通过仅打印包含目录名称来总结这些文件。 在这里使用ls -l
将显示目录中的文件。要停止这样做,请改用ls -ld
,但是您当然看不到任何文件大小。
(要获取修改后的文件,请使用git ls-files -m
而不是--others
。)
以上所有答案都使用了git status --porcelain
,它返回从存储库根目录开始的文件路径。
如果我们想要相对文件路径,则更喜欢使用git status -s
。我编写了以下命令,仅显示存在的文件(已删除的文件不存在),并且可以在任何地方使用。
git status -s | grep -v D.* | awk '{print $2}' | xargs ls -hl | sort -r -h | awk '{print $5 "\t" $9}'
你也可以将以下内容添加到你的.bashrc
文件中,以便用作别名。
alias gst="git_status_size"
git_status_size(){
git status -s | grep -v D.* | awk '{print $2}' | xargs ls -hl | sort -r -h | awk '{print $5 "\t" $9}'
}
样例输出
7.8K nnp_replication_attempt_1/scaling.data
7.8K enhanced_sampling_1/scaling.data
5.3K nvt_transfer_H_template.lmp
5.3K ../replication_attempt_1/nvt_stretch_bond.lmp
719 enhanced_sampling_1/z1-ada.sh
这个对我有用:git status -s . | awk '{print $2}' | xargs ls -s M -S
解释
-s
:使用当前目录作为参考而不是仓库根目录(这是 --porcelain
要求的内容)。.
限制输出仅限于当前目录或以下的文件。-s M
:以 MB 打印文件大小。-S
是 ls
的参数,它按大小排序输出并避免了需要使用 sort
。这个命令可以处理包含空格的文件名。
git status --porcelain | awk '{print substr($0,4)}' | xargs ls -hs | sort -h
基于@ramwin的答案。
如果您的文件名称中有空格,运行ramwin的命令会出现错误“xargs:无法匹配双引号;默认情况下,引号对xargs来说是特殊符号,除非您使用-0选项”
我修改了awk部分为 awk '{print substr($0,4)}'
,substr($ 0,4)获取从git状态输出每行的第4个字符到末尾的文本。例如:
如果git状态--porcelain给出:?? "folder /带空格的文件夹/ fileA.ext"
awk'{print substr($0,4)}将输出"folder /带空格的文件夹/ fileA.ext"