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
Last revision Both sides next revision
git_submodules [2019/02/27 14:28]
rpjday [Adding a submodule -- Part 1]
git_submodules [2019/02/27 19:14]
rpjday [Overview]
Line 3: Line 3:
 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 301: Line 304:
 ==== The initial repository ==== ==== The initial repository ====
  
-Add a submodule to the repo for the "Pro Git" book, which has no current submodules:+Add a submodule to the repo for the "Pro Git" book, which is clean and has no current submodules: 
 + 
 +<​code>​ 
 +$ git status 
 +On branch master 
 +Your branch is up to date with '​rpjday/​master'​. 
 +nothing to commit, working tree clean 
 +
 +</​code>​
  
 <​code>​ <​code>​
Line 309: Line 320:
  
  
-=== Adding a submodule ===+==== 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 335: Line 347:
  
  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 353: Line 380:
 │   ├── 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 392: Line 418:
 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 413: Line 439:
 +       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 420: Line 446:
  
 <​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 432: Line 458:
 <​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