【问题标题】:List all the files that ever existed in a Git repository列出 Git 存储库中曾经存在的所有文件
【发布时间】:2009-02-12 21:23:43
【问题描述】:

您是否有一种简洁的方法来列出指定分支中曾经存在的所有文件?

【问题讨论】:

  • “曾经存在过”?它是否包括几个月前提交版本中存在的文件,并且它们可能会在当前提交版本中被删除?

标签: git


【解决方案1】:

这是 Strager 的solution 的简化版本:

git log --pretty=format: --name-status | cut -f2- | sort -u

编辑:感谢 Jakub 在 cmets 中教给我更多知识,这个版本的管道更短,让 git 有更多机会把事情做好。

git log --pretty=format: --name-only --diff-filter=A | sort -u

【讨论】:

  • @Dustlin:添加 --diff-filter=A 选项(仅列出添加的文件)。如果您启用了重命名检测并且在历史记录中有重命名,则当前版本(没有 sed 过滤仅添加的文件)将失败。我认为您可以使用 --name-only 代替 --name-status 并从管道中删除 'cut -f2-'。
  • 在我的一个存储库中,第二个命令与第一个命令不同,我得到了很多重复的行(包括输出开头的一些空白行)。跨度>
  • 如果您需要比文件名更多的信息: $ git log --pretty=format:"%h %an [%cd]: %s" --name-only |切-f2- |排序-u | grep 文件名.ext
  • 注意:--all 是您需要的东西,如果您有多个孤立的小费。例如,一个 repo 中有多个单独的历史记录。
  • --diff-filter=A 忽略通过复制现有文件创建的文件,因此添加它可能并非总是是您想要的。
【解决方案2】:

这对于检查文件名是否存在于 repo 中是正确的,而不仅仅是在当前分支上。

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar

【讨论】:

    【解决方案3】:

    您可以运行git-log --name-status,它会回显如下内容:

    commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
    Author: Your Name <your@email.com>
    Date:   Tue Aug 12 13:28:34 2008 -0700
    
        Added test file.
    
    A       test
    

    然后解压文件添加:

    git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
    

    【讨论】:

      【解决方案4】:

      这里有两个有用的别名:FindFile ff 和 FindFilewithCopies ffc

      # Find if one file ever had into repository
      ff = "!git log --pretty=format: --name-status --all -M -B | sort -u | grep $1   #"
      # The same as above but showing copied files
      ffc = "!git log --pretty=format: --name-status --all -C -M -B | sort -u | grep $1 #"
      

      您可以获得有关文件名和操作的信息。

      使用示例:

      $ git ff create
      A       database/migrations/2014_10_12_000000_create_users_table.php
      A       database/migrations/2014_10_12_100000_create_password_resets_table.php
      A       database/migrations/2015_05_11_200932_create_boletin_table.php
      A       database/migrations/2015_05_15_133500_create_usuarios_table.php
      D       database/migrations/2015_05_12_000000_create_users_table.php
      M       database/migrations/2015_05_11_200932_create_boletin_table.php
      R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php
      
      $ git ffc create
      A       database/migrations/2014_10_12_000000_create_users_table.php
      A       database/migrations/2014_10_12_100000_create_password_resets_table.php
      A       database/migrations/2015_05_11_200932_create_boletin_table.php
      A       database/migrations/2015_05_15_133500_create_usuarios_table.php
      C052    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_11_210246_create_boletin_nosend_table.php
      D       database/migrations/2015_05_12_000000_create_users_table.php
      M       database/migrations/2015_05_11_200932_create_boletin_table.php
      R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php
      

      【讨论】:

        猜你喜欢
        • 2010-12-14
        • 1970-01-01
        • 2011-08-26
        • 2012-09-09
        • 2018-11-21
        • 2018-07-08
        • 1970-01-01
        • 2011-07-03
        • 2013-04-25
        相关资源
        最近更新 更多