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

10

命令序列

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'将告诉顶级目录不要将子目录视为子模块...我想....

1个回答

2
嵌套仓库默认情况下是未跟踪的。
(实际上它将子模块根文件夹作为gitlink索引中的特殊条目进行跟踪)
Git会检测到嵌套的.git仓库,父仓库将把任何文件状态委托给嵌套仓库。
要显示已跟踪的内容,您可能需要执行以下操作:
  • 删除gitlink:git rm --cached mysubmodule
    请注意,没有尾随斜杠:mysubmodule表示gitlink,而mysubmodule/是已检出子模块创建的文件夹。
  • 将其重新添加到父仓库的索引中:git add mysubmodule(在这里,您可以添加或不添加尾随斜杠,这并不重要)
  • 提交已添加并存在于mysubmodule中的新文件。

谢谢Vonc。由于子目录git不是我创建的,所以第一种方法不可行。对于子模块,根据您提供的链接,它似乎不能实现我想要的功能,因为我想要从顶级目录生成所有子目录中文件的差异。我已经更新了git 1.7.1并尝试了“git status -u all”,但仍然没有显示未跟踪的文件C和文件D。 - ken
@insidepower:很奇怪,那个概念应该是可用的:只需在其他地方克隆该嵌套存储库,然后将其删除并重新创建为子模块。然后git状态将显示C和D的任何修改(当然,仅在您修改它们时)。 - VonC
好的,我使用“git config status.submodulesummary true”将子模块摘要设置为true,现在它会输出子模块的更改。但它并没有告诉我哪些文件有更改,只是总结了一下。例如:modified: sub-dir2(修改内容)顺便说一句,在1.7.1中,“git status”在大型项目上非常非常慢。我打算改回去... 唉 - ken
@insidepower:奇怪(双倍)。你是否在使用msysgit Windows发行版来进行git操作?注意:你也可以尝试git config status.showUntrackedFiles no来仅显示索引中的文件状态。如果你需要在某个时刻显示未跟踪的文件,你总是可以执行:git status -unormal - VonC
@VonC:不,我正在使用Ubuntu,当前版本是1.6.0.4,如果我没有记错的话。我已经切换回这个版本了,git状态恢复正常了。唉,现在除非我再次切换到1.7.1,否则我无法尝试showUntrackedFiles选项。然而,我不认为我能容忍它的“git status”速度...这就是生活吧 :) - ken
@insidepower:我同意,自1.7版本以来,git 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接