【问题标题】:.gitignore to ignore everything aside from files with certain extensions in nested subdirectories associated with some top level subdirectories.gitignore 忽略与某些顶级子目录关联的嵌套子目录中具有某些扩展名的文件之外的所有内容
【发布时间】:2021-04-05 16:28:31
【问题描述】:

我希望 git 忽略所有文件,除了那些具有几个不同扩展名的文件,这些文件隐藏在一组特定的子目录中的某处。

例如,假设我有一个包含以下子目录的目录:

subdir1
subdir2
subdir3
subdir4
subdir5
...

每个子目录包含任意数量的嵌套子目录。扩展名为 .txt.pdf 的文件可能存在于其中一些嵌套子目录中。我希望 repo 只跟踪 subdir2subdir3 中某处的 .txt.pdf 文件,而不是其他文件。

请解释为什么您的解决方案有效。

【问题讨论】:

    标签: git gitignore


    【解决方案1】:

    如果您想忽略 ALL 文件,希望 subdir2/subdir3/ 目录中的所有 .pdf.txt 文件,请将以下内容添加到 gitignore

    # Ignore everything
    *
    !*/
    
    # But not these files
    !.gitignore
    !subdir2/**/*.pdf
    !subdir2/**/*.txt
    !subdir3/**/*.pdf
    !subdir3/**/*.txt
    

    subdir/** 匹配任何subdir/ 目录及其所有子目录中的所有文件目录! 否定了后面的模式。因此您可以忽略所有除了希望目录中的.pdf.txt 文件。

    文件夹结构如下:

    |-- folder
        |-- .git
        |-- .gitignore
        |-- subdir1/
            |-- <folder content>
        |-- subdir2/
            |-- <folder content>
        |-- subdir3/
            |-- <folder content>
        |-- subdir4/
            |-- <folder content>
        |-- subdir5/
            |-- <folder content>
    

    【讨论】:

    • 如果我想包含这些,我不需要在每一行前面加上! 吗?另外,我不需要一些东西来忽略除相关文件之外的所有内容吗?
    • ! 是当您在 gitignore 中添加 /subdir2/* 时(忽略 subdir2 中的所有文件),但您想要一个例外并且不想忽略文件夹 /subdir2/folder,所以你必须写 !/subdir2/folder 并从 gitignore 中排除这个文件夹。但是在您的示例中,这不是必需的,except 您在 gitignore-file 中忽略了示例 subdir2 (subdir2/*),那么您需要 !
    • 建议的答案没有给出正确的结果。也许我的问题不清楚。我希望只包含subdir2subdir3 下的任何地方的pdf 和tex 文件,而不包含其他文件。
    • 您想将.pdf.txt 包含在gitignore 中,因为git 忽略了所有这些文件?还是希望忽略以.pdf.txt 结尾的文件?对我来说,这个问题仍然不清楚......在我上面的回答中解释说,all 文件以 .pdf.txt 结尾,被 gitignore 忽略。
    • 根据您的评论修改了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多