命令序列
mkdir topdir
mkdir another-git-directory
touch fileC
touch fileD
git add .
git commit -m "子目录初始化"
cd ..
touch fileA
touch fileB
git add .
git commit -m "顶层目录初始化"
git ls-files
// 现在我们可以看到 fileC 和 fileD 没有被顶层的 git 跟踪 //
git ls-files -o
// 这不会显示 fileC 和 fileD 作为未跟踪文件//
我的问题是:如何使 "git ls-files -o" 显示子目录中的未跟踪文件?为什么 Git 表现出这样的行为,因为我期望 `git ls-files` 能够展示所有未跟踪的文件(即使它位于另一个子目录 git 中)?
我知道可以使用 "git add */." 让顶级的 git 跟踪子目录中的文件……但我想知道上述问题的原因。谢谢!
目录结构
topdir + +-- .git +-- fileA +-- fileB + another-git-directory +-- .git +-- fileC +-- fileD
更新(6月26日)
我在这个主题 Unable to track files within Git submodules 和这个链接(cn)http://blog.ossxp.com/2010/01/425/ 找到了解决此问题的方法。
解决方案:
git rm --cached another-git-directory #不要有末尾的斜杠
git add another-git-directory/.
git commit'git rm --cached path/to/sub-dir-or-sub-module'将告诉顶级目录不要将子目录视为子模块...我想....
git config status.showUntrackedFiles no
来仅显示索引中的文件状态。如果你需要在某个时刻显示未跟踪的文件,你总是可以执行:git status -unormal
。 - VonCgit status
非常慢:请参见http://longair.net/blog/2010/06/02/git-submodules-explained/和http://lists-archives.org/git/719848-git-status-and-git-diff-now-very-slow-in-project-with-a-submodule.html。 - VonC