当我尝试将所有文件添加到gitRepo时,它说:
$ git add .
error: 'ConnectorApp/' does not have a commit checked out
fatal: adding files failed
当我尝试删除空文件夹时,它说:
$ git rm ConnectorApp/
fatal: pathspec 'ConnectorApp/' did not match any files
还有其他解决方案可以清除此空文件夹以将文件添加到gitRepo中吗?
这不是一个空文件夹。它是一个子模块。
空文件夹将是无关紧要的,因为Git仅存储文件,而不存储文件夹。文件的路径名可能类似于dir/file.ext
。那不是dir
包含的文件夹file.ext
,而是一个名为的文件dir/file.ext
。如果您的操作系统坚持将这样的文件存储为一个名为dir
的文件夹,其中包含file.ext
当您需要对其进行操作时使用的命名文件,那么可以:Git将创建一个新的空dir
文件夹,并file.ext
在必要时在其中写入一个名为的文件。git checkout
例如。但是Git只是存储了文件dir/file.ext
。它尚未存储dir
。
但是在这种情况下,如果您仔细查看ConnectorApp/
(包括查找通常隐藏的文件和目录/文件夹),将会看到其中有一个ConnectorApp/.git
。换句话说,ConnectorApp/
它本身就是它自己的Git存储库。一个Git仓库不能包含另一个Git仓库,1所以反而,在这里你的Git仓库将记录第二Git仓库是什么混帐要求,在内部,一个gitlink。
gitlink的机制是,您的Git可以在您自己的机器上调用第二个子Git,以进入子存储库(Git称为子模块)并询问:该存储库使用哪个提交?答案(如果有答案)将是原始提交哈希ID。
外部存储库(Git称为超级项目)然后在每次提交中记录此原始哈希ID。Runninggit add ConnectorApp
或git add ConnectorApp/
2告诉您的超级项目Git输入子模块足够长的时间,以找到正确的哈希ID并将其存储/更新为gitlink条目。
错误消息告诉您,现在,子模块(另一个Git)没有检出任何提交。因此,超级项目Git会调用子模块Git并询问它您已签出了哪个提交?Git子模块说____离开这里,我什么都没有!
要解决此问题,您有几种选择:
不要使用子模块。完全不要尝试添加ConnectorApp/
。让您的超级项目是不带子模块的Git,并在超级项目中列出ConnectorApp/
,.gitignore
以便它不会尝试添加它。
此选项仅上层项目不工作已经列出ConnectorApp
作为子模块。
自己输入子模块,然后选择一个提交。那是:
cd ConnectorApp/
git checkout <something>
cd .. # return to superproject
您在something
此处填写的内容确定了当超级项目Git询问子模块Git您已检出哪个提交哈希ID时,超级项目Git将看到的提交哈希ID。
这就是您的超级项目提交可以记录在子模块中使用的正确提交的方式。
如果您的超级项目Git有一个已记录的正确提交,则可以让超级项目Git告诉子模块Git签出记录的提交:
git submodule update --checkout
(实际上--checkout
是默认设置,因此您通常可以忽略它,但是有些配置项可以更改此设置)。
请注意,这适用于超级项目中列出的每个子模块。如果只有一个子模块,那就可以了。
(请注意,您可能创建了不正确的子模块,其中超级项目具有一个gitlink却没有其余所需信息。这里可能不是这种情况,但有时会发生。如果发生了这种情况,请在StackOverflow上搜索有关此问题的答案。 )
1没有技术上的原因,一个存储库不能包含另一个批发库,但是出于管理原因,不这样做,因此Git被编程为不这样做。
2在过去的糟糕日子里,git add ConnectorApp/
请继续并将子模块中的所有文件添加到超级项目中。现在,此行为已修复,这使得子模块比以前更容易使用。但是,如果您有旧的Git,请当心:不要让斜线出现在其中!在这里,我仍然有1.5或1.6天的Git烧伤疤痕。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句