草庐IT

git - 为什么 git ls-files --ignore 需要排除模式?

coder 2023-06-24 原文

通过命令 git ls-files --ignored 使用排除模式的要求背后的逻辑是什么?

来自git help ls-files:

-i, --ignored

Show only ignored files in the output. When showing files in the index, print only those matched by an exclude pattern. When showing "other" files, show only those matched by an exclude pattern.

最佳答案

首先让我确保您没有将 --ignored--others 混淆。

--others 是用于列出未跟踪文件的选项。来自 git-ls-files 的手册(强调我的):

-o, --others

Show other (i.e. untracked) files in the output

也就是说,让我们看看 --ignored 做了什么。无论您列出什么,无论是跟踪文件、未跟踪文件、修改文件等,您都可以从输出中排除一些文件。将其视为在输出上自动完成的免费 grep -v。例如:

git ls-files --others --exclude=*.o

将列出所有与 *.o 不匹配的未跟踪文件。排除模式与 .gitignore 无关。事实上,.gitignore 决定了 --others 会输出什么,而 --exclude 在列表完成后过滤输出(或者至少那是观察到的行为)1

现在 --ignored 只是恢复输出。因此,被 exclude= 排除的内容将被打印出来,而未被排除的内容将被省略。因此,例如:

git ls-files --others --exclude=*.o --ignored

将打印所有确实匹配*.o的未跟踪文件。

1 不完全一样,--exclude 只过滤未跟踪的文件,所以如果你列出跟踪的文件,--exclude 不会'排除任何东西。但是,使用 --ignored 它将列出本应排除的文件。这有点奇怪。

结论: --ignored 基本上会恢复命令行中给出的排除模式。默认情况下,排除模式为空(您会看到所有内容),因此没有任何排除模式的 --ignored 会导致所有内容 被省略。这从来没有用,这就是为什么 --ignored 需要排除模式才能工作的原因。


既然提到了 --exclude-standard,我也想对此进行扩展。 --exclude-standard 也会添加被忽略的模式(例如写在 .gitignore 中)作为列表中的排除模式。所以考虑以下命令:

git ls-files --ignored --exclude-standard

首先,此命令会列出所有跟踪的文件。然后给定 --ignored 命令,它只会打印那些与排除模式匹配的文件。给定 --exclude-standard,将打印与 .gitignore 中的模式匹配的有效文件。但这些是您未跟踪的文件。如此有效,您什么也看不到。您看到的唯一情况是您正在跟踪您在 .gitignore 中也提到要忽略的文件。

换句话说,如果该命令输出任何内容,则意味着您已告诉 git 忽略某些文件,但您违反了自己的规则并将它们添加到存储库中。


其他有趣的命令可能是:

git ls-files --others --exclude-standard

显示所有未在 .gitignore 中指定的未跟踪文件。您还会在 git status 中看到这些文件。

git ls-files --others --ignored --exclude-standard

显示您使用 .gitignore 成功忽略的所有未跟踪文件。换句话说,(假设之前的查询为空,即没有未忽略的未跟踪文件)这显示了当前目录中不属于存储库的所有文件。这对于检查不应被忽略且必须放入存储库中的文件很有用。

关于git - 为什么 git ls-files --ignore 需要排除模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15925079/

有关git - 为什么 git ls-files --ignore 需要排除模式?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  6. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  7. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  10. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

随机推荐