User Tools

Site Tools


git:git-submodules

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
git:git-submodules [2023/05/02 16:39] admingit:git-submodules [2024/12/12 08:44] (current) admin
Line 2: Line 2:
  
 If you clone a git repo inside you git, the best way to handle it is to use modules (sub modules). If you clone a git repo inside you git, the best way to handle it is to use modules (sub modules).
-To define it you can use :+ 
 +==== Create a submodule ==== 
 + 
 +To define a submodule you can use :
  
 <code bash> <code bash>
Line 15: Line 18:
 git submodule add https://gitlab.com/bnzr/python_control_coppeliasim.git external/python_control_coppeliasim/ git submodule add https://gitlab.com/bnzr/python_control_coppeliasim.git external/python_control_coppeliasim/
 </code>   </code>  
 +
 +==== List all submodules ====
  
 We can list the submodules with : We can list the submodules with :
Line 22: Line 27:
  
 Information on submodules can be found in  **.gitmodules** and **.git/config** of the main project git Information on submodules can be found in  **.gitmodules** and **.git/config** of the main project git
 +
 +==== Content changes in submodules ==== 
  
 If we add the changes, commit and push , the content of submodules will not been added in the main project git, but information on how to retrieve it will be stored. In our example we push the changes : If we add the changes, commit and push , the content of submodules will not been added in the main project git, but information on how to retrieve it will be stored. In our example we push the changes :
Line 30: Line 37:
 </code> </code>
  
-In another computer we can clone the main project repo :+==== Clone git repo with submodules ==== 
 + 
 +In another computer we can simply clone the main project repo and we will see that there is nothing in the submodule. The content of the submodules can be pulled by  
 +<code bash> 
 +git clone <git URL>  
 +cd <git repo main folder> 
 +git submodule update --init 
 +</code> 
 +If we know when cloning the main project git that there are submodules we can pull them at the start with **--recursive** keyword: 
 +<code bash> 
 +git clone <git URL> --recursive 
 +</code> 
 + 
 +if after pulling the main repo, some new submodules are created and if they are empty, their content can be retrieved with : 
 +<code bash> 
 +git submodule foreach git restore --staged . 
 +git submodule foreach git restore . 
 +</code> 
 + 
 +==== Working with a particular submodule (not all) ==== 
 + 
 +If the main git repo contains many submodules, it can be interesting to work only on one particular submodule. 
 +For example, if after cloning the main git repo the submodule contains nothing, it can be cloned independently of the others submodules.  
 +Suppose the path to submodule (from main repo path) is /path/to/mysubmodule, to clone it type : 
 +<code bash> 
 +git submodule init /path/to/mysubmodule 
 +git submodule update -- /path/to/mysubmodule 
 +</code> 
 +If the submodule is not in the correct branch, these commands can be used to list the branches and set to the correct one (ex master) 
 +<code bash> 
 +git -C /path/to/mysubmodule branch 
 +git -C /path/to/mysubmodule checkout master 
 +</code> 
 +In general a git **command** on submodule can be acheived from main git repo by : 
 +<code bash> 
 +git -C /path/to/mysubmodule command 
 +</code> 
 + 
  
git/git-submodules.1683038397.txt.gz · Last modified: 2023/05/02 16:39 by admin