git:git-submodules
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
git:git-submodules [2023/05/02 16:30] – created admin | git: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 | + | |
+ | ==== Create a submodule ==== | ||
+ | |||
+ | To define | ||
<code bash> | <code bash> | ||
Line 9: | Line 12: | ||
Where **git URL** is the URL of the git repo and path is where this git repo is stored in the main git. | Where **git URL** is the URL of the git repo and path is where this git repo is stored in the main git. | ||
- | For example we are working in the git repo **submodules_main** and we would like to use an external git (URL=https:// | + | For example we are working in the git repo **submodules_main** and we would like to use an external git at URL https:// |
<code bash> | <code bash> | ||
mkdir external | mkdir external | ||
+ | git clone https:// | ||
git submodule add https:// | git submodule add https:// | ||
</ | </ | ||
+ | |||
+ | ==== List all submodules ==== | ||
+ | |||
+ | We can list the submodules with : | ||
+ | <code bash> | ||
+ | git submodule foreach --quiet 'echo $name' | ||
+ | </ | ||
+ | |||
+ | Information on submodules can be found in **.gitmodules** and **.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 : | ||
+ | <code bash> | ||
+ | git add --all | ||
+ | git commit -m "add python_control_coppeliasim external git repo" | ||
+ | git push | ||
+ | </ | ||
+ | |||
+ | ==== 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 | ||
+ | </ | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | 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 . | ||
+ | </ | ||
+ | |||
+ | ==== 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 / | ||
+ | <code bash> | ||
+ | git submodule init / | ||
+ | git submodule update -- / | ||
+ | </ | ||
+ | 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 / | ||
+ | git -C / | ||
+ | </ | ||
+ | In general a git **command** on submodule can be acheived from main git repo by : | ||
+ | <code bash> | ||
+ | git -C / | ||
+ | </ | ||
+ | |||
+ | |||
git/git-submodules.1683037846.txt.gz · Last modified: 2023/05/02 16:30 by admin