Git - 如何递归地忽略一个目录中的所有文件,但忽略一些具有特定扩展名的文件
Git - How to ignore all files inside one directory recursively but some files with an specific extension
我正在使用 Windows 7
和 Git v2.8.3
。
我有 this directory structure,其中包含一个 Git
存储库。
testing_gitignore
│ .gitignore
│ file_1.txt
│ file_2.txt
│
├───dir_1
│ file_11.txt
│ file_12.txt
│ file_13.txt
│
└───dir_2
│ file_21.txt
│ file_22.txt
│ file_23.xlsx
│ file_24.txt
│
└───dir_21
file_211.txt
file_212.xlsx
file_213.txt
我想配置 .gitignore
文件以便递归地忽略 dir_2
中的所有文件,但保留(用于提交)扩展名为 .xlsx
的文件(递归)。
内部 .gitignore
我使用了以下内容:
/dir_2/*
/dir_2/**/*
!/dir_2/*.xlsx
!/dir_2/**/*.xlsx
但我没有成功,因为我得到了 commit
以下列表的文件(您也可以看到 here):
.gitignore
file_1.txt
file_2.txt
dir_1\file_11.txt
dir_1\file_12.txt
dir_1\file_13.txt
dir_2\file_23.xlsx
但我希望它应该包含(作为要提交的文件)文件:
dir_2/dir_21/file_212.xlsx
你能给我一个 .gitignore
配置来实现这个吗?
(发在这里之前,你能不能用我之前在link上下载的目录结构自己试一下?)
尝试忽略文件但重新包含文件夹:
/dir_2/**/*
!/dir_2/**/
(注意第一条规则的/**/*
:它递归地忽略所有文件和文件夹,然后在第二条规则中重新包含文件夹!/**/
)。
然后你可以重新包含文件(因为它们的文件夹没有被忽略)
!/dir_2/**/*.xlsx
关于 .gitignore
的主要规则仍然是:
It is not possible to re-include a file if a parent directory of that file is excluded.
因此忽略文件 和 文件夹(带有“/**/*
”)意味着您将无法重新包含文件,除非它们的父文件夹本身被重新包含(使用 !/**/
:尾部斜杠表示 'folders')。
完整 .gitignore
:
/dir_2/**/*
!/dir_2/**/
!/dir_2/**/*.xlsx
请注意,您不必提交 .gitignore
来测试其效果:修改它并执行 git status
:只要那些文件未被跟踪(执行 git rm -r --cached dir_2
首先),这些规则的效果将立即生效。
在 .gitignore
到位后,执行 git add .
和 git status
:它应该只显示 dir_2/
下的 *.xlsx
被添加。
[注意下划线]
我正在使用 Windows 7
和 Git v2.8.3
。
我有 this directory structure,其中包含一个 Git
存储库。
testing_gitignore
│ .gitignore
│ file_1.txt
│ file_2.txt
│
├───dir_1
│ file_11.txt
│ file_12.txt
│ file_13.txt
│
└───dir_2
│ file_21.txt
│ file_22.txt
│ file_23.xlsx
│ file_24.txt
│
└───dir_21
file_211.txt
file_212.xlsx
file_213.txt
我想配置 .gitignore
文件以便递归地忽略 dir_2
中的所有文件,但保留(用于提交)扩展名为 .xlsx
的文件(递归)。
内部 .gitignore
我使用了以下内容:
/dir_2/*
/dir_2/**/*
!/dir_2/*.xlsx
!/dir_2/**/*.xlsx
但我没有成功,因为我得到了 commit
以下列表的文件(您也可以看到 here):
.gitignore
file_1.txt
file_2.txt
dir_1\file_11.txt
dir_1\file_12.txt
dir_1\file_13.txt
dir_2\file_23.xlsx
但我希望它应该包含(作为要提交的文件)文件:
dir_2/dir_21/file_212.xlsx
你能给我一个 .gitignore
配置来实现这个吗?
(发在这里之前,你能不能用我之前在link上下载的目录结构自己试一下?)
尝试忽略文件但重新包含文件夹:
/dir_2/**/*
!/dir_2/**/
(注意第一条规则的/**/*
:它递归地忽略所有文件和文件夹,然后在第二条规则中重新包含文件夹!/**/
)。
然后你可以重新包含文件(因为它们的文件夹没有被忽略)
!/dir_2/**/*.xlsx
关于 .gitignore
的主要规则仍然是:
It is not possible to re-include a file if a parent directory of that file is excluded.
因此忽略文件 和 文件夹(带有“/**/*
”)意味着您将无法重新包含文件,除非它们的父文件夹本身被重新包含(使用 !/**/
:尾部斜杠表示 'folders')。
完整 .gitignore
:
/dir_2/**/*
!/dir_2/**/
!/dir_2/**/*.xlsx
请注意,您不必提交 .gitignore
来测试其效果:修改它并执行 git status
:只要那些文件未被跟踪(执行 git rm -r --cached dir_2
首先),这些规则的效果将立即生效。
在 .gitignore
到位后,执行 git add .
和 git status
:它应该只显示 dir_2/
下的 *.xlsx
被添加。
[注意下划线]