Git - Unignore位于存储库内任何位置的任何文件夹,递归地允许所有内容

时间:2018-05-15 19:08:12

标签: git github gitlab gitignore

如何将文件夹与特定名称(例如同步)取消签名,该名称可以位于存储库内的任何位置,并递归地允许其中的所有内容,违反gitignore的所有其他规则?

2 个答案:

答案 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 man page

  

如果模式不包含斜杠.gitignore,Git会将其视为shell glob模式,并检查相对于/文件位置的路径名匹配(相对于顶层)如果不是来自.gitignore文件,则为工作树的。)

答案 1 :(得分:1)

更新:在VONC的回答中,他提到!*/和模式开头的斜线是正确的。

Unignore文件夹具有特定名称(例如同步),可以位于存储库内的任何位置,并递归地允许其中的所有内容,违反gitignore的所有其他规则:

在.gitignore内添加以下内容:

*
!.gitignore
!*/
!/**/Sync/**