您是否忽略 .gitignore 中的 git 子模块或将其提交到您的存储库?

2024-01-09

我已经在我的项目中添加了一个子模块project_dir/vendor/submodule_one现在每次我跑步git status I get modified: vendor/submodule_one (new commits).

我的问题是处理这个问题的最佳方法是什么?我要添加vendor/submodule_one- 文件夹到我的.gitignore因为我的主项目不需要了解我的子模块的细节?

或者,当我更改并提交对子模块的更改时,我是否也需要在主项目中进行提交?

刚刚开始使用子模块,除了设置它们之外似乎找不到太多信息。


不,您不需要将子模块添加到您的.gitignore:父级将从您的子模块中看到的是gitlink (a 特别条目,mode 160000 https://stackoverflow.com/a/16581096/6309).

这意味着:在子模块中直接进行的任何更改都需要在父目录中提交。
这样,父目录将记录子模块状态的正确提交:该提交就是上面提到的“gitlink”;

您可以在“中阅读有关该政策的更多信息”git 子模块更新(子模块的真实本质) https://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194".
子模块背后的主要思想是基于组件的方法 https://stackoverflow.com/questions/933723/what-is-component-driven-development/933735#933735,您可以在特定提交中引用其他存储库。但是,如果您更改这些子模块中的任何内容,则还需要更新父存储库中的这些引用。


请注意,对于 Git 2.13(2017 年第 2 季度),同时not忽略 gitlink,您仍然可以使用以下方法忽略子模块:

git config submodule.<name>.active false

更多信息请访问 ”忽略 git 子模块的新提交 https://stackoverflow.com/a/43440263/6309".


注意:在 Git 2.15.x/2.16(2018 年第 1 季度)中,忽略子模块更为精确。
"git status --ignored --untracked”并没有停止在嵌入被忽略的目录中的单独项目的工作树上并列出该其他项目中的文件,而不是仅将目录本身显示为被忽略。

See commit fadb482 https://github.com/git/git/commit/fadb4820c4a0178ce76c24d7b48b7ea70210727a (25 Oct 2017) by Johannes Schindelin (dscho) https://github.com/dscho.
(Merged by Junio C Hamano -- gitster -- https://github.com/gitster in commit da7996a https://github.com/git/git/commit/da7996aaf75fcd58c0fb787c15ee9569140a2f9c, 06 Nov 2017)

status:不要对排除目录中的子模块感到困惑

我们精心通过exclude标志到treat_directory()函数,以便我们可以指示其中的文件在递归时被排除而不是未跟踪。

但我们还没有以同样的方式对待子模块。

正因为如此,git status --ignored --untracked带有子模块submodule在 gitignored 中tracked/将显示子模块 ”Untracked files”部分,例如

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    tracked/submodule/

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/initial.t

相反,我们希望它在“Ignored files” 部分:

On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    tracked/submodule/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您是否忽略 .gitignore 中的 git 子模块或将其提交到您的存储库? 的相关文章

  • 将构建文件夹推送到不同存储库的 Github 操作

    我有 2 个存储库 存储库 A 包含源代码 存储库 B 将构建文件夹发布到网络 我为此目的采取了行动 但收到错误 git clone single branch branch main github com blockcodelabs B
  • 解决方案具有位于解决方案文件夹外部的项目

    我尝试通过选择将我的解决方案添加到本地存储库File 添加到源代码管理 但我收到以下消息 源代码控制 Git当前解决方案包含位于解决方案文件夹外部的项目 这些项目不会在 Git 存储库中进行源代码控制 要将所有项目添加到单个 Git 存储库
  • 哪种 git commit 实践更好?

    我坚信 对一个问题做出一次承诺是一种很好的做法 我确信我在 最佳实践 之类的文章中读过它 因此 我的工作流程如下 对于新问题 我创建了一个新的本地分支git checkout b new issue 将所有更改提交到其中 有时这涉及到lot
  • 创建一个包含另一个 git 存储库的 git 存储库

    我创建了一个裸 git 存储库 我们称之为存储库 1 并克隆了它 在克隆 repo 2 中 我创建了几个文件夹 其中我决定创建一个 git repo repo 3 当我提交到 repo 2 时 一切都按预期运行 除了 repo 3 被忽略
  • 我在使用“heroku open”命令时遇到错误

    我在 heroku 上创建了一个 python 应用程序 推动后我给了heroku open命令 我在浏览器上遇到这样的错误 Application Error An error occurred in the application an
  • 取消忽略 git 中被忽略目录中的文件

    In my gititnore我有一个条目 build 效果很好 整个目录都会被 git 忽略 现在 我只想打破这个规则并保留这个文件 build outputs mapping release mapping txt in git 我怎样
  • Git 将合并恢复到特定父级

    我有一个 git 存储库 但在恢复合并时遇到问题 当前哈希为 0ce2ca0b35f59af267241cf4d40d16a3e13ba6f3 它有两个父母 df1acf5f54426d30f12c6b4558c3dd922297aae3
  • 在 Windows 上,无法创建目录“/home/<用户名>/.ssh”

    要使用 gitbash 在 Windows 上配置 git 如所解释的here https help github com articles generating a new ssh key and adding it to the ssh
  • Git 子树导出和重新导入问题

    我有一个更大的 git 存储库 A 它与我的另一个项目 B 共享一定量的代码 为了使维护更容易 我决定使用公共代码 C 创建第三个存储库 然后通过git subtree 我准备了 A 中的所有内容 将通用代码放在文件夹 sub 中 并使用了
  • 从私有 GitHub 存储库迁移到公共和私有

    我使用 GitHub 上的私人存储库开发了一个客户项目 我们现在要做的就是开放其中的某一部分 并产生该项目的开源版本 我们的想法是 客户的版本将在此基础上构建 对开源版本所做的任何更改也应适用于私有版本 现在的问题是我不能将当前的 GitH
  • Git merge --squash 可以保留提交注释吗?

    有没有一种方法可以自动添加压缩后的所有提交注释mybranch执行时提交 git merge squash mybranch 这样单个提交包含所有提交注释的串联mybranch 我认为这就是 git merge squash 自动执行的操作
  • 仅当除 master 之外的所有分支都有推送的 TAG 时,Gitlab 才会触发 Pipeline

    我的 YAML 文件必须如何配置 以便仅在推送标签时触发一种情况 作业 构建 的管道 该标签可能位于除 master 之外的所有分支中 对于主案例 我有一个单独的工作 build master yaml 文件 问题 如果主分支获得标签 管道
  • 是否可以在不从 git 克隆或拉取的情况下获取分支名称?

    我想获取 git 存储库的所有分支名称 目前 我克隆存储库 然后将它们获取到本地计算机上 这是低效的 因为我所需要的只是名称而不是其他 我想知道是否可以这样做 如果是这样 我可以使用什么命令 在本地 无需克隆 您可以键入 使用 gitls
  • github 网络图查看器的替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我单击 github 上的 forks 按钮时 我想获得一个摘要 这就是我使用网络图查看器获得的结果 但它并不完全理想 我会做什么ide
  • Git:从远程获取特定对象

    在工作中我们必须应对一个非常庞大的 git 存储库 90Go 在尝试调整本地副本上的一些内容后 我的包文件出现错误 尝试解压它 我可能删除了一些目标文件 例如 gt git GC 错误 无法读取 af9ed8 snip 致命 坏树对象 af
  • git 列出所有可用命令

    有没有命令可以显示 GIT 中所有可用命令的列表 有git help但它显示 usage git version exec path
  • 如何防止自动工具自动重新生成配置脚本?

    有时由于SCM没有严格记住文件的时间戳 生成的Makefile会认为需要重新运行 autoreconf i 或相当于从Makefile am重新生成Makefile in 从configure ac重新生成配置等 我该如何防止这种情况 我想
  • AngularJs:显示来自 git 或 Bower 的版本号

    我创建了一个 Angular 应用程序 我想在屏幕上显示应用程序的当前版本号 目前我已将其实现为常量 application constant constants VERSION 1 1 2 但这需要我在每个新版本上更新常量 我使用 Bow
  • 运行 npm install - 如何配置不使用 SSH(端口被防火墙阻止)

    当我跑步时npm install大多数模块配置正确 然而 至少有人想击中ssh 拉取模块的地址 不幸的是 我的公司有一项政策 不允许内部网络之外的 SSH 连接 我收到的具体错误是 Error while executing npm ERR
  • 如何快速查看哪个 Git 分支是最新的?

    例如 如果 git 上有 4 个分支 如下所示 branch1 branch2 current branch branch3 newest commits here master oldest 我的问题是 如何从 git 命令行检查我当前的

随机推荐