请教一个 gitignore 的写法

49 天前
 iLoveSS
假设我的 windows 设备工作目录下有如下文件目录结构
.gitignore
.\a
.\a\1.txt
.\a\2.dll
.\a\a1
.\a\a1\3.txt
.\a\a1\4.dll

问题 1:
如何设置.gitignore 让 git 只追踪 a 目录和 a\a1 目录下的所有 txt

问题 2:
如何让 git 只追踪 a 目录及所有递归子目录下的 txt 文件,但排除其它扩展名文件.
2233 次点击
所在节点    git
18 条回复
iLoveSS
49 天前
问了下 chatgpt3.5, 给的几个答案都不行. 比如

# Ignore all files in "a" directory except .txt files
/a/*
!/a/**/*.txt
AoEiuV020JP
49 天前
gitignore 是用来“排除”文件的,你不能总想着“只追踪”,应该想你要排除的是什么,
比如你 b 目录要不要排除掉,按理说你这问法不应该排除 b 目录,但字面上理解就是 a 目录以外的文件全部排除?

答案有问题就说说是什么文件有问题, 应该排除还是不排除, 结果是排除了还是没排除,提问的艺术,
iLoveSS
49 天前
@AoEiuV020JP

问题 1:
排除 a 目录下,除了 a/*.txt 和 a/a1/*.txt 以外的文件.

问题 2:
排除 a 目录下,除了*.txt 以外的文件.

这样清晰了吗?
AoEiuV020JP
49 天前
试了下, 主要坑点应该是子目录不能排除掉,一旦 a1 被排除了,a1 内的文件就无法例外,

1 ,
/a/**.*
!/a/*.txt
!/a/a1/*.txt

2,
/a/**.*
!/a/**.txt

你这情况最好应该是多级.gitignore ,a 和 a1 分别不同的规则,
hxsf
49 天前
gpt 的答案挺对的
那些没排除的文件是否在你修改 .gitignore 文件之前就已经被跟踪了?
iLoveSS
49 天前
@hxsf 没有被跟踪的, 我新建的测试目录.

在使用 git init 后,我用 git rm -r --cached . 和 git add . 重新来过也还是没达到目标.
newaccount
49 天前
问题 1:
/*
!/a
/a/*
!/a/*.txt
!/a/a1
/a/a1/*
!/a/a1/*.txt

问题 2:
/*
!/a
/a/**/*.*
!/a/**/*.txt

感觉 2 的答案不是很好,对于没有扩展名的可能出问题,还没想到好方法,摸会鱼
winix
49 天前
*
!a/
!a/**/
!a/**/*.txt
AoEiuV020JP
49 天前
@AoEiuV020JP #4 进一步试了下,这里一个重点是,gitignore 无法指定“文件”,但是有办法指定“文件夹”,所以可以加一个规则例外掉文件夹,就可以正常例外子目录里的文件了,
2 ,
/a/*
!/a/**/
!/a/**.txt
iLoveSS
49 天前
@newaccount 挺好的,目前已经能解决我的问题了! 谢谢
lucasj
49 天前
@newaccount #7 优化一下

1

a/*
!a/*.txt
!a/a1
a/a1/*
!a/a1/*.txt

2

a/**/*.*
!a/**/*.txt
newaccount
49 天前
@lucasj 这样子跟 a 同级如果有个 b 目录就有问题了
iLoveSS
49 天前
@newaccount 我测试了 11 楼的方法,这个规则对 b 目录下的文件没有影响吧?
├───a
│ ├───a1
│ └───a2
└───b
5qn1H9F2PRhK4rq5
49 天前
# 忽略所有文件
*

# 不忽略根目录所有非目录的文件
!/*.*


# 不忽略 a 、a1 所有目录
!a/
!a/a1/

# 不忽略 a\a1 中的 .txt 文件
!a/*.txt
!a/a1/*.txt
newaccount
49 天前
@iLoveSS 如果 b 目录下有个 a.txt ,那么这个文件也会被追踪,与问题 2 的需求不符
问题 2 用 8L winix 的写法吧,挺巧妙的解决了
sbldehanhan
49 天前
*
!.gitignore
!*/
!*.txt

只保留 txt 文件和.gitignore 。
iLoveSS
49 天前
@newaccount 谢谢大佬, 这里可能有点理解的偏差. 我的本意是只针对工作目录下的 a 目录内容进行排除. 所以 b 目录不在筛选之内也是对的.
oeyoews
49 天前
gitignore 文件可以有多个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1061643

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX