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:29] – [The initial repository] rpjdaygit_submodules [2019/02/27 19:14] (current) – [Overview] rpjday
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 321: Line 325:
 <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 343: 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 361: 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 400: 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 421: 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 428: 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 440: 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.1551277786.txt.gz
  • Last modified: 2019/02/27 14:29
  • by rpjday