Difference between .gitignore rules with and without trailing slash like /dir and /dir/

后端 未结 3 1841
隐瞒了意图╮
隐瞒了意图╮ 2021-01-29 23:15

Is there a difference between /dir and /dir/ in the .gitignore file within a Git repository?

How are the following different?

/         


        
3条回答
  •  暖寄归人
    2021-01-29 23:53

    This is a old question, but high ranked on Google and the top voted answer is wrong. Here goes the correct answer.

    Yes, these rules are different.

    • /dir will match a file, directory, link, anything named dir
    • /dir/ will match only a directory named dir
    • /dir/* will match all files, directories and anything else inside a directory named dir (but not the dir directory itself).

    /dir, /dir/ and /dir/* are NOT equivalent. The difference is very clear when using overriding rules, like the famous !.gitkeep to get around the limitation of tracking empty directories. Suppose the existence of the file dir/.gitkeep

    • With /dir and /dir/, Git won't even look inside the directory so the .gitkeep won't be seen.
    • With /dir/*, the file will be detected by Git and the directory will be kept if this .gitkeep is committed, because the rule doesn't apply to the directory itself, only to its contents.

    OBSERVATION: All the rules mentioned above are anchored at the current directory (the place where the .gitignore is), because of the / prefix. Without the prefix, the rules would apply not only for that specific directory, but also for the sub-directories or everywhere in the repository, if the .gitignore is located at the root level.

提交回复
热议问题