从 gitignore 过滤文件和路径

2023-11-21

我想找到所有文件路径not使用 C# 通过 .gitignore(或子目录中任何嵌套的 .gitignore 文件)进行过滤。这类似于在这里提问关于PHP。我想知道是否有人知道这段代码是否已在网上某处提供(以 C# 形式)。

更新:为了回答我想要这个的目的,我可以为某些项目运行我自己的源文件定期备份(压缩结果),以增加内心的平静。困难的部分是获得一个强大的 .gitignore 解析器来获取过滤后的文件路径(并排除其他文件路径),如果其他人已经为我完成了该规范,则不想过于卷入学习该规范。


嗯,最好的解析方式.gitignore文件(以及 Git 使用的其他文件,例如$GIT_DIR/info/exclude) 就是让 Git 为你做这件事。 :-) (在你的情况下,事实上,大多数情况下,这确实涉及执行 git 子进程。)

git check-ignore

The git check-ignore命令可用于检测哪些文件被忽略以及原因。这--non-matching选项使其告诉您有关未被忽略的文件的信息,但由于它仍然以特殊格式告诉您有关被忽略的文件的信息,因此您需要做一些进一步的工作才能获得一个简单的列表不可忽略的文件。这个 Bourne shell 函数可以解决这个问题:

find_nonignored() {
    find . -path ./.git -prune -o -print \
        | git check-ignore --verbose --non-matching --stdin \
        | sed -n -e 's,\t./,\t,' -e 's,^::\t*,,p' \
}

怎么运行的

The find命令查找当前工作目录及其下的所有文件,该目录应该位于您要过滤的树中的某个位置。我们排除了顶级.git输出中的子目录及其下的所有内容(如果存在);/.git/不是典型的.gitignore文件,因为 Git 会自动忽略它,因此通常被认为是“未被忽略”git check-ignore.

git check-ignore将打印出--non-matching文件仅在--verbose模式,因为它仅在该模式下打印出额外信息,告诉您文件是否被忽略。 (它总是打印被忽略的文件。)路径以以下格式每行显示一个

source:linenum:patternpath

以冒号分隔的字段是有关导致路径被忽略的原因的信息(例如路径中的一行).gitignore文件),如果该文件不被忽略,则将为空。

The sed然后命令过滤输出以仅显示被忽略文件的路径。这-n选项告诉它默认不打印输入行。第一个替换模式替换<TAB>./只用<TAB>,删除领先的./,纯粹出于审美原因。第二次替换完成了真正的工作,删除了任何::<TAB>(表示没有“忽略”信息)开始一行,如果发生替换,则打印该行的剩余内容,这是一个不可忽略的路径。

您可以进一步过滤以进行额外的处理;我为一个脚本构建了这个脚本,该脚本可以按照以下方式进行降价检查:

markdownlint $(find_nonignored | grep '\.md$')

Notes

  1. 此代码在输出中包含未跟踪的文件(即从未添加到 Git 存储库或暂存),这通常是您想要的。 (例如,测试系统仍然应该检查新文件,甚至在它们之前git add)请注意,其他解决方案涉及git ls-files之类的人通常不会这样做。

  2. 上面的代码依赖于使用GNUsed,这解释了\t作为选项卡。如果您使用的是 BSDsed(例如在 MacOS 上)您可能需要稍微调整一下。检查评论,看看是否有人有这方面的提示。

  3. 这里的所有代码都会在带有空格或其他“不寻常”字符的路径上中断;它需要在几个地方进行修改(例如使用-print0 with find)来解决这个问题。为了使解释简单,我不会在这里解决此类问题。我还为其他人留下了该函数的泛化,以便在任意路径上工作,而不仅仅是当前工作目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 gitignore 过滤文件和路径 的相关文章

  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 当当前分支上有未提交的更改时签出另一个分支

    大多数时候 当我尝试签出另一个现有分支时 如果我在当前分支上有一些未提交的更改 Git 会不允许我这样做 所以我必须首先提交或隐藏这些更改 然而 有时 Git 确实允许我在不提交或存储这些更改的情况下签出另一个分支 并且它会将这些更改携带到
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • Git 提交失败:“请使用 -m 或 -F 选项提供消息。”

    当我键入 git commit 命令来提交文件时 我收到以下错误消息 Microsoft Visual Studio 微软 找不到命令 错误 核心编辑器 Microsoft Visual Studio 存在问题 请使用 m 或 F 选项提供

随机推荐

  • BASH 不以防万一

    我正在尝试找出一种合理的方法来在案例中执行 NOT 子句 我这样做的原因是为了 遇到情况时进行转码 也就是说 如果我击中了 avi 没有理由再次将其转为 avi 我可以 只需将其移开 这就是我的案例底部的范围 should做 无论如何 我有
  • HttpWebRequest 非常慢!

    我正在使用开源库连接到我的网络服务器 我担心网络服务器运行速度极慢 然后我尝试在 Ruby 中进行简单的测试 得到了这些结果 Ruby 程序 10 个 HTTP 需要 2 11 秒 获取 Ruby 程序 100 个 HTTP 需要 18 1
  • 在 azure cdn 上托管字体 - CORS 支持

    我无法在 IE 或 Firefox 中通过 azure cdn 公开 azure blob 存储托管字体 我相信这是因为 font face 跨域问题 CORS 正常的解决方案是添加 Access Control Allow Origin
  • 我是否需要为 CDC 设备编写自己的主机端 USB 驱动程序

    这可能不被认为与编程直接相关 但我不知道还能问哪里 我尝试过浏览各种网站 但到目前为止 谷歌还不是我的朋友 我无法确定是否需要为我正在开发的设备可能连接的各种 windows linux mac 平台编写自己的设备驱动程序 或者该功能是否由
  • 如何使用 PHP 以编程方式构建 APR1-MD5

    很像这个问题我想从 PHP 生成 htpasswd 文件条目 然而 正如原始答案中提到的 答案没有显示如何实现 APR1 风格 它需要是 APR1 Apache 风格 才能与 mod dav svn 一起使用 我似乎找不到可以创建密码的有效
  • 故事板中的 initWithNibName 方法

    我正在按照 Facebook 的教程发布到用户的墙上 http developers facebook com docs howtos publish to feed ios sdk 尽管它是根据 xib 项目制作的 但到目前为止 我的故事
  • 发送投票电子邮件

    使用 Outlook API 可以通过在 MailItem 实例上设置 VotingOpions 属性来发送带有民意调查的电子邮件 是否可以以任何方式对 Exchange Web 服务执行相同的操作 Microsoft 已经发布了投票电子邮
  • 在Python中将点后的浮点四舍五入到2位数字

    我正在使用这段代码 f 0 3223322 float 2f f 有没有更Pythonic 更简洁的方法 无需两次转换 使用round文档中的以下注释令人沮丧 round 对于浮点数的行为可能会令人惊讶 例如 round 2 675 2 给
  • 在 pandas MultiIndex 前面添加一个级别

    我有一个 DataFrame 其中经过一些分组后创建了 MultiIndex import numpy as np import pandas as pd from numpy random import randn df pd DataF
  • 如何使用mockito验证公共类的静态方法被调用?

    伪代码是这样的 rc SomePublicClass myPublicStaticFunc arg public class SomePublicClass private SomePublicClass public static int
  • 创建过程中忽略 Config.xml

    我在使用命令行工具时遇到问题科尔多瓦 cli 我遵循了从文档 cordova create test com test 测试 在这一步中我要更改的内容www folder 1 将示例网页移至src文件夹 所以内容www are www co
  • git 子模块添加致命错误:不是 Git 存储库

    我对 Git 相当陌生 并尽力寻找有关此问题的一些文档 但无济于事 这是我的命令 git submodule add https github com joliver EventStore git externalsource JOlive
  • IEnumerator 是否有“HasNext”方法?

    使用JavaIterators 我已经用过hasNext确定迭代是否有更多元素的方法 不消耗元素 因此 hasNext就像一个 Peek 方法 我的问题 有没有类似 hasNext or Peek 具有 C 泛型的方法IEnumerator
  • 在 Apple Swift 中,在什么情况下我不想要隐式展开的可选选项?

    我相信我理解为什么可选值很方便 我最好的使用想法是能够返回一个 nil 布尔值 但是在什么情况下我想使用 声明一个包装的可选值 而不是 对于隐式解包的可选 似乎没有必要用 来声明它 然后必须打字 到处都是 而不仅仅是使用 一次 我不想忽视
  • Typescript 中的类型推断与显式类型声明

    我遇到过几个不同的代码实例 其中变量使用显式类型声明 即使推断的类型很明显 例子 loading boolean false or name string John or count number 0 etc TSLint 更喜欢推断类型而
  • Node.js - 使用每秒 5 个请求的 API 限制

    我有一个 脚本 可以对特定 API 执行数千个请求 这个 API 每秒只允许 5 个请求 可能它的测量结果与我不同 提出我正在使用的请求request promise框架 我已经取代了正常的request promise与此功能 const
  • org.hibernate.PropertyAccessException:IllegalArgumentException

    我正在研究 hibernate 映射 除了当 hibernate 尝试将我的对象保留到系统中时遇到的 PropertyAccessException 之外 其他一切都工作正常 下面是堆栈跟踪 org hibernate PropertyAc
  • 使用角色模拟租户

    我们正在开发一个基于 keycloak 5 0 0 的解决方案 我们的客户可以在我们这里创建他们的帐户并管理他们自己的用户 并且仅管理他们的用户 最初我们认为我们可以使用领域来实现这一点 每个客户都有自己的领域 经过初步测试后 我们认为这可
  • Python脚本通过FTP上传文件

    我想编写一个脚本来将文件上传到 FTP 登录系统如何工作 我正在寻找这样的东西 ftp login mylogin ftp pass mypass 以及任何其他登录凭据 Use ftplib 你可以这样写 import ftplib ses
  • 从 gitignore 过滤文件和路径

    我想找到所有文件路径not使用 C 通过 gitignore 或子目录中任何嵌套的 gitignore 文件 进行过滤 这类似于在这里提问关于PHP 我想知道是否有人知道这段代码是否已在网上某处提供 以 C 形式 更新 为了回答我想要这个的