问题:当我./shells/smallApps/*
处没有./.git/
的文件时,./.git/info/exclude
将文件添加到Git .gitignore
-files。
此问题基于this tread,问题未能完全解决。
我跑
$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的文件。
上次警告的含义是什么?
答案 0 :(得分:98)
<强>更新强>
Git忽略文件的原因有两个:gitignore
和submodules
。
更具体地说,以下条件会导致Git在调用“git add
”时忽略文件:
$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
是您的资源库中的submodule。
如果文件是子模块的一部分,情况就更复杂了。您无法在主项目中修改子模块的内容。
如果要消除子模块引用并直接跟踪主仓库中的文件,则必须执行几个步骤。您不能简单地从子模块中删除“.git”目录。主存储库和子模块之间有三个链接:
.gitmodules
文件。.git/config
中的条目。根据此related SO question,您需要执行以下步骤以完全删除子模块:
注意:如果另一个分支依赖于此子模块,则删除它可能会损坏您的存储库!这是一项危险的操作......请谨慎使用。
.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
目录(位于您的回购根目录下).git
editors/vim/vimdoclet
目录
.git
shells/smallApps
目录
答案 1 :(得分:2)
我看到你已经git add
说了一些关于子模块的事情。你有嵌套的Git存储库吗?这样做:
$ find . -name .git
列出了多少.git
个目录?如果有多个,那么你有多个嵌套的存储库,这可能是造成这种混淆的原因。
答案 2 :(得分:2)
您应该考虑将此问题发布到Git邮件列表(git@vger.kernel.org
)。您可能会得到更迅速和完整的回复。
如果你决定在那里发帖,一定要包括:
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status