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

发布于 2024-09-06 15:22:44 字数 1360 浏览 5 评论 0原文

命令序列

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

我的问题是:我们如何使“git ls-files -o”显示子目录内的未跟踪文件?为什么 git 的行为如此,正如我期望 git ls-files 显示所有未跟踪的文件(即使它位于另一个子目录 git 中)?

我知道我可以使用“git add */.”让顶部 git 跟踪子目录文件...但我有兴趣知道为什么上面的问题。谢谢!

目录结构

<前><代码>topdir + +-- .git +-- 文件A +-- 文件B + 另一个 git 目录 +-- .git +-- 文件C +-- 文件D

更新(6 月 26 日)

我发现这个线程 Unable to track files inside Git 子模块 和此 url (cn) http://blog.ossxp.com /2010/01/425/ 解释了如何解决该问题。

解决办法:

git rm --cached another-git-directory #无尾部斜杠
git add another-git-directory/.
git 提交

the 'git rm --cached path/to/sub-dir-or-sub-module' 将告诉顶级目录不要将子目录视为子模块......我认为......

command sequence

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
// now we can see that fileC and fileD is not tracked by top-level git //
git ls-files -o
// this would not show us the fileC and fileD as untracked files//

my question is: how can we make "git ls-files -o" to show the untracked files inside sub-directory? why git is behaved such, as i expect git ls-files to show all untracked file (even it is inside another sub-dir git)?

I know that I could make the top git to track the sub-dir files using "git add */."... but I am interested to know why for the question above. Thanks!

directory structure

 topdir +  
        +-- .git  
        +-- fileA  
        +-- fileB  
        + another-git-directory +-- .git  
                                +-- fileC  
                                +-- fileD  

update (26 Jun)

I found this thread Unable to track files within Git submodules and this url (cn) http://blog.ossxp.com/2010/01/425/ which explains how to resolve the problem.

the solution:

git rm --cached another-git-directory #no trailing slash
git add another-git-directory/.
git commit

the 'git rm --cached path/to/sub-dir-or-sub-module' will tell the top-dir not to treat the sub-dir as a submodule... I think....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

So尛奶瓶 2024-09-13 15:22:44

嵌套存储库默认未跟踪
(实际上,它以 gitlink 的形式跟踪子模块根文件夹,索引中的特殊条目
Git 将检测嵌套的 .git 存储库,并且父存储库会将任何文件状态委托给嵌套的存储库。

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

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

A nested repo is by default untracked.
(actually it tracks the submodule root folder as a gitlink, special entry in the index)
Git will detect the nested .git repo, and the parent repo will delegate any file status to the nested one.

To show them tracked, you may have to:

  • remove the gitlink: git rm --cached mysubmodule.
    Note the lack of trailing slash: mysubmodule represents the gitlink, while mysubmodule/ is the folder created by the checked out submodule.
  • add it back to the index of the parent repo: git add mysubmodule (here, you can add or not a trailing slash, it does not matter)
  • commit the new files added and present in mysubmodule.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文