防止git删除初始git安装时git忽略中的本地目录
我有一个wordpress项目,我想在服务器上安装git。我还想将wp content/plugins目录添加到.gitignore中,以便在git安装过程中不受影响。但是当我在我的本地服务器上这样做时,插件文件夹被删除了 我试过这个防止git删除初始git安装时git忽略中的本地目录,git,Git,我有一个wordpress项目,我想在服务器上安装git。我还想将wp content/plugins目录添加到.gitignore中,以便在git安装过程中不受影响。但是当我在我的本地服务器上这样做时,插件文件夹被删除了 我试过这个 将master重置为initial commit以获取插件文件夹和内容,而gitignore中没有插件 git rm--缓存的-r wp内容/插件/ git pull获取commit,commit删除了plugins文件夹,并将插件放在gitignore中 但它仍
wp content/plugins/file.ext的文件。您的操作系统要求将其存储为名为file.ext
的文件,存储在名为plugins
的文件夹中,存储在名为wp content
的文件夹中。这是你的操作系统的问题,不是Git的问题,但是当Git从某个提交文件中提取名为wp content/plugins/file.ext的文件到你计算机上的普通文件时,它就变成了Git的问题
此时,Git将根据需要创建wp content
,然后根据需要创建wp content/plugins
,这样它就可以创建一个文件,对Git来说,这个文件名为wp content/plugins/file.ext
。Git没有将这些文件夹存储在任何位置。它存储了文件wp content/plugins/file.ext
(在提交中),然后你告诉它“接受提交并让它对我可用”,因此它创建了两个目录,因为你的操作系统坚持这个文件夹和文件结构
因为操作系统坚持,Git将根据需要创建目录/文件夹。同样,当Git删除一个提交的文件,因为您要从该提交切换到其他缺少该文件的提交时,Git将通过删除一个目录/文件夹(如果该目录/文件夹是最后一个迫使Git通过存在该目录/文件夹来适应操作系统的文件)来进行清理
如果目录中存在其他子目录/文件夹或文件,Git将无法删除该目录/文件夹。因此,如果您有任何未跟踪的文件,例如,Git将不会接触目录
请注意,git clean-df
将从工作树中删除空目录,无论git是否创建了这些目录。这都是由于Git没有在其索引中存储有关目录/文件夹的信息。索引是Git构建新提交的基础。索引对于Git非常重要:它是合并真正发生的地方;它是构建新提交的地方;它还缓存有关提取的提交的信息,以使Git快速运行
一般来说,在一个Git命令和下一个Git命令之间,Git不记得它创建的任何目录。它所做的只是:
- 从索引中删除提交的文件,如果您告诉它更新您的工作树,请从工作树中删除这些相同的文件;及
- 将提交加载到索引中,如果您告诉它更新您的工作树,请将这些文件替换为其提交(现在是索引副本)版本
因为索引不跟踪目录,只跟踪长名称的文件,如wp content/plugins/file.ext
-Git实际上无法存储空文件夹。1这就是为什么它使用这种“需要时创建,删除最后一个文件时删除”的技巧
因为Git使用“删除最后一个文件时删除工作树文件夹”,所以阻止Git删除这样一个目录/文件夹的唯一方法就是在其中留下一些文件。这可以是一个已提交的文件,例如空的.gitignore
或空的.keep
或任何您喜欢的文件,或者只是一些未跟踪的文件。如果是未跟踪的文件,Git本身也不会创建目录:您必须这样做
请参阅脚注链接,了解如何使用空子模块而不是伪.gitignore
,但我要注意的是,如果我这样做,我只会使用伪.gitignore
(可能不是空的,而是一行读取*
)
1但是,它可以通过gitlink存储子模块,gitlink可以指向没有文件的存储库。因此,它实际上可以存储一个空目录!很遗憾,索引不能存储mode40000
目录,因为如果可以的话,Git可以存储和管理空文件夹,而不必使用“使用空子模块”技巧