gpt4 book ai didi

git - 如何在 gitignore 中编写规则以忽略某些目录中除目录之外的所有文件?

转载 作者:太空狗 更新时间:2023-10-29 12:52:51 26 4
gpt4 key购买 nike

假设我有这样的目录结构

uploads/
--dir1/
----one.txt
----two.txt
----dir2/
------one.txt
------two.txt

我希望跟踪上传的任何目录和子目录,但不跟踪其中的任何文件,虚拟文件​​除外,因为 git 不跟踪目录。

我认为这样的事情会奏效,但事实并非如此。

*
!.gitignore

最佳答案

当您告诉它忽略 * 时,Git 不会递归到任何子目录(即使您有一个“unignore”模式可能匹配 inside目录)。

有一点 gitignore模式语言可能会有所帮助。尾部斜杠强制模式仅适用于目录。所以,你应该能够使用这个:

# .gitignore
*
!.keep
!*/

在下面的演示中,我使用上面的 .gitignore 并在每个 .keep 旁边有一个附加文件(名为 do-not-keep) > 文件。您可以看到它适用于多级子目录并且不显示其他文件。您必须通过一些独立的方法为每个目录安排自己的 .keep(或其他)。

% git status --short -uall
?? a/.keep
?? a/b/.keep
?? a/b/c/.keep
?? a/b/c/d/.keep
?? e/.keep
?? e/f/.keep
?? e/f/g/.keep
?? h/.keep
?? h/i/.keep
?? j/.keep

这是用 Git 1.7.3.1 完成的,但我希望它也适用于其他版本。

演示设置:

% git init
% mkdir -p a/b/c/d e/f/g h/i j
% zargs -i.. -- **/*(/) -- touch ../.keep ../do-not-keep
% tree -aI .git .
.
|-- .gitignore
|-- a
| |-- .keep
| |-- b
| | |-- .keep
| | |-- c
| | | |-- .keep
| | | |-- d
| | | | |-- .keep
| | | | `-- do-not-keep
| | | `-- do-not-keep
| | `-- do-not-keep
| `-- do-not-keep
|-- e
| |-- .keep
| |-- do-not-keep
| `-- f
| |-- .keep
| |-- do-not-keep
| `-- g
| |-- .keep
| `-- do-not-keep
|-- h
| |-- .keep
| |-- do-not-keep
| `-- i
| |-- .keep
| `-- do-not-keep
`-- j
|-- .keep
`-- do-not-keep

10 directories, 21 files

关于git - 如何在 gitignore 中编写规则以忽略某些目录中除目录之外的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876168/

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