【问题标题】:Can I get a list of files marked --assume-unchanged?我可以获得标记为 --assume-unchanged 的​​文件列表吗?
【发布时间】:2011-01-22 17:18:33
【问题描述】:

我将什么标记为--assume-unchanged?有什么方法可以找出我使用该选项隐藏的内容吗?

我翻遍了.git/ 目录,没有看到任何与我期望的一样的东西,但它一定在某个地方。我已经忘记了几周前我以这种方式标记的内容,现在我需要为未来的开发人员记录这些细节。

【问题讨论】:

    标签: git


    【解决方案1】:

    PowerShell 解决方案,使用 Select-String \ sls

    git ls-files -v | sls -pattern ^h -casesensitive
    

    【讨论】:

      【解决方案2】:

      Windows 命令行解决方案使用findstr

      git ls-files -v | findstr /B h
      

      【讨论】:

        【解决方案3】:

        这个命令对我来说更有效。它将仅打印列为“假定未更改”的文件。

        git ls-files -v|grep "^h"
        

        我在不同的环境中使用了很多次,并且效果很好。

        【讨论】:

        • 在 Windows 提示符下,使用 grep "^h" 代替单引号
        【解决方案4】:

        一个班轮

        git ls-files -v | grep "^[a-z]"
        

        使用别名

        恕我直言,git hidden 更适合标记为 --assume-unchanged 的文件:

        git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'
        

        这是我在~/.gitconfig 中拥有的相关别名列表:

        [alias]
          hide = update-index --assume-unchanged
          unhide = update-index --no-assume-unchanged
          unhide-all = update-index --really-refresh
          hidden = !git ls-files -v | grep \"^[a-z]\"
          ignored = !git status -s --ignored | grep \"^!!\"
        

        要使其在子目录中工作并支持参数

          hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
          ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"
        

        例如:

         # cd target
         # git ignored classes
        

        关于文件状态

        对我来说,大多数隐藏文件都标有标志h,尽管根据git-ls-files的手册实际上还有其他几个标志-v

        -v
            Similar to -t, but use lowercase letters for files that are 
        marked as assume unchanged (see git-update-index(1)).
        

        关于git ls-files-t

        This option (-t) identifies the file status with the following tags 
        (followed by a space) at the start of each line:
        
        H   cached
        S   skip-worktree
        M   unmerged
        R   removed/deleted
        C   modified/changed
        K   to be killed
        ?   other
        

        【讨论】:

        • 好记的别名 :) 谢谢
        • 这里有一些更灵活的变体:hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f"。例如,这允许git ignored -- PATH1 PATH2 仅列出某些路径中被忽略的文件(当您有很多被忽略的文件时很有用)。
        • 谢谢你的别名
        【解决方案5】:

        您可以使用git ls-files -v。如果打印的字符是小写,则文件标记为假定未更改。

        要只打印未更改的文件,请使用:

        git ls-files -v | grep '^[[:lower:]]'
        

        要拥抱您的懒惰程序员,请将其转为git alias。编辑您的 .gitconfig 文件以添加此 sn-p:

        [alias]
            ignored = !git ls-files -v | grep "^[[:lower:]]"
        

        现在输入 git ignored 会得到如下输出:

        h path/to/ignored.file
        h another/ignored.file
        

        【讨论】:

        • git ls-files -v | grep ^[a-z]
        • 我的操作系统显然有一个奇怪的排序规则设置,所以马特的命令对我不起作用。这是我在.gitconfig[alias] 部分下添加的内容:ignored = !git ls-files -v | grep "^[[:lower:]]"
        • [a-z] 不起作用的原因是 shell 将其扩展为通配符;如果当前目录包含与该模式匹配的文件(即单个小写字母),则该文件的扩展名就是该文件的名称。尝试添加引号,例如“[a-z]”
        • git ls-files -v | grep -e "^[a-z]"
        • 建议的别名用于在当前目录及以下目录中查找未更改的文件。如果您想要存储库中所有“假定未更改”文件的列表,您需要git ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
        猜你喜欢
        • 1970-01-01
        • 2012-10-06
        • 2013-06-16
        • 1970-01-01
        • 2018-03-03
        • 2013-04-27
        • 2011-08-31
        • 2012-08-30
        • 1970-01-01
        相关资源
        最近更新 更多