如何让顶级git跟踪另一个子目录git下的所有文件
命令序列
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
嵌套存储库默认
未跟踪。(实际上,它以 gitlink 的形式跟踪子模块根文件夹,索引中的特殊条目)
Git 将检测嵌套的 .git 存储库,并且父存储库会将任何文件状态委托给嵌套的存储库。
要显示它们已被跟踪,您可能必须:
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:
git rm --cached mysubmodule
.Note the lack of trailing slash:
mysubmodule
represents the gitlink, whilemysubmodule/
is the folder created by the checked out submodule.git add mysubmodule
(here, you can add or not a trailing slash, it does not matter)mysubmodule
.