Git 子模块工作流程建议

2024-03-13

所以几天前我开始使用 Git。 (聚会已经很晚了——别骂:))。真正开始熟悉基本命令、想法和工作流程。然而,子模块确实让我大吃一惊。我正在尝试贡献代码FuelPHP http://fuelphp.com/'s GitHub https://github.com/fuel我可以使用一些指导和技巧。

我正在终端中运行以下命令:

//1: clone the repository from Fuel's github.
git clone git://github.com/fuel/fuel.git

//2: move into the main fuel directory
cd fuel

//3: initilize the submodules (populate .git/config with submodule data)
git submodule init

//4: download the submodules...
git submodule update

//5: move into the core directory (which is a submodule).
cd fuel/core

//6: change branch from (*no branch) to 1.1/develop
git checkout 1.1/develop

//7: open random file in text editor + make some small change (i.e. typo) + save file.
sudo gedit classes/autoloader.php

//8: add this file to the staging area.
git add classes/autoloader.php

//9: commit this file under 1.1develop branch.
git commit -m "im committing a submodule"

//10: push the new commit to MY (not fuel's) github repo (yes i've renamed the repo).
git push [email protected] /cdn-cgi/l/email-protection:jordanarseno/fuel-core.git

//11: changes are reflected on github, looks good.

//12: back way out to fuel again. time to push the submodule commit separately.
cd ../../

//13: add the fuel/core submodule to the staging area.
git add fuel/core

//14: commit the submodule change.
git commit -m "submodule pushed. pushing super now."

//15: push the commit to MY (not fuel's) github repo.
git push [email protected] /cdn-cgi/l/email-protection:jordanarseno/fuel.git

具体来说,我的问题是:

  1. 这是使用子模块的正确工作流程吗?这是你会做的吗?
  2. 为什么 git 会下拉1.1/develop在子模块中分支但让我打开*no branch默认情况下?我可以修改这个行为吗?
  3. Fuel 子模块的哪一部分告诉 git 首先拉取 1.1/develop?那里are其他分支机构(1.1/master, 1.0/develop etc..).
  4. 为什么我们不能在第 11 步就结束呢?子模块推送工作正常。后来我推了超级,因为手册告诉我这是个好主意 http://book.git-scm.com/5_submodules.html。事实上,前往 GitHub 并查看我的超级,已做出提交。此提交 845de87 https://github.com/jordanarseno/fuel/tree/1.1/master/fuel然而,似乎只是引用了 Fuel 的 super,而不是 MY super。它不应该链接到我的仓库而不是他们的吗?
  5. Running cat .git/config在超级节目中:

连同所有子模块...

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git://github.com/fuel/fuel.git`

Running cat .git config在核心子模块中显示:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git://github.com/fuel/core.git

将这些 url 更改为我自己在 GitHub 上的存储库是否明智?无论如何,燃料否认推动。如果我执行子模块更新,它们会被覆盖吗?

我也问过这个问题燃料的论坛 http://fuelphp.com/forums/topics/view/7782,但这更多的是一个一般性问题,而且这里有更多的 Gitters...谢谢!


  1. 是的,正如“子模块的真实性质 https://stackoverflow.com/a/1979194/6309"

  2. git 子模块是对特定提交 (SHA1) 的引用,而不是分支,因此您始终首先处于分离模式(与只读用法兼容)。
    换句话说,git submodule update检查特定的提交,而不是分支的提示。
    The .gitmodule文件将包含子模块存储库的引用。并且特定的 SHA1 将作为特殊提交(模式 160000)记录在父存储库中。当你 'git submodule add' 一个新的子模块,它记录当前签出其他存储库的 SHA1(无论其分支是什么)。
    如果要进行更改,则必须签出该子模块存储库中的分支(现有分支或一个新的:在这两种情况下,您都将把任何新的更改推送回该子模块的远程存储库)。
    另一种选择是git奴隶 http://gitslave.sourceforge.net/.

  3. 请参阅 2. 中列出的其他分支git branch是子模块存储库中现有的本地分支,每个子模块都包含一个本地分支跟踪分支 https://stackoverflow.com/a/4697054/6309如果你做了一个git pull在一个点上。

  4. 因为父模块仍然引用子模块的初始 SHA1。
    但由于您对其进行了修改,因此需要更新 SHA1。
    请记住,子模块本身就是一个 git 存储库...完全不知道它被用作子模块。因此,有必要在父存储库中记录该存储库的新状态(唯一一个跟踪其子模块状态的存储库)。
    你的第一次 git Push 完全是internal子模块存储库的操作(父存储库根本看不到)。
    对于父存储库,子模块存储库是一个“黑匣子”,只有远程地址和 SHA1。无论子模块内做什么,都不会影响父模块,父模块只会检测子模块树 SHA1 的更改。

  5. Using forks http://help.github.com/fork-a-repo/可能有帮助
    See "更改 git 子模块的远程存储库 https://stackoverflow.com/a/914090/6309" 更新您的子模块远程 URL。

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

Git 子模块工作流程建议 的相关文章

随机推荐

  • 在 Ubuntu 20.04 上为 pandas 构建轮子需要 20 多分钟,但在 18.04 上不需要

    我有一个 ERPNext 的安装脚本 可以在 Ubuntu 18 04 上正常运行 当我在 20 04 上运行相同的脚本时 我不得不等待 20 多分钟才能完成 而在 18 04 上则需要大约 30 秒 我的脚本包括这两行 env bin p
  • 如何让 vim 使用正确的缩进格式化项目符号列表

    在 vim 中 我可以设置 textwidth 选项 然后将新文本格式化为换行 我还可以使用 gq 命令显式换行文本 然而 项目符号列表的行为对我来说有点出乎意料 vim 文档讨论了使用带有连字符的项目符号列表 当我尝试这样做时 它开始正常
  • router-outlet 不是已知元素

    以下代码有效 app module ts import NgModule from angular core import HttpModule from angular http import AppComponent from app
  • 如何更改此 R 图中的字体系列? [复制]

    这个问题在这里已经有答案了 我正在尝试将轴和图例的字体更改为衬线但添加family serif 没有为传奇工作 我该怎么做呢 plot sort n cdf pch 3 cex 0 5 xlab Order ylab Cn family s
  • pandas 中 groupby 中的排名

    我有一个典型的 面板数据 在计量经济学术语中 不是 pandas 面板对象 数据框有一个Date列和一个ID列 以及包含某些值的其他列 对于每个日期 我需要根据 V1 对 ID 进行横断面排名 分为 10 组 十分位数 并创建一个名为的新列
  • Python:定义特定类型对象的列表

    我想继承一个列表来生成myList类 仅接受一种特定类型的对象 例如整数 我相信装饰者可以优雅地做到这一点 使用怎么样arrays http docs python org library array html 该模块定义了一个对象类型 它
  • XLib:获取光标图像

    有没有办法使用 Xlib 检索当前光标位图 我检查过X光标人 http www xfree86 org 4 3 0 Xcursor 3 html但我没有看到任何方法可以做到这一点 使用 GetCursorImage SelectCursor
  • matlab中的支持向量机

    您能否举一个在 matlab 中使用支持向量机 SVM 进行 4 类分类的示例 例如 atribute 1 atribute 2 atribute 3 atribute 4 class 1 2 3 4 0 1 2 3 5 0 0 2 6 4
  • 如何在 Android 中使用文本视图显示颠倒的文本?

    如何在 Android 中使用文本视图显示颠倒的文本 就我而言 我有一个 2 人游戏 他们彼此面对面玩 我想向第二个面向他们的玩家展示测试 这是我在 AaronMs 建议后实施的解决方案 执行重写的类 bab foo UpsideDownT
  • Firebase 服务器时间戳将 iOS 翻倍

    ServerValue timestamp 回报 AnyHashable Any 如何将其转换为Double 这样我就可以创建一个带有时间戳的日期 这并不是 Firebase 时间戳的工作原理 它实际上所做的是将时间戳写入节点 但在写入之后
  • 如何验证 ZF2 中的复选框

    我已经阅读了许多针对 Zend Framework 缺乏默认复选框验证的解决方法 我最近开始使用 ZF2 但文档有点缺乏 有人可以演示如何使用 Zend 表单和验证机制验证复选框以确保其被选中吗 我正在为我的表单使用数组配置 使用 ZF 网
  • 安全组出口规则仅允许 ECR 请求

    当使用 ECR 存储用于 ECS 的容器映像时 EC2 实例 或 Fargate 服务 必须具有允许 通过公共互联网 访问特定于账户的存储库 URI 的安全组 许多组织都有严格的 IP 白名单规则 通常不允许为所有 IP 启用出站端口 44
  • 从命令行在 Hadoop 中检测压缩编解码器

    有没有简单的方法可以找出 Hadoop 中用于压缩文件的编解码器 我是否需要编写 Java 程序 或者将文件添加到 Hive 以便我可以使用describe formatted table 一种方法是在本地下载文件 使用hdfs dfs g
  • 具有接口的枚举类成员无法在内部找到方法

    我遇到了一个奇怪的问题 我不确定这是编译器问题还是我对接口枚举的理解 我正在使用 IntelliJ IDEA 12 构建一个 Android 项目 并且我有一个这样的类 public class ClassWithEnum private
  • Azure 服务总线序列化类型

    随着我们转向面向服务的体系结构 我们已开始研究使用 Windows Azure 服务总线来替代当前的队列 大部分文档都很清楚 但是我很难确定哪种类型的序列化BrokeredMessage当提供主体时使用 例如 假设我实例化了一个Broker
  • React:formik 表单,如何在回调函数内提交后使用状态

    我在用formik插件reactjs我想要useState表单提交后的变量 Both this and setState未定义 我无法实现它 有人可以帮我完成这件事吗 See screenshot below In JavaScript 默
  • android 延迟加载未在手机上显示图像或显示速度很慢

    我正在使用 JSON 来解析在线 xml 文档以及两种延迟图像加载的方法 以下是我的源代码 解释和我的问题 解释 方法一 使用AsyncTask和线imageLoader DisplayImage String jsonImageText
  • 安装chatterBot时出错

    每当我尝试使用命令安装 ChatterBot 时pip install ChatterBot它给出了这个错误 Retrying Retry total 0 connect None read None redirect None after
  • 扩展点或从 Liquid 模板访问 OpenApiDocument

    We have 规范扩展 https github com OAI OpenAPI Specification blob master versions 3 0 2 md specification extensions i e x isP
  • Git 子模块工作流程建议

    所以几天前我开始使用 Git 聚会已经很晚了 别骂 真正开始熟悉基本命令 想法和工作流程 然而 子模块确实让我大吃一惊 我正在尝试贡献代码FuelPHP http fuelphp com s GitHub https github com