问题:当我没有文件时,也没有任何文件时,将文件添加./shells/smallApps/*
到Git ../.git/
./.git/info/exclude
.gitignore
这个问题是基于这个问题没有完全解决的问题.
我跑
$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在git add
调用' ' 时忽略文件:
该文件与模式匹配$GIT_DIR/exclude
.
该文件与.gitignore
repo内文件中的模式匹配.
该文件与用户特定文件中的模式匹配.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
目录(位于您的仓库的根目录)
没有.git
目录editors/vim/vimdoclet
没有.git
目录shells/smallApps