gpt4 book ai didi

git - Git忽略目录和目录/*有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 01:22:54 29 4
gpt4 key购买 nike

我对在 git 中忽略目录内容的正确方法感到困惑。

假设我有以下目录结构:

my_project  
|--www
|--1.txt
|--2.txt
|--.gitignore

放这个有什么区别:

www

还有这个?

www/*

我问这个问题的原因是:在 git 中,如果一个目录是空的,git 将不会在存储库中包含这样的空目录。所以我正在尝试在目录下添加一个额外的 .gitkeep 文件的解决方案,这样它就不会为空。当我尝试该解决方案时,如果在 .gitignore 文件中,我会像下面这样写:

www
!*.gitkeep

它不起作用(我的意图是忽略www下的所有内容但保留目录)。但如果我尝试以下操作:

www/* 
!*.gitkeep

然后就可以了!所以我认为这两种方法之间一定有一些区别。

最佳答案

wwwwww/www/* 之间存在差异。

基本上来自documentation和我自己的测试,www 找到与文件或目录的匹配,www/ 只匹配目录,而 www/* 匹配目录和 www 中的文件。

我这里只讨论www/www/*的区别,因为www的区别www/ 很明显。

对于 www/,git 会忽略目录 www 本身,这意味着 git 甚至不会查看内部。但是对于 www/*,git 检查 www 中的所有文件/文件夹,并忽略所有具有模式 * 的文件/文件夹。这似乎会导致相同的结果,因为如果忽略所有子文件/文件夹,git 将不会跟踪空文件夹 www 。事实上,OP 的情况与 www/www/* 独立的结果没有区别。但如果它与其他规则相结合,它确实会有所不同。

例如,如果我们只想包含 www/1.txt 而忽略 www 中的所有其他内容怎么办?

以下 .gitignore 将不起作用。

www/
!www/1.txt

虽然下面的 .gitignore 有效,为什么?

www/*
!www/1.txt

对于前者,git 只是忽略目录 www,甚至不会再查看内部以包含 www/1.txt。第一条规则排除父目录 www 但不排除 www/1.txt,因此 www/1.txt 不能是“< strong>再次包含在内”。

但对于后者,git 首先会忽略 www 下的所有文件/文件夹,然后再次包含其中一个,即 www/1.txt

对于此示例,文档中的以下行可能会有所帮助:

An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded.

关于git - Git忽略目录和目录/*有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com