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

问题:./.git/info/exclude或任何.gitignore -files文件./shells/smallApps/* ,在./shells/smallApps/*./.git/文件添加到Git。

这个问题是基于这个问题没有完全解决的问题。

我跑

 $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会忽略一个文件: gitignoresubmodules

更具体地说,当' git add '被调用时,下列情况会导致Git忽略文件:

  1. 该文件匹配$GIT_DIR/exclude模式。
  2. 该文件与repo中的.gitignore文件中的模式相匹配。
  3. 该文件匹配特定于用户的.gitignore文件中的模式(由' git config --global core.excludesfile '指定)。
  4. 该文件是子模块的一部分。

在忽略的文件上强制' git add ':

你可以通过调用' git add full/path/to/file '来检查一个特定的文件是否被忽略。

该手册页指出: “如果在命令行中明确指定忽略的文件,则该命令将失败并显示被忽略的文件列表。

如果文件被忽略,你可以强制它被添加' git add --force full/path/to/file '。

消除子模块参考的说明:

正如前面的答案所述, shells/smallApps是存储库中的子模块 。

如果文件是子模块的一部分,则情况更为复杂。 您不能从主项目中修改子模块的内容。

如果你想消除子模块引用,并直接跟踪你的主repo中的文件,有几个步骤必须执行。 您不能简单地从子模块中删除“.git”目录。 主存储库和子模块之间有三个链接:

  1. 主repo中的.gitmodules文件。
  2. 主要回购的.git/config中的条目。
  3. 任何与主repo历史中的子模块有关的提交。

根据这个相关的SO问题 ,您需要执行以下步骤来完全删除子模块:

注:如果另一个分支依赖于这个子模块,然后删除它可以破坏你的仓库! 这是一个危险的操作…谨慎使用。

  1. .gitmodules文件中删除相关的行。
  2. .git/config删除相关部分。
  3. 运行git rm --cached path_to_submodule (没有结尾的斜杠)。
  4. 承诺

作为子模块一部分的文件现在未被跟踪,您可以根据需要决定是保留还是删除它们(下面提到的一个注意事项)。

如果你不需要这些文件,你可以直接删除它们。

警告:如果您想保留这些文件(您似乎需要),则必须从子模块文件夹中手动删除.git目录:

  1. cd path_to_submodule
  2. rm .git
  3. cd ..
  4. git add path_to_submodule
  5. git status
  6. git commit

更新:

要求进一步的信息:

为了协助debugging此问题,请发布以下完整的命令的输出:

 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目录(在您的repo的根目录中find)
  • editors/vim/vimdoclet没有.git目录
  • shells/smallApps没有.git目录

我看到你已经有git add说submodules的东西。 你有嵌套的Git仓库吗? 做这个:

 $ find . -name .git 

列出了多less.git目录? 如果有多个,那么你有多个嵌套的存储库,这可能是造成这种混乱的原因。

你应该考虑把这个问题发到Git邮件列表( git@vger.kernel.org )。 您可能会得到更及时和完整的回应。

如果你决定在那里发帖,一定要包括:

  • 描述你正在努力达到的目标。
  • 对遇到的问题的描述。
  • 完整的会话日志显示:
    • cd到您的回购顶层目录
    • ls -al
    • cat .git/config
    • find . -name ".git*"
    • git status
    • git add editors
    • git add shells
    • git status