我有一个目录树,其中包含许多不同的文件。父目录上有300个目录。每个目录都可以有其他子目录。
我只想在所有子目录上跟踪* .cocci。这是我的.gitignore:
*
!*.cocci
但它不起作用,因为子目录上的文件没有被跟踪。我怎么能告诉git我只想在所有子目录上跟踪* .cocci?
答案 0 :(得分:35)
你想:
# Blacklist everything
*
# Whitelist all directories
!*/
# Whitelist the file you're interested in.
!*.cocci
请注意,这只会追踪 *.cocci
个文件。您的工作无效,因为您忽略了所有(这是第一行),忽略所有子目录。
答案 1 :(得分:2)
要扩展@simont的答案,如果我们想要将给定目录及其子目录的*.cocci
文件列入白名单,我会错误地输入:
directory/*
!directory/*/
!directory/*.cocci
这似乎不包括*.cocci
下的directory/subtree
个文件。
要查找*.cocci
所有子目录中的所有directory
个文件,请输入以下内容:
directory/**
!directory/*/
!directory/**/*.cocci
答案 2 :(得分:1)
无法在.gitignore中通过!dir
取消签名目录,但是仍然可以手动添加目录:
git add dir -f
因此,如果.gitignore文件如下所示:
*
!*.txt
然后,当您执行git add .
时,会添加新的*.txt
个文件。新目录不会自动添加,必须由git add dir -f
答案 3 :(得分:-1)
您是否尝试过!*/*.cocci
而不是!*.cocci
?