User Tools

Site Tools


git_submodules

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
git_submodules [2019/02/27 14:15]
rpjday [File structure of submodules]
git_submodules [2019/02/27 19:14]
rpjday [Overview]
Line 2: Line 2:
  
 The good and the bad of submodules, using Wind River'​s Pulsar Linux as a convenient example. The good and the bad of submodules, using Wind River'​s Pulsar Linux as a convenient example.
 +
 +Stuff to add:
 +
 +  * ''​git config submodule.<​what>​.url PRIVATE_URL''​
  
 ===== Links ===== ===== Links =====
Line 263: Line 267:
 $ $
 </​code>​ </​code>​
-===== Adding submodules (IN PROGRESS) ===== 
  
-==== Adding a submodule -- Part 1 ====+===== Checking status of submodules =====
  
-=== Before adding ​===+<​code>​ 
 +$ git submodule status 
 + ​055865047c63b9c3b213b47a1884924ce0adeda0 layers/​bitbake (1.38.0-10-g055865047) 
 + ​78d4168b29efe5e812c36502a1c300d3d4c45935 layers/​external-binaries (78d4168) 
 + ​0a8c797caa70f517c327c67b15b0d55e902b7c44 layers/​fsl-ls10xx (remotes/​origin/​pulsar-8) 
 + ​4ca2e7474b046fa0bd7813cd6da7cf455733d61c layers/​intel-iot-refkit (2017.07-258-g4ca2e74) 
 + ​1cd38d701a49eade80a04140f70d3383117b9745 layers/​meta-browser (remotes/​origin/​krogoth-266-g1cd38d7) 
 + ​31e3086409b5055b8ce5962a614f1284003c513d layers/​meta-cloud-services (31e3086) 
 + ​8a0f847836671111915088d2838e3ff6f3c7642c layers/​meta-dpdk (tmpfix-20180615) 
 + ​6975858540552012d8082c74b5c5d9db8e260865 layers/​meta-flatpak (6975858) 
 + ​48dae0603506cff9bde674755d963e5cf3e75244 layers/​meta-gateway (48dae06) 
 + ​fec5d45ec3978d4b7c9649bee45fe58f914bcee4 layers/​meta-intel (9.0-sumo-2.5-8-gfec5d45e) 
 + ​6039a7a8a9a0cad4e32736be3a05a529b65e126a layers/​meta-iot-cloud (remotes/​origin/​pulsar-x) 
 + ​aa276b00d8a6bbffffd59d1980153c99521ce6ea layers/​meta-java (tmpfix-20180615) 
 + ​a4056a96ecc857b1d675b89dc35cf9ed8a876f80 layers/​meta-openembedded (tmpfix-20180618) 
 + ​62f03f7d42f784923a8b02ce9d30d62d6552a22b layers/​meta-overc (tmpfix-20180615) 
 + ​b2da4618b0ac2ad7dbc26387cad4c03796f8a06e layers/​meta-raspberrypi (remotes/​origin/​krogoth-354-gb2da461) 
 + ​fb838242ad1b5c7caf5104cb3560dd6e655f1d92 layers/​meta-secure-core (heads/​master) 
 + ​f9c5e2022b54097474e46d9efb54080bd0e4d606 layers/​meta-security (remotes/​origin/​pulsar-8-186-gf9c5e20) 
 + ​024d0f5e404cb29789c2bba90aa72efd00f2a0e6 layers/​meta-up-board (remotes/​origin/​pulsar-x) 
 + ​8344dd9e9f55a5ea81f9c57c74bd9a8b9a04e8ad layers/​meta-virtualization (tmpfix-20180615) 
 + ​b34e86b4ee13d53f09d558e613d5b66c845edde6 layers/​oe-core (uninative-2.1-109-gb34e86b4ee) 
 + ​b29b384eae4a40933d07cc64c51e890c289d9621 layers/​oe-meta-go (heads/​ovp7-20150902) 
 + ​3998487c37639a484fde00fd66121f7660e06c56 layers/​qemuarm (remotes/​origin/​LB13_8.0_RCPL0001) 
 + ​d902f0eeec53662e30cc1ab98c5f296496d29086 layers/​qemuarma9 (remotes/​origin/​master) 
 + ​032d6a6f94297707acd228c96313a603c5702a38 layers/​vendor-proprietary (032d6a6) 
 + ​02e0f675db192294044ffbce6146ec25f34ffdba layers/​wrlabs-integration (remotes/​origin/​master-oci-fli-100-g02e0f67) 
 + ​cd816cf2bfcf0e917e02f4cbd48800ee5a583f33 layers/​xilinx-zynq (remotes/​origin/​pulsar-8) 
 + ​aabcd6ab2b69383ba4b41b7bebfc600dd3b166dd overc-installer (remotes/​origin/​pulsar-7.0-224-gaabcd6a) 
 +
 +</​code>​ 
 +===== Adding submodules ​===== 
 + 
 +==== The initial repository ==== 
 + 
 +Add a submodule to the repo for the "Pro Git" book, which is clean and has no current submodules:
  
 <​code>​ <​code>​
 $ git status $ git status
 On branch master On branch master
-Your branch is up-to-date with 'origin/​master'​. +Your branch is up to date with 'rpjday/​master'​.
 nothing to commit, working tree clean nothing to commit, working tree clean
 $ $
 </​code>​ </​code>​
  
-=== Adding a submodule ===+<​code>​ 
 +$ git submodule status 
 +
 +</​code>​ 
 + 
 + 
 +==== Adding a submodule ===
  
 <​code>​ <​code>​
 $ git submodule add https://​github.com/​boostorg/​coroutine2 $ git submodule add https://​github.com/​boostorg/​coroutine2
-Cloning into '/​home/​rpjday/​ebooks/​progit/​pg2/​coroutine2'​... +Cloning into '/​home/​rpjday/​ebooks/​progit/​progit2/​coroutine2'​..
-remote: Counting objects: ​1161, done. +remote: Enumerating objects: 2, done
-remote: Compressing objects: 100% (13/13), done. +remote: Counting objects: ​100% (2/2), done. 
-remote: Total 1161 (delta ​6), reused ​16 (delta ​6), pack-reused ​1140 +remote: Compressing objects: 100% (2/2), done. 
-Receiving objects: 100% (1161/1161), 289.57 KiB | 969.00 KiB/s, done. +remote: Total 1189 (delta ​0), reused ​(delta ​0), pack-reused ​1187 
-Resolving deltas: 100% (690/690), done.+Receiving objects: 100% (1189/1189), 292.30 KiB | 1.82 MiB/s, done. 
 +Resolving deltas: 100% (703/703), done.
 $ $
 </​code>​ </​code>​
  
-=== The end result ===+Note that this has //not// committed the new submodule yet. So what //has// it done?
  
-Note the submodule is already staged, ready for commit:+==== The situation thus far ====
  
 <​code>​ <​code>​
 $ git status $ git status
 On branch master On branch master
-Your branch is up-to-date with 'origin/​master'​.+Your branch is up to date with 'rpjday/​master'​.
  
 Changes to be committed: Changes to be committed:
Line 304: Line 348:
  
  new file:   ​.gitmodules  new file:   ​.gitmodules
- new file:   ​coroutine2 ​      <-- file??+ new file:   ​coroutine2
  
 $ $
 </​code>​ </​code>​
  
-=== What's there? ===+<​code>​ 
 +$ git submodule status 
 + ​0233d35081de5b669c60ef8ec5a53854e1b2a577 coroutine2 (heads/​develop) 
 +
 +</​code>​ 
 + 
 +The new ''​.gitmodules''​ file: 
 + 
 +<​code>​ 
 +$ cat .gitmodules  
 +[submodule "​coroutine2"​] 
 + path coroutine2 
 + url https://​github.com/​boostorg/​coroutine2 
 +</​code>​ 
 + 
 +The content of the new submodule working tree:
  
 <​code>​ <​code>​
Line 322: Line 381:
 │   ├── images │   ├── images
 │   │   ├── event_model.dia │   │   ├── event_model.dia
 +│   │   ├── event_model.png
 ... etc etc ... ... etc etc ...
 </​code>​ </​code>​
  
-==== Adding a submodule -- what just happened? ==== +The content of the new submodule's Git directory:
- +
-=== The new .gitmodules file === +
- +
-The new ''​.gitmodules''​ file, which is version-controlled just like your other files so other developers can get the submodules when they clone the "​superproject"​:+
  
 <​code>​ <​code>​
-[submodule "coroutine2"] +$ ls -lF .git/​modules/​coroutine2/ 
- path = coroutine2 +total 48 
- url = https://github.com/​boostorg/​coroutine2 +drwxrwxr-x. 2 rpjday rpjday 4096 Feb 27 09:31 branches/ 
-</​code>​ +-rw-rw-r--1 rpjday rpjday ​ 297 Feb 27 09:31 config 
- +-rw-rw-r--. 1 rpjday rpjday ​  73 Feb 27 09:31 description 
-=== git diff === +-rw-rw-r--. 1 rpjday rpjday ​  24 Feb 27 09:31 HEAD 
- +drwxrwxr-x. 2 rpjday rpjday 4096 Feb 27 09:31 hooks/ 
-There is no current ''​git diff''​ since adding the submodule has already been staged+-rw-rw-r--. 1 rpjday rpjday 7299 Feb 27 09:33 index 
- +drwxrwxr-x. 2 rpjday rpjday 4096 Feb 27 09:31 info/ 
-<​code>​ +drwxrwxr-x. 3 rpjday rpjday 4096 Feb 27 09:31 logs/ 
-$ git diff+drwxrwxr-x. 4 rpjday rpjday 4096 Feb 27 09:31 objects/ 
 +-rw-rw-r--. 1 rpjday rpjday 1161 Feb 27 09:31 packed-refs 
 +drwxrwxr-x. 5 rpjday rpjday 4096 Feb 27 09:31 refs/
 $ $
 </​code>​ </​code>​
  
-but examine what's been staged:+==== Running "git diff" ====
  
 <​code>​ <​code>​
-$ git diff --staged+$ git diff --cached
 diff --git a/​.gitmodules b/​.gitmodules diff --git a/​.gitmodules b/​.gitmodules
 new file mode 100644 new file mode 100644
Line 361: Line 419:
 diff --git a/​coroutine2 b/​coroutine2 diff --git a/​coroutine2 b/​coroutine2
 new file mode 160000 new file mode 160000
-index 0000000..fc3cb67+index 0000000..0233d35
 --- /dev/null --- /dev/null
 +++ b/​coroutine2 +++ b/​coroutine2
 @@ -0,0 +1 @@ @@ -0,0 +1 @@
-+Subproject commit ​fc3cb675279708a48eb31ad2d53461b0ed4c5540++Subproject commit ​0233d35081de5b669c60ef8ec5a53854e1b2a577
 $ $
 </​code>​ </​code>​
  
-You can also use the ''​%%--%%submodule''​ option:+Abbreviated form:
  
 <​code>​ <​code>​
Line 382: Line 440:
 +       path = coroutine2 +       path = coroutine2
 +       url = https://​github.com/​boostorg/​coroutine2 +       url = https://​github.com/​boostorg/​coroutine2
-Submodule coroutine2 0000000...fc3cb67 ​(new submodule)+Submodule coroutine2 0000000...0233d35 ​(new submodule)
 $ $
 </​code>​ </​code>​
Line 389: Line 447:
  
 <​code>​ <​code>​
-$ git commit -am "added coroutine2 submodule"​ +$ git commit -a -m "added coroutine2 submodule"​ 
-[master ​bec4c94] added coroutine2 submodule+[master ​a7561cb] added coroutine2 submodule
  2 files changed, 4 insertions(+)  2 files changed, 4 insertions(+)
  ​create mode 100644 .gitmodules  ​create mode 100644 .gitmodules
- ​create mode 160000 coroutine2 ​    ​<-- weird mode for submodule+ ​create mode 160000 coroutine2 ​   <--- weird mode representing ​submodule
 $ $
 </​code>​ </​code>​
Line 401: Line 459:
 <​code>​ <​code>​
 $ git push origin master $ git push origin master
-</​code>​ 
- 
-===== Under the hood ===== 
- 
-The submodule directory has a //file// named ''​.git'',​ not a //​directory//,​ which refers to submodule information in the superproject:​ 
- 
-<​code>​ 
-$ cat coroutine2/​.git 
-gitdir: ../​.git/​modules/​coroutine2 
-$ 
-</​code>​ 
- 
-From the superproject,​ you can see the information for each submodule: 
- 
-<​code>​ 
-$ ls -l .git/​modules/​coroutine2/​ 
-total 48 
-drwxrwxr-x. 2 rpjday rpjday 4096 Feb 13 15:37 branches 
--rw-rw-r--. 1 rpjday rpjday ​ 297 Feb 13 15:37 config 
--rw-rw-r--. 1 rpjday rpjday ​  73 Feb 13 15:37 description 
--rw-rw-r--. 1 rpjday rpjday ​  24 Feb 13 15:37 HEAD 
-drwxrwxr-x. 2 rpjday rpjday 4096 Feb 13 15:37 hooks 
--rw-rw-r--. 1 rpjday rpjday 7299 Feb 13 15:38 index 
-drwxrwxr-x. 2 rpjday rpjday 4096 Feb 13 15:37 info 
-drwxrwxr-x. 3 rpjday rpjday 4096 Feb 13 15:37 logs 
-drwxrwxr-x. 4 rpjday rpjday 4096 Feb 13 15:37 objects 
--rw-rw-r--. 1 rpjday rpjday 1174 Feb 13 15:37 packed-refs 
-drwxrwxr-x. 5 rpjday rpjday 4096 Feb 13 15:37 refs 
-$ 
-</​code>​ 
- 
-===== Cloning a project with submodules ===== 
- 
-If you don't want to populate the submodule directories:​ 
- 
-<​code>​ 
-$ git clone https://​github.com/​boostorg/​boost 
-</​code>​ 
- 
-If you want to populate the submodule diredctories:​ 
- 
-<​code>​ 
-$ git clone --recurse-submodules https://​github.com/​boostorg/​boost 
-</​code>​ 
- 
-Populate all submodules after the fact: 
- 
-<​code>​ 
-$ git submodule update --init --recursive 
 </​code>​ </​code>​
  
  
git_submodules.txt · Last modified: 2019/02/27 19:14 by rpjday