如何将文件夹与特定名称(例如同步)取消签名,该名称可以位于存储库内的任何位置,并递归地允许其中的所有内容,违反gitignore的所有其他规则?
答案 0 :(得分:2)
建议的解决方案(!/**/Sync/**/*
)无法单独使用,因为It is not possible to re-include a file if a parent directory of that file is excluded.
所以如果你有一个.gitignore
:
*
!.gitignore
您必须先将文件夹列入白名单!*/
,然后排除文件(!**/Sync/**
,不需要**/*
)
最终结果将是.gitignore
,如:
*
!.gitignore
!*/
!**/Sync/**
不要忘记查看.gitignore
规则适用的任何文件:
git check-ignore -v -- aFile
注意:如果您想从存储库的 top 中锚定白名单,则需要/
。{登记/>
如果没有,则不需要!**/Sync/**
:这与您/
所在的位置相关。
如果模式不包含斜杠
.gitignore
,Git会将其视为shell glob模式,并检查相对于/
文件位置的路径名匹配(相对于顶层)如果不是来自.gitignore
文件,则为工作树的。)
答案 1 :(得分:1)
更新:在VONC的回答中,他提到!*/
和模式开头的斜线是正确的。
Unignore文件夹具有特定名称(例如同步),可以位于存储库内的任何位置,并递归地允许其中的所有内容,违反gitignore的所有其他规则:
在.gitignore内添加以下内容:
*
!.gitignore
!*/
!/**/Sync/**