gpt4 book ai didi

Git - 如何递归地忽略一个目录中的所有文件,但一些具有特定扩展名的文件

转载 作者:太空狗 更新时间:2023-10-29 13:58:54 24 4
gpt4 key购买 nike

我正在使用 Windows 7Git 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 配置来实现这个吗?(在这里发帖之前,你能不能用我之前在链接上附上的目录结构自己试试看?)

最佳答案

尝试忽略文件但重新包含文件夹:

/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.

因此忽略文件 文件夹(带有 '/**/*')意味着您将无法重新包含文件,除非它们的父文件夹本身是 re -包含(使用 !/**/:尾部斜杠表示“文件夹”)。
完整的 .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 正在添加。

[注意下划线]

关于Git - 如何递归地忽略一个目录中的所有文件,但一些具有特定扩展名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40728479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com