【问题标题】:Configure git to track only one file extension配置 git 只跟踪一个文件扩展名
【发布时间】:2012-10-09 12:16:42
【问题描述】:

我有一个包含多种不同文件的目录树。父目录上有 300 个目录。每个目录都可以有其他子目录。

我只想在所有子目录上跟踪 *.cocci。这是我的 .gitignore:

*
!*.cocci

但它不起作用,因为子目录上的文件没有被跟踪。如何告诉 git 我只想在所有子目录上跟踪 *.cocci?

【问题讨论】:

  • 您真的git added 文件了吗?仅设置.gitignore 不会自动导致文件被跟踪...
  • 只有使用 git add -f 才能添加文件。这似乎不正确...

标签: git file-extension gitignore subdirectory


【解决方案1】:

阅读this question

你想要:

# Blacklist everything
*
# Whitelist all directories
!*/
# Whitelist the file you're interested in. 
!*.cocci 

注意,这将跟踪 *.cocci 文件。你的行不通,因为你忽略了 everything(这是第一行),它忽略了 所有子目录

【讨论】:

  • 我仍然对 git status 输出不满意,因为它没有显示未跟踪的文件夹内容,但过滤器现在正在工作。谢谢
  • 您能更改答案中的 cmets 吗?他们必须开始自己的生产线。如果将其粘贴到 .gitignore 中,它将不起作用(在 v.1.9.1 上测试)。查看git-scm.com/book/en/v2/…
  • 您可能还想将 .gitignore 列入白名单
【解决方案2】:

为了扩展@simont 答案,如果我们想将给定目录及其子目录的*.cocci 文件列入白名单,我会错误地输入:

directory/*
!directory/*/
!directory/*.cocci 

这似乎不包括*.cocci 下的directory/subtree 文件。

为了在directory 的所有子目录中查找所有*.cocci 文件,输入以下内容:

directory/**
!directory/*/
!directory/**/*.cocci 

【讨论】:

  • 太棒了!这就是我发现的!为了更清楚,如果我想忽略除./directory/* 之外的所有内容,我应该输入*; !directory/; !directory/*
【解决方案3】:

.gitignore 中的!dir 无法取消忽略目录,但手动添加目录仍然可以:

git add dir -f

所以如果 .gitignore 文件看起来像:

*
!*.txt

然后,当您执行 git add . 时,会添加新的 *.txt 文件。新目录不会自动添加,需要git add dir -f手动添加

【讨论】:

  • 这解决了我的目录被忽略的问题,即使我的.gitignore 文件具有!dir/.exists 文件设置。请注意,上面答案中的dir 应替换为您希望包含在 git checkin 中的目录的名称。
【解决方案4】:

您是否尝试过!*/*.cocci 而不是您的!*.cocci

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 2021-04-09
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多