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:45] 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 29: Line 36:
 git push git push
 </code> </code>
 +
 +==== 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  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> <code bash>
 git clone <git URL>  git clone <git URL> 
 +cd <git repo main folder>
 git submodule update --init git submodule update --init
 </code> </code>
-If we know when clone the main project git that there are submodules we can pull them at the start with **--recursive** keyword:+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> <code bash>
 git clone <git URL> --recursive git clone <git URL> --recursive
 </code> </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.1683038750.txt.gz · Last modified: 2023/05/02 16:45 by admin