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文件......但我很想知道上面这个问题的原因.谢谢!
目录结构
Run Code Online (Sandbox Code Playgroud)topdir + +-- .git +-- fileA +-- fileB + another-git-directory +-- .git +-- fileC +-- fileD
我发现这个线程无法跟踪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视为子模块......我想....
默认情况下是嵌套存储库未追踪的。(实际上它以gitlink 的
形式跟踪子模块根文件夹,索引中的特殊条目)
Git 将检测嵌套存储库,父存储库会将任何文件状态委托给嵌套存储库。.git
要显示他们已被跟踪,您可能必须:
git rm --cached mysubmodule。mysubmodule代表 gitlink,而代表mysubmodule/由签出的子模块创建的文件夹。git add mysubmodule这里,您可以添加或不添加尾部斜杠,这并不重要)mysubmodule.