# git-repo This is a guide to understand git-repo. Scripts in ERPLibre use git-repo automatically. [git-repo of Google](https://code.google.com/archive/p/git-repo) is used to manage all git repositories under licence [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html). ## Setup repo # git-repo Ce guide explique le fonctionnement de git-repo. Les scripts dans ERPLibre utilisent git-repo automatiquement. [git-repo de Google](https://code.google.com/archive/p/git-repo) est utilisé pour gérer tous les dépôts git sous licence [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html). ## Configurer repo ```bash curl https://storage.googleapis.com/git-repo-downloads/repo > .venv.erplibre/bin/repo ``` ## prod ## prod ```bash .venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b master .venv.erplibre/bin/repo sync -c -j $(nproc --all) ``` ## dev ## dev ```bash .venv.erplibre/bin/repo init -u https://github.com/ERPLibre/ERPLibre -b 12.0_repo -m ./manifest/default.dev.xml .venv.erplibre/bin/repo sync -c -j $(nproc --all) ``` ## local dev [Guide to setup locally git](https://railsware.com/blog/taming-the-git-daemon-to-quickly-share-git-repository/). ## dev local [Guide pour configurer git localement](https://railsware.com/blog/taming-the-git-daemon-to-quickly-share-git-repository/). ```bash git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose & .venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.dev.xml .venv.erplibre/bin/repo sync -c -j $(nproc --all) -m ./manifest/default.dev.xml ``` # Create Manifest A [Manifest](https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md), is an XML file managed by git-repo to generate a repo. ## Make a new version of prod It freezes all repo, from dev to prod. This will add revision git hash in the manifest. # Créer un Manifest Un [Manifest](https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.md) est un fichier XML géré par git-repo pour générer un dépôt. ## Créer une nouvelle version de prod Cela fige tous les dépôts, du dev vers la prod. Cela ajoutera le hash de révision git dans le manifest. ```bash .venv.erplibre/bin/repo manifest -r -o ./default.xml ``` Commit. Committez. ```bash git commit -am "[#ticket] subject: short sentence" ``` ### Mix prod and dev to create a stage version When dev contains specific revision with default revision, you need to replace default revision with prod revision and keep specific version: ### Mélanger prod et dev pour créer une version de staging Lorsque dev contient une révision spécifique avec la révision par défaut, vous devez remplacer la révision par défaut par la révision prod et garder la version spécifique : ```bash ./script/git/git_merge_repo_manifest.py --input "./manifest/default.dev.xml;./default.xml" --output ./manifest/default.staged.xml git commit -am "Updated manifest/default.staged.xml" git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose & .venv.erplibre/bin/repo init -u git://127.0.0.1:9418/ -b $(git rev-parse --abbrev-ref HEAD) -m ./manifest/default.staged.xml .venv.erplibre/bin/repo sync -c -j $(nproc --all) -m ./manifest/default.staged.xml .venv.erplibre/bin/repo manifest -r -o ./default.xml ``` ## Create a dev version ## Créer une version dev ```bash .venv.erplibre/bin/repo manifest -o ./manifest/default.dev.xml ``` Commit. Committez. ```bash git commit -am "[#ticket] subject: short sentence" ``` ## Useful commands ### Search all repos with a specific branch name ## Commandes utiles ### Rechercher tous les dépôts avec un nom de branche spécifique ```bash .venv.erplibre/bin/repo forall -pc "git branch -a|grep BRANCH" ``` ### Search missing branch in all repos ### Rechercher les branches manquantes dans tous les dépôts ```bash .venv.erplibre/bin/repo forall -pc 'git branch -a|(grep /BRANCH$||echo "no match")|grep "no match"' ``` ### Search changed file in all repos ### Rechercher les fichiers modifiés dans tous les dépôts ```bash .venv.erplibre/bin/repo forall -pc "git status -s" ``` ### Clean all Before cleaning, check changed file in all repos. ### Tout nettoyer Avant de nettoyer, vérifiez les fichiers modifiés dans tous les dépôts. ```bash .venv.erplibre/bin/repo forall -pc "git status -s" ``` Check the changed branch, and push changed if needed. Vérifiez les branches modifiées, et poussez les changements si nécessaire. ```bash ./script/git/git_show_code_diff_repo_manifest.py -m ./manifest/default.dev.xml ``` Maybe, some version diverge from your manifest. Simply clean all and relaunch your installation. Peut-être que certaines versions divergent de votre manifest. Nettoyez simplement tout et relancez votre installation. ```bash ./script/git/clean_repo_manifest.sh ```