如何制作顶级git来跟踪另一个子目录git下的所有文件

ken*_*ken 9 git git-submodules

命令序列

mkdir topdir
mkdir another-git-directory
touch fileC
touch fileD
git add.
git commit -m"sub-dir init"
cd ..
touch fileA
touch fileB
git add.
git commit -m"top-dir init"
git ls-files
//现在我们可以看到fileC和fileD没有被顶级git跟踪//
git ls-files -o
//这不会向我们展示fileC和fileD as untracked files //

我的问题是:如何让"git ls-files -o"显示子目录中未跟踪的文件?为什么git表现得如此,因为我希望git ls-files显示所有未跟踪的文件(即使它在另一个sub-dir git中)?

我知道我可以使用"git add*/."来制作顶级git来跟踪sub-dir文件......但我很想知道上面这个问题的原因.谢谢!

目录结构

 topdir +  
        +-- .git  
        +-- fileA  
        +-- fileB  
        + another-git-directory +-- .git  
                                +-- fileC  
                                +-- fileD  
Run Code Online (Sandbox Code Playgroud)

更新(6月26日)

我发现这个线程无法跟踪Git子模块中的文件和这个url(cn)http://blog.ossxp.com/2010/01/425/,它解释了如何解决问题.

解决方案:

git rm --cached another-git-directory #no trailing slash
git add another-git-directory /.
git commit

'git rm --cached path/to/sub-dir-or-sub-module'会告诉top-dir不要将sub-dir视为子模块......我想....

Von*_*onC 2

默认情况下是嵌套存储库未追踪的(实际上它以gitlink 的
形式跟踪子模块根文件夹,索引中的特殊条目) Git 将检测嵌套存储库,父存储库会将任何文件状态委托给嵌套存储库。
.git

要显示他们已被跟踪,您可能必须:

  • 删除 gitlink: git rm --cached mysubmodule
    请注意缺少尾部斜杠:mysubmodule代表 gitlink,而代表mysubmodule/由签出的子模块创建的文件夹。
  • 将其添加回父存储库的索引中:(git add mysubmodule这里,您可以添加或不添加尾部斜杠,这并不重要)
  • 提交添加并存在于mysubmodule.