• Submodule

    2020-12-08 23:30:57
    <p>It would be great if <code>jekyll_press.rb</code> was in the root of the repo, so that we could use the repo as a git submodule. Actually, it works as is, but then you have the path <code>_plugins/...
  • submodule

    2018-01-23 11:53:00
    git submodule init:根据.gitmodules的名称和URL,将这些注册到.git/config内,使用这个指令并不能自动删除.git/config相关内容,必须手动删除 git submodule update:根据已注册(.git/config)的submodule进行更新...

    git submodule init:根据.gitmodules的名称和URL,将这些注册到.git/config内,使用这个指令并不能自动删除.git/config相关内容,必须手动删除

    git submodule update:根据已注册(.git/config)的submodule进行更新

    git submodule asyn:同步remote URL

    git clone时并不能自动把submodule一起clone下来,必须家伙是那个--recursive



  • git submodule update --init --recursive

    万次阅读 多人点赞 2018-07-28 22:30:37
    转自http://webfrogs.me/2013/03/20/git-submodule/ 开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的...今天无意中发现了git的git submodule命令,之前的...



    开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情。今天无意中发现了git的git submodule命令,之前的问题迎刃而解了。



    git submodule add  仓库地址   路径

    仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径       注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)



    submodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。


    当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

    git submodule update --init --recursive


  • Submodule Error

    2020-12-08 19:41:26
    <div><p>The submodule setup of this repository is not clean. When running <code>git submodule status</code> one gets the error message <code>fatal: no submodule mapping found in .gitmodules for path &...
  • submodule awareness

    2020-12-09 10:29:42
    s extra work when I want to jump into a submodule (I have to manually edit the url to point to the submodule repo rather than the main repo). It would be super convenient if GitHubinator could notice ...
  • submodule command

    2020-12-25 17:12:44
    <div><p>there is no submodule command -> you cannot do: <code>git submodule foreach git pull origin master</code></p>该提问来源于开源项目:sheimi/SGit</p></div>
  • Submodule structure

    2020-12-09 09:21:45
    submodule1_args.submodules</code>. This is implemented by overwriting the submodules pointer, when calling the <code>assign_args()</code>-routine of the specific submodule, hence: notice the double-...
  • winpty submodule

    2020-11-30 12:23:25
    <div><p>Why is the repository using a fork of winpty as its submodule? I made a change to the original winpty that would fix compilation on Windows for this module. Can we switch the submodule to use ...
  • submodule problem

    2020-11-25 22:55:13
    <div><p>Submodule 'vendor/beast' (https://github.com/boostorg/beast.git) registered for path 'vendor/beast' Submodule 'vendor/webkit' (https://github.com/WebKit/webkit.git) ...
  • flann submodule

    2020-11-26 16:47:22
    <p>It seems like recently, flann was added as a submodule to this repo. It's not used in the <code>nanoflann.hpp</code> header, but I found some uses of flann headers in the benchmark folders. Now...
  • Submodule Rage

    2020-11-26 08:10:32
    with the Git and Submodule options added, should the 'wordpress' folder be marked as modified content? <p>We're having terrible issues trying to get this up to the remote repo and cloned ...
  • submodule fails

    2021-01-05 01:56:52
    into submodule path '/home/magne/.vim/bundle/vundle' failed </code></pre> <p>Is using submodules impossible with vcsh, or is there something I'm missing? <p>Magne Rasmussen</p><p>该提问...
  • Submodule?

    2020-12-25 22:37:37
    <div><p>Random question: have we ever considered adding HTSLib as a git submodule versus plaintext vendoring? I understand that there many cons to submodule, but I personally have difficulty ...
  • Missing submodule

    2021-01-03 16:32:32
    submodule in the root pointing to revision <a href="https://github.com/github/VisualStudioBuildScripts/tree/7ee5265a5d86f02efa95a10bc2ebea50ab0f6d04">7ee5265...</a> of a nonexistent ...
  • submodule x-base2 { yang-version 1.1; belongs-to x-base { prefix x-b; } container configs { container profiles { } } } $ cat x-profiles.yang submodule x-profiles { yang-version 1.1; belongs...
  • 1. Bump ATen submodule to latest master 2. use pytorch-nightly conda package for python tests - these conda packages are built for pytorch master on daily basis. This will also allow us to track aten ...
  • libRocket submodule

    2020-12-08 19:56:48
    <div><p>Considering we maintain our own fork of libRocket at github and constant merges from that fork to qfusion maybe we should make it submodule?</p><p>该提问来源于开源项目:Qfusion/qfusion...
  • Remove submodule

    2020-12-26 03:23:24
    <div><p>Removed git submodule and added the phansible-roles contents to the same directory - <code>src/Phansible/Resources/ansible/roles</code> .</p><p>该提问来源于开源项目:phansible/phansible...
  • git submodule

    2020-05-14 10:39:41
    加入 submodule 建立 submodule 时使用 -b 参数,使得母项目追踪子项目的指定 branch(否则默认不追踪) git submodule add -b <branch> <repository> [<submodule-path>] git submodule update -...

    submodule 实践

    加入 submodule

    建立 submodule 时使用 -b 参数,使得母项目追踪子项目的指定 branch(否则默认不追踪)

    git submodule add -b <branch> <repository> [<submodule-path>]
    git submodule update --remote

    修复所有子项目的 detached head

    如果没有加入 submodule 时没有加上 -b 参数,采用如下方式修复。这里跟踪的是 master 分支,如果你的分支不是 master,请自行更换为相应的分支

    git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
    # 如果需要创建新分支继续执行下面的命令
    git checkout -b 新分支名

    拉取 submodule 的过程


    1. clone 指定分支到指定目录
    git clone -b <branch> --recurse-submodules git@github.com:name/repo.git <rename>
    1. 让母项目追踪子项目指定 branch

    否则 push 会丢失

    git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
    1. pull 拉取更新
    # or git 2.14
    git pull origin <branch> --recurse-submodules
    # or git 2.15+
    git config --global submodule.recurse true
    git pull origin <branch>

    修改 submodule

    1. 进入 submodule 目录
    cd <submodule-directory>
    1. 提交
    git commit -am "修改文件"
    1. push
    git push origin <branch>
    1. 回到项目根目录
    cd <project-directory>
    1. commit 并 push
    git commit -m'update submodule'
    git push origin <branch>
  • Submodule update

    2020-12-08 20:24:00
    <div><p><strong>- What I did</strong></p> <p>Submodule update for 1. sonic-py-swsssdk 2. sonic-snmpagent 3. sonic-utilities</p><p>该提问来源于开源项目:Azure/sonic-buildimage</p></div>
  • Submodule Redundancy

    2020-12-26 08:52:29
    <div><p>There is massive reptition with git submodule inclusion under the DoctrineModule. Currently it looks something like this: <p>DoctrineModule docrine-common doctrine-build-common doctrine-...
  • Mavlink submodule

    2020-11-30 10:16:27
    <p>This PR adds that repo as a submodule (replacing the static header files). This makes synchronization with autopilot software much easier.</p><p>该提问来源于开源项目:mavlink/qgroundcontrol...
  • Submodule Compatibility

    2020-12-25 18:02:47
    <p>Developers can simply use the submodule command from git's CLI and perform modifications from there and import the library to the other project solutions via Project References. <p>Signed-off-...
  • libMesh Submodule

    2020-12-27 23:14:14
    <p>This adds libMesh as a submodule in the moose directory and adds a script (update_and_rebuild_libmesh.sh) to a top level "scripts" directory. <p>How to use this script is detailed here: ...
  • Git Submodule

    2019-10-12 13:08:52
    submodule 目前对 git 仓库拆分的已有实现之一。环境 git version 2.7.4.windows.1 准备工作 首先创建主仓库 subrepo-master,随意提交一次文本,接着拉取到本地 建立子仓库 subrepo 和 subrepo1,随意提交...


    submodule 目前对 git 仓库拆分的已有实现之一。环境 git version 2.7.4.windows.1


    1. 首先创建主仓库 subrepo-master,随意提交一次文本,接着拉取到本地

    2. 建立子仓库 subrepo 和 subrepo1,随意提交一次文本



    当本地子模块没有指定 branch 的时候,是处于一个称作 “游离的 HEAD”(detached HEAD) 的状态(git 提示的是 commitid 而不是分支名)。这个状态下你可以正常的 git 操作,但是此时是没有分支进行跟踪的,也就没办法推送代码。想摆脱这种状态,在子模块运行 git checkout branch 即可。


    然后对远端子模块做一次修改(称为 patchA),并运行 git submodule update --remote --merge,就可以看到 subrepo 发生了改变,此时可以提交这个改变,即将 subrepo 指向的旧的 commitid 换成  patchA 的 commitid。后面的人更新代码的时候会拿到新的 commitid,如果没有人运行 update 命令并提交,则所有人拿到的都是旧的代码。

      $ git status
      On branch master
      Your branch is up-to-date with 'origin/master'.
      Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
              modified:   subrepo (new commits)  no changes added to commit (use "git add" and/or "git commit -a")


    接下来对本地的 subrepo 做一次提交,接着对远端的子模块也做一次提交。然后更新子模块。可能会运行 git submodule update --remote,此命令只会更新成远端的代码,会发现本地的代码丢失,此时不需要慌张,运行 git checkout branch 即可获取本地代码。合并的命令是 git submodule update --remote 后面加上 --merge 或者 --rebase 即可,会遇到冲突的情况,进入目录手工解决即可。运行 git diff -p --submodule,可以查看到子模块的修改,现在修改的内容包含本地提交以及远端合并的代码,接下来就需要进行推送。

    本地提交到远端  在主仓库进行一次提交,提交子仓库最新的 commitid。


    为了确保这不会发生,你可以让 Git 在推送到主项目前检查所有子模块是否已推送。   git push --recurse-submodules=check (如果子模块没有提交,会直接报错)或者 git push --recurse-submodules=on-demand(如果子模块没有提交,会尝试提交,提交不成功同时会阻止主仓库的推送)

    1. 在主仓库下运行如下命令后,可以看到在仓库中多出来文件 subrepo 以及 .gitmodules

      git submodule add [subrepo url]


    2. 运行 git status

      On branch master
       Changes to be committed:
       (use "git reset HEAD <file>..." to unstage)         new file:   .gitmodules         new file:   subrepo


    3. 接着添加 submodule1,并指定路径

      git submodule add [subrepo1 url] ./module/module1


    4. 运行 git status 得到

      On branch master
       Changes to be committed:
       (use "git reset HEAD <file>..." to unstage)         new file:   .gitmodules         new file:   module/module1         new file:   subrepo

      cat .gitmodules 得到

       [submodule "subrepo"]
               path = subrepo
               url = [subrepo url]
       [submodule "module/module1"]
               path = module/module1
               url = [subrepo1 url]

      这是一份子模块与路径的映射关系图,这份文件很重要,git 根据这份文件去识别 submodule,所以这份文件应该被加入版本控制

    5. 接着运行提交命令,可以看到三个目录都被添加到仓库了,注意子模块下面的文件并没有被添加进去。160000 的含义是这是 Git 中的一种特殊模式,基本上意味着您将提交记录为目录条目而不是子目录或文件。 然后提交到远端,就有了一个 submodule 的仓库 :)

       $ git commit -m "add submodule"
       [master 5c88033] add submodule 3 files changed, 8 insertions(+) create mode 100644 .gitmodules create mode 160000 module/module1 create mode 160000 subrepo
    6. 接下来模拟多人协作,首先新建一个文件夹,运行命令后,会发现 subrepo 以及 module/module1 目录并没有文件。

       git clone [subrepo-master url]
    7. 这时候需要运行命令 git submodule init 去初始化本地配置文件以及 git submodule update 拉取代码。

       $ git submodule init
       Submodule 'module/module1' (https://github.com/xxx/subrepo1.git) registered for path 'module/module1'
       Submodule 'subrepo' (https://github.com/xxx/subrepo.git) registered for path 'subrepo'
       $ git submodule update
       Cloning into 'module/module1'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
       Unpacking objects: 100% (3/3), done.
       Checking connectivity... done.
       Submodule path 'module/module1': checked out '5c47ee69895b8acd3291eb0551f751ba43  488c68'
       Cloning into 'subrepo'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
       Unpacking objects: 100% (3/3), done.
       Checking connectivity... done.
       Submodule path 'subrepo': checked out '1b6f8742270c5affc9fc055ce1bf03907cf9a0f8'
    8. 通过 6、7 两步完成还是太过麻烦,好在有简单的命令,在 clone 那一步运行 git clone --recursive 就会自动完成 6、7两步。

    9. 如果只更改主仓库的代码,那各种操作大家都会。下面主要是子仓库远端修改、子仓库改分支、子仓库本地修改推送远端、主仓库下的子仓库的引用同时被多人修改等等。

    10. 子仓库远端修改

      修改子仓库远端的内容,接着同步到本地。一种方式,进入子仓库目录 git fetch && git merge,另一种方式 git submodule update --remote [子仓库目录]。 运行 git diff,可以看到

      $ git diff
      diff --git a/module/module1 b/module/module1index 5c47ee6..e55e7ef 160000--- a/module/module1+++ b/module/module1
      @@ -1 +1 @@
      -Subproject commit 5c47ee69895b8acd3291eb0551f751ba43488c68
      +Subproject commit e55e7efb44f1c07d23e2deede0a13fa8a953f96d
      diff --git a/subrepo b/subrepoindex 1b6f874..afdc5bf 160000--- a/subrepo+++ b/subrepo
      @@ -1 +1 @@
      -Subproject commit 1b6f8742270c5affc9fc055ce1bf03907cf9a0f8
      +Subproject commit afdc5bf559beacb08032e23d22a2beaa65d3ca9c
    11. 子仓库改分支

      在子仓库远端新建分支 a,然后在主仓库运行命令,再运行 cat .gitmodules 查看,发现 subrepo 多了 branch 指向。运行 git submodule status 可以看到 submodule 的状态。运行 git log -p --submodule 可以查看到子模块的日志修改。同时可以将 branch 指向 tag ,但不支持 commitid。这里有一点,子模块记录的是 commitid 即使指定了 branch,同时它不会主动升级(主动升级会导致每个人的代码不一致)。

      git config -f .gitmodules submodule.subrepo.branch a
      git submodule update --remote
      $ cat .gitmodules
      [submodule "subrepo"]
              path = subrepo
              url = https://xx/subrepo.git
              branch = a
      [submodule "module/module1"]
              path = module/module1
              url = https://xx/subrepo1.git
      $ git submodule status
      +e55e7efb44f1c07d23e2deede0a13fa8a953f96d module/module1 (remotes/origin/HEAD)+afdc5bf559beacb08032e23d22a2beaa65d3ca9c subrepo (remotes/origin/HEAD)

      指向 commitid 的方案是运行如下指令,通过将这个子模块文件夹的 commitid 指定为新的,即可完成指定相应 commitid 的动作。此时观察 .gitmodules,会发现 subrepo 指向的 branch 字段消失。

      cd subrepo
      git checkout fa1317acd ..
      git add subrepo
      git commit ...


      git submodule update
    12. 子仓库本地修改推送远端

    13. 主仓库下的子仓库的引用同时被多人修改

      比如 subrepo 指向的 commitid 是 a,A 成员修改为 b, B 成员修改为 c,这时候就需要去合并代码,让其指向最新的 a1。

      如果 b 和 c 是祖先关系,则 git 会直接快进式合并。下面模拟分叉的情况。

      检出一个本地仓库, git reset --HARD oldcommitid,然后将子模块的代码进行修改,接着添加到主仓库进行提交。接下来运行 git pull,会发现有冲突了。

      $ git pull origin masterFrom https://xx/subrepo-master* branch            master     -> FETCH_HEADwarning: Failed to merge submodule subrepo (commits don't follow merge-base)
      Auto-merging subrepo
      CONFLICT (submodule): Merge conflict in subrepo
      Automatic merge failed; fix conflicts and then commit the result.

      解决此问题的方案是,首先 git diff 查看一下代码

      diff --cc subrepo
      index 4660574,55167f5..0000000--- a/subrepo
      +++ b/subrepo
      diff --git a/module/module1 b/module/module1index e55e7ef..5c47ee6 160000--- a/module/module1+++ b/module/module1@@ -1 +1 @@
      -Subproject commit e55e7efb44f1c07d23e2deede0a13fa8a953f96d
      +Subproject commit 5c47ee69895b8acd3291eb0551f751ba43488c68

      找到冲突的 commitid(其中 4660574 是公有的, 55167f5 是上游的),进入子模块,然后检出为分支 git branch merge1 55167f5 && git merge merge1,如果有冲突,此时就需要手动解决冲突了,解决完成,提交。再回到主目录,查看是否有冲突,对主仓库进行提交。此时再 git pull 则无冲突,然后就可以用 git push --recurse-submodules=on-demand 提交本次修改。

    14. 删除子模块后会发现 .gitmodules 文件内容同时发生了改变。如果需要备份,请提前备份目录

      git submodule deinit module/module1rm -rf .git/modules/modulegit rm -f module/module1vi .git/config


    • foreach,可以在每一个子模块中运行任意命令。例如:保存进度, git submodule foreach 'git stash';切换分支 git submodule foreach 'git checkout -b featureA' 等等,这个可以对子模块统一进行操作管理。

    • git 命令别名,举例:

        $ git config alias.sdiff '!'"git diff && git submodule foreach 'git diff'"
        $ git config alias.spush 'push --recurse-submodules=on-demand'
        $ git config alias.supdate 'submodule update --remote --merge'

    这样运行更新命令的时候,就简化为 git supdate,其他同理。

    • git status 之类的获取的均是主仓库的状态,无法查看子模块的状态。建议 git config --global status.submoduleSummary true。git config --global diff.submodule log 可以查看到子模块的日志


    1. 例如在有子模块的项目中切换分支可能会造成麻烦。 如果你创建一个新分支,在其中添加一个子模块,之后切换到没有该子模块的分支上时,你仍然会有一个还未跟踪的子模块目录,这时候如果不小心提交了这个子模块(git commit -am "message"),就会有问题了。

    2. 对子模块的更新略显复杂,每次操作都需要所有人手动同步更新,增加了学习成本。

    3. 对子模块做了修改,需要先推送子模块再主模块,同时拉取的时候也需要先主模块,再子模块。

    4. 对子模块做本地修改需要先检出分支,否则有可能在 “游离的 HEAD” 上做修改。

    5. 删除子模块,需要的步骤有点复杂。

    6. 如果子模块被高频次更新,会有大量合并代码的工作,参考上面的 10-13

    7. 如果你的同事更新了 submodule,然后更新了父项目中依赖的版本号。你需要在 git pull 之后,调用 git submodule update 来更新 submodule 信息。这儿的坑在于,如果你 git pull 之后,忘记了调用 git submodule update,那么你极有可能再次把旧的submodule 依赖信息提交上去(使用 git submit -am "message" 或者 git add . 提交的人会遇到这种事)。


    1. 不需要获取子模块整个代码库

    2. 主仓库只是获取到了子仓库的引用


    1. https://git-scm.com/book/en/v2/Git-Tools-Submodules

    2. https://medium.com/@porteneuve/mastering-git-submodules-34c65e940407 最后的总结很好


  • Optimization submodule

    2020-11-27 13:33:19
    <h3>Proposition: optimization submodule <p>I think a very cool feature of tensorly would be, just like in PyTorch or SciPy, to have an optimization module with a few usual algorithms often used for ...
  • submodule error

    2020-11-28 04:07:04
    in submodule path 'lib/wheat/connectpkg' </code></pre> <p>from ...
  • ddcctl submodule

    2020-12-26 10:26:38
    I finally got around to integrating <a href="https://github.com/kfix/ddcctl">ddcctl</a> and including it as a submodule to use 's version of <code>DDC</code>. Awkward enough, I see has already ...
  • Submodule dependency

    2020-12-06 22:51:53
    Our app has a proprietary dependency that is maintained as a submodule. Whenever I try to use buck, I get an error: <p>./buckw targets No build file at core/BUCK when resolving target //core:src_...



1 2 3 4 5 ... 20
收藏数 11,106
精华内容 4,442