所以我想说我有一个像这样的目录结构
uploads/
--dir1/
----one.txt
----two.txt
----dir2/
------one.txt
------two.txt
我希望跟踪上传的任何目录和子目录,但不能跟踪虚拟文件中的任何文件,因为git不跟踪目录。
我认为这样的事情会奏效,但事实并非如此。
*
!.gitignore
答案 0 :(得分:8)
当你告诉它忽略*
时,Git不会递归到任何子目录中(即使你有一个“unignore”模式可能与里面其中一个目录相匹配)。
虽然有一些gitignore模式语言可能会有所帮助。尾部斜杠强制模式仅应用于目录。所以,你应该能够使用它:
# .gitignore
*
!.keep
!*/
在下面的演示中,我使用上面的.gitignore
并在每个do-not-keep
文件旁边添加了一个附加文件(名为.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