当前位置:  开发笔记 > 开发工具 > 正文

无法跟踪Git子模块中的文件

如何解决《无法跟踪Git子模块中的文件》经验,为你挑选了1个好方法。

问题:当我没有文件时,也没有任何文件时,将文件添加./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的文件.

最后警告是什么意思?



1> Tim Henigan..:

UPDATE

Git忽略文件有两个一般原因:gitignoresubmodules.

更具体地说,以下条件将导致Git在git add调用' ' 时忽略文件:

    该文件与模式匹配$GIT_DIR/exclude.

    该文件与.gitignorerepo内文件中的模式匹配.

    该文件与用户特定文件中的模式匹配.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


@Tim:我通过运行〜/ bin解决了问题:`git rm --cached shells/smallApps` ---谢谢你的链接!
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有