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

时间:2010-06-25 02:53:12

标签: git git-submodules

命令序列

  mkdir topdir
  mkdir another-git-directory
  触摸文件C
  触摸文件D
  git add。
  git commit -m“sub-dir init”
  cd ..
  触摸文件A
  触摸文件B   git add。
  git commit -m“top-dir init”
  git ls-files
  //现在我们可以看到fileC和fileD没有被顶级git //
跟踪   git ls-files -o
  //这不会将fileC和fileD显示为未跟踪文件//

我的问题是:如何让“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  

更新(6月26日)

我找到了这个帖子Unable to track files within Git submodules和这个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视为子模块......我想...... / p>

1 个答案:

答案 0 :(得分:1)

嵌套式仓库默认为未跟踪 (实际上它将子模块根文件夹跟踪为 gitlink special entry in the index
Git将检测嵌套的.git repo,父repo会将任何文件状态委托给嵌套的。

要显示跟踪,您可能需要:

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