正在管理的 Git 仓库中有很多嵌套的 Git 仓库(embedded git repository),这些仓库事实上是代码的中间产物,它们被创建在代码文件的根目录下,但并不打算将它们纳入版本控制当中,因为这些是自动化的产物,真正需要管理的是生成它们的代码。
在 Sourcetree 中这种嵌套的仓库是被直接忽略的,但 Git 命令行默认好像不是这样,当 git add . 的时候会将其作为子模块提交到暂存区,这并不是我想要的行为。
所以想找到某种方式,让 git add . 命令,自动的忽略那些嵌套的 Git 仓库。
猜测 Sourcetree 之所以是自动忽略的,很可能使用了某种特殊的配置文件,但在查看了 git config 的相关文档之后,我好像并没有找到这样的内容。
那么该如何实现这个需求呢?
1
momocraft 2021-05-31 15:18:37 +08:00
你说的"嵌套的 Git 仓库" 在文件系统上是什么样子的
我记得 git cli 已经默认忽略不被自己管理 (不是 submodule 或 worktree) 的 repository (内有.git) 了 |
2
AndyAO OP @momocraft #1
目录的具体结构如下: 忽略子模块_ignore_submodules ├──repo │ ├──.git │ └──embedded_repo │ └──.git ├──main.Tests.ps1 └──README.md 在这种状态下运行 git status -s 的结果是 ?? embedded_repo/,只看到了这个仓库本身里面的内容隐藏了。 如果 git add . 然后 git commit -m 'add embedded_repo,你就会发现这东西已经被作为「子模块」添加进去了,git show 会得到关于这个 Subproject 的如下信息 commit cd14f6e7bffe8081d5bf64928827e3b3a7fe7026 Author: fibo Date: Mon May 31 15:37:41 2021 +0800 add embedded_repo diff --git a/embedded_repo b/embedded_repo new file mode 160000 index 0000000..6e9991c --- /dev/null +++ b/embedded_repo @@ -0,0 +1 @@ +Subproject commit 6e9991c95f5ca92fdcca22e3ca1cfd54a47343e1 |
3
AndyAO OP @momocraft #1
你关于版本的提示非常好,这是我当前的版本↓ PS>git --version git version 2.29.2.windows.2 突然意识到很可能是因为 Sourcetree 用的是内置的 Git,这就去测试测试 |
4
AndyAO OP |
5
HarryQu 2021-06-01 16:18:31 +08:00
我还是没看明白你说的什么意思。
不想要将 embedded_repo/ 目录纳入 git 吗? 你可以在 repo 目录创建 .gitignore,将 embedded_repo 添加到 .gitignore 中。 |
6
AndyAO OP 最后的方案是:
1. 在所有中间仓库文件夹的名称后面加入后缀_ignore 2. 然后使用递归忽略(**/*_ignore)解决问题 实现了基本和老版本等价的效果 |