我可以让“git status”显示未跟踪文件的文件大小吗?

2w3rbyxf  于 2023-06-04  发布在  Git
关注(0)|答案(5)|浏览(228)

这将是非常方便的我看到的文件大小未跟踪的文件。可能还有更改文件的旧/新大小。
是否可以配置git以显示它?

alen0pnh

alen0pnh1#

git status --porcelain | awk '{print $2}' | xargs ls -hs | sort -h
  1. The 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
  1. awk '{print $2}'将提取??之后的内容
    1.最后,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
km0tfn4u

km0tfn4u2#

尝试将以下代码添加到.bashrc或. zshrc中。然后使用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
ldfqzlk8

ldfqzlk83#

不,你不能让git status这样做。
您可能不需要让git status执行此操作,因为您可以编写自己的命令来执行此操作。用途:

git -C "$(git rev-parse --show-cdup)" ls-files --other --exclude-standard

以获得文件列表。然后,您可以使用任何您喜欢的命令来查看有关这些文件的统计信息。您可能希望在git status之后立即运行此命令,并让git status使用--untracked-files=no抑制它自己的列表。例如:

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,但当然您不会看到任何文件大小。
(To获取修改的文件,使用git ls-files -m而不是--others。)

q0qdq0h2

q0qdq0h24#

以上所有答案都使用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
uqdfh47h

uqdfh47h5#

这一个为我工作:git status -s . | awk '{print $2}' | xargs ls -s M -S
说明

git

  • -s: list size using current directory as reference rather than repo root (which is what--瓷`要求)。
  • .将输出限制为仅当前目录或更低目录中的文件。

ls

  • -s M:打印大小(MB)。
  • ls-S参数按大小对输出进行排序,从而避免使用sort

相关问题