【问题标题】:Can I make "git status" show the file size of untracked files?我可以让“git status”显示未跟踪文件的文件大小吗?
【发布时间】:2019-02-14 12:19:22
【问题描述】:

查看未跟踪文件的文件大小对我来说非常方便。并且可能更改文件的旧/新大小。

是否可以配置 git 以显示它?

【问题讨论】:

    标签: git


    【解决方案1】:
    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}' 将提取?? 之后的内容
    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
    

    【讨论】:

      【解决方案2】:

      不,你不能让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,但当然您不会看到任何文件大小。

      (要获取修改后的文件,请使用git ls-files -m 而不是--others。)

      【讨论】:

        【解决方案3】:

        尝试将以下代码添加到您的 .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
        

        【讨论】:

        • 如果您已删除文件或未从存储库的根目录运行命令,则此脚本未优化。我已经编辑了这个来解决这两个问题:stackoverflow.com/a/70792144/6224662
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-06-04
          • 2013-04-24
          • 1970-01-01
          • 2019-10-30
          • 1970-01-01
          • 2010-10-25
          • 1970-01-01
          • 1970-01-01
          • 2012-05-17
          相关资源
          最近更新 更多