• N
    git-read-tree.txt: update sparse checkout examples · 5e821231
    Nguyễn Thái Ngọc Duy 提交于
    The negation example uses '*' to match everything. This used to work
    before 9037026d (unpack-trees: fix sparse checkout's "unable to match
    directories") because back then, the list of paths is used to match
    sparse patterns, so with the patterns
    
        *
        !subdir/
    
    subdir/ always matches any path that start with subdir/ and "*" has no
    chance to get tested. The result is subdir is excluded.
    
    After the said commit, a tree structure is dynamically created and
    sparse pattern matching now follows closely how read_directory()
    applies .gitignore. This solves one problem, but reveals another one.
    
    With this new strategy, "!subdir/" rule will be only tested once when
    "subdir" directory is examined. Entries inside subdir, when examined,
    will match "*" and are (correctly) re-added again because any rules
    without a slash will match at every directory level. In the end, "*"
    can revert every negation rules.
    
    In order to correctly exclude subdir, we must use
    
        /*
        !subdir
    
    to limit "match all" rule at top level only.
    
    "*" rule has no actual use in sparse checkout and can be confusing to
    users. While we can automatically turn "*" to "/*", this violates
    .gitignore definition. Instead, discourage "*" in favor of "/*" (in
    the second example).
    Signed-off-by: NNguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    5e821231
git-read-tree.txt 16.3 KB