【问题标题】:How to make top-level git to track all the files under another sub-directory git如何让顶级git跟踪另一个子目录git下的所有文件
【发布时间】:2011-03-08 02:42:58
【问题描述】:

命令序列

mkdir 顶部目录
mkdir 另一个 git 目录
触摸文件C
触摸文件D
混帐添加。
git commit -m "子目录初始化"
光盘..
触摸文件A
触摸文件B
混帐添加。
git commit -m "top-dir init"
git ls 文件
// 现在我们可以看到顶级 git 没有跟踪 fileC 和 fileD //
git ls-files -o
// 这不会将 fileC 和 fileD 显示为未跟踪的文件//

我的问题是:我们如何使“git ls-files -o”显示子目录中未跟踪的文件?为什么 git 会这样,因为我希望 git ls-files 显示所有未跟踪的文件(即使它在另一个子目录 git 中)?

我知道我可以让顶级 git 使用“git add */.”来跟踪子目录文件......但我很想知道上述问题的原因。谢谢!

目录结构

 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提交

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

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢冯克。由于子目录 git 不是由我创建的,因此存在限制,因此第一种方法已失效。对于子模块,正如我从您的链接中读取的那样,它似乎没有做我想做的事情,因为我想为来自顶层目录的所有子目录中的文件生成差异。我已经更新了 git 1.7.1 并尝试“git status -u all”,但它仍然没有显示未跟踪的 fileC 和 fileD
    • @insidepower:奇怪,这个概念应该可用:只需将嵌套的 repo 克隆到其他地方,然后将其删除,然后将其重新创建为子模块。然后 git status 将显示对 C 和 D 的任何修改(当然只有当你修改它们时)
    • 好的,我使用“git config status.submodulesummary true”将 submodulesummary 设置为 true,现在它会吐出子模块的更改。但它并没有告诉哪些文件有变化,只是它的摘要。例如修改:sub-dir2(修改内容)顺便说一句,1.7.1 中的“git status”在大型项目上非常非常非常慢。我要变回去了....叹息
    • @insidepower: 奇怪(二)你在使用 git 的 msysgit Windows 发行版吗?注意:您也可以尝试git config status.showUntrackedFiles no 仅统计索引中的文件。如果您需要在某些时候显示未跟踪的文件,您可以随时执行:git status -unormal
    • @VonC:不,我使用的是 ubuntu,如果我没记错的话,当前构建的是 1.6.0.4。我已经切换回这个版本并且 git 状态恢复到正常速率。唉,除非我再次切换回 1.7.1,否则我无法尝试 showUntrackedFiles 选项。但是我认为我不能容忍它的“git status”的速度......我猜这就是生活:)
    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2013-06-13
    • 2018-07-07
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多