无法跟踪Git子模块内的文件
问题:在添加文件./shells/smallApps/*在到Git ./.git/时,我没有在文件./.git/info/exclude也没有任何.gitignore -files。
这个问题是基于这个问题没有完全解决的问题。
我跑
$git status ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files ~/bin
Screen/dev/vim-open.screen
--- cut ---
我注意到我的Git没有“shells / smallApps / *”文件
$ls shells/smallApps/ ~/bin
devTodo extract
~/bin
我想通过运行将它们添加到我的Git中
$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .
我注意到这些文件因为某种原因没有添加到我的Git中
$git status ~/bin
# On branch master
nothing to commit (working directory clean)
我没有.git / info / exclude和.gitignore -files文件。
最后的警告是什么意思?
UPDATE
Git为什么会忽略文件有两个一般原因: gitignore和submodules 。
更具体地说,当' git add '被调用时,以下情况会导致Git忽略文件:
$GIT_DIR/exclude模式。 .gitignore文件中的模式匹配。 .gitignore文件中的模式相匹配(由' git config --global core.excludesfile '指定)。 在忽略的文件上强制' git add ':
你可以通过调用' git add full/path/to/file '来检查一个特定的文件是否被忽略。
该手册页声明:“如果在命令行中明确指定了被忽略的文件,则该命令将失败并显示被忽略的文件列表。”
如果文件被忽略,你可以强制添加' git add --force full/path/to/file '。
消除子模块参考的说明:
正如前面的回答中所述, shells/smallApps是存储库中的子模块。
如果该文件是子模块的一部分,则情况更为复杂。 您不能从主项目中修改子模块的内容。
如果您想消除子模块参考并直接跟踪主库中的文件,则必须执行几个步骤。 您不能简单地从子模块中删除“.git”目录。 主存储库和子模块之间有三个链接:
.gitmodules文件。 .git/config中的条目。 根据这个相关的SO问题,您需要执行以下步骤来完全删除子模块:
注意:如果另一个分支依赖于这个子模块,那么删除它可能会损坏您的存储库! 这是一个危险的操作...谨慎使用。
.gitmodules文件中删除相关行。 .git/config删除相关部分。 git rm --cached path_to_submodule (没有结尾斜杠)。 作为子模块一部分的文件现在未被跟踪,您可以根据需要决定是保留还是删除它们(以下提到的一个警告)。
如果你不需要这些文件,你可以直接删除它们。
警告:如果您想保留这些文件(您似乎需要),则必须从子模块文件夹中手动删除.git目录:
cd path_to_submodule rm .git cd .. git add path_to_submodule git status git commit 更新:
索取更多信息:
为了帮助调试此问题,请发布以下完整的命令会话的输出:
cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status
根据你迄今所做的工作描述,我期望看到:
.gitmodules文件 .git目录(在您的回购的根目录中找到) editors/vim/vimdoclet没有.git目录 shells/smallApps没有.git目录 我看到你有git add一些关于子模块的东西。 你有嵌套的Git仓库吗? 做这个:
$ find . -name .git
列出了多少.git目录? 如果有多个,那么你有多个嵌套的存储库,这可能是造成这种混淆的原因。
您应该考虑将此问题发布到Git邮件列表( git@vger.kernel.org )。 你可能会得到更及时和完整的回应。
如果你决定在那里发帖,一定要包括:
ls -al cat .git/config find . -name ".git*" git status git add editors git add shells git status 