prog:git
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| prog:git [2025/10/20 15:34] – [Génération de la clé] : utilisation de sign only root | prog:git [2025/11/24 11:32] (Version actuelle) – Ajout de "Retravailler l'historique" root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | =====Téléchargement===== | ||
| + | ====Windows==== | ||
| + | [[https:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| =====Dépôts===== | =====Dépôts===== | ||
| - | ====Cloner et configurer d'un dépôt==== | + | |
| - | <code bash> | + | ====Configurer==== |
| - | git clone https:// | + | |
| - | </ | + | ===Options globales=== |
| - | Mais surtout, ne pas oublier (l' | + | |
| + | Ne pas oublier (l' | ||
| <code bash> | <code bash> | ||
| Ligne 56: | Ligne 63: | ||
| [[https:// | [[https:// | ||
| - | ===Ne pas télécharger l' | ||
| - | Pratique pour ne faire que de la compilation et alléger le téléchargement. | ||
| - | Ajouter '' | ||
| - | ===Télécharger uniquement une seule branche=== | + | =====Clés publiques |
| - | git clone --single-branch --branch llvmorg-8.0.0 https:// | + | |
| - | ====Un dépôt global ou un dépôt | + | Pour signer les commits, il faut commencer |
| - | C'est l' | + | |
| - | Ici, je suppose qu'il y a une équipe d'une trentaine | + | ====Génération |
| - | De par mon expérience, | + | <code bash> |
| + | gpg --full-generate-key | ||
| + | </code> | ||
| - | ^Problématique | + | Choisir |
| - | ^ ::: ^ X | + | |
| - | | Nombres de dépôts git | {{ : | + | |
| - | | Gestion des submodules | + | |
| - | | ::: | {{ : | + | |
| - | | ::: | {{ : | + | |
| - | | Travail en groupe | + | |
| - | | ::: | {{ : | + | |
| - | | ::: | {{ : | + | |
| - | Conclusion : si l' | + | ====Afficher la clé publique |
| - | ====Changer l' | ||
| - | Pour connaître l' | ||
| <code bash> | <code bash> | ||
| - | git remote | + | gpg --list-secret-keys --keyid-format LONG |
| </ | </ | ||
| - | Pour la modifier | + | Avec '' |
| + | |||
| + | Pour exporter | ||
| <code bash> | <code bash> | ||
| - | git remote set-url origin https:// | + | gpg --armor --export YYYYYYYYY |
| </ | </ | ||
| - | [[https:// | + | Pour exporter la clé privée |
| - | ====Déplacer un dossier vers au nouveau dépôt==== | + | <code bash> |
| - | <WRAP center round important 60%> | + | gpg --export-secret-keys YYYYYYYYY > file.key |
| - | Il faut créer un double du clone du dépôt car c'est le dossier du dépôt en cours qui va être converti vers un nouveau dépôt. | + | </code> |
| - | </WRAP> | + | |
| - | [[https:// | + | ====Configurer |
| - | ====Fusionner deux dépôts en un seul==== | + | Pour importer une clé privée : |
| - | Depuis le projet A : | + | <code bash> |
| + | gpg --import file.key | ||
| + | </ | ||
| + | Si on souhaite ajouter la signature des commits pour tous les projets. | ||
| <code bash> | <code bash> | ||
| - | git remote add -f Bproject path/to/B | + | git config |
| - | git merge -s ours --no-commit --allow-unrelated-histories Bproject/ | + | git config |
| - | rm -Rf path/to/B | + | |
| - | git read-tree --prefix=path/ | + | |
| - | git commit | + | |
| </ | </ | ||
| - | Supprimer | + | ====Mettre à jour la clé==== |
| + | |||
| + | Il faut connaître | ||
| <code bash> | <code bash> | ||
| - | git add .gitmodules | + | gpg --list-keys --keyid-format=long |
| - | git commit | + | |
| </ | </ | ||
| - | [[https:// | + | Le numéro de la clé est celui du pub après l' |
| - | Ou | + | < |
| + | pub | ||
| + | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
| + | uid [ unknown] USERNAME < | ||
| + | sub | ||
| + | |||
| + | ====Date d' | ||
| + | |||
| + | Pour mettre à jour la date d' | ||
| <code bash> | <code bash> | ||
| - | cd main | + | gpg --edit-key KEY_ID |
| - | # Cette commande doit impérativement être lancée depuis la racine du dépôt git et pas à l' | + | list |
| - | git fetch ../other master: | + | key 0 |
| - | git checkout tmp | + | expire |
| - | git filter-branch | + | key 1 |
| - | ' | + | expire |
| - | | + | save |
| - | git update-index --index-info && | + | |
| - | mv " | + | |
| - | git rebase master | + | |
| - | git checkout master | + | |
| - | git merge tmp | + | |
| - | git branch -d tmp | + | |
| - | git update-ref -d refs/ | + | |
| </ | </ | ||
| - | [[https:// | + | Ne pas choisir une date d' |
| + | Pour la mettre à jour sur GitHub, il faut supprimer la clé publique précédente avant de la rajouter. Sinon GitHub détecte que la clé publique a déjà été importée mais il ne détecte pas le changement de date. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ====Cloner==== | ||
| + | |||
| + | <code bash> | ||
| + | git clone https:// | ||
| + | </ | ||
| + | |||
| + | * Ne pas télécharger l' | ||
| + | |||
| + | Pratique pour ne faire que de la compilation et alléger le téléchargement. | ||
| + | |||
| + | Ajouter '' | ||
| + | |||
| + | * Télécharger uniquement une seule branche | ||
| + | |||
| + | git clone --single-branch --branch llvmorg-8.0.0 https:// | ||
| - | ====Dupliquer un dépôt==== | + | ====Dupliquer un dépôt |
| Il faut commencer par le cloner si ce n'est pas déjà fait. | Il faut commencer par le cloner si ce n'est pas déjà fait. | ||
| Ligne 163: | Ligne 180: | ||
| [[https:// | [[https:// | ||
| + | |||
| + | =====Submodules===== | ||
| + | |||
| + | ====Supprimer un submodule==== | ||
| + | |||
| + | <code bash> | ||
| + | git submodule deinit < | ||
| + | git rm < | ||
| + | git commit -m " | ||
| + | rm -rf .git/ | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ====Changer l' | ||
| + | |||
| + | <code bash> | ||
| + | git submodule set-url -- < | ||
| + | </ | ||
| =====Branches===== | =====Branches===== | ||
| + | |||
| ====Mettre à jour une branche qui s'est éloignée du maître==== | ====Mettre à jour une branche qui s'est éloignée du maître==== | ||
| + | |||
| [[https:// | [[https:// | ||
| Ligne 222: | Ligne 260: | ||
| Il est interdit d' | Il est interdit d' | ||
| + | |||
| + | ====Se resynchroniser après qu'un projet ait accepté la pull request==== | ||
| + | |||
| + | Ou le syndrome github du '' | ||
| + | <code bash> | ||
| + | git remote add upstream git:// | ||
| + | git fetch upstream | ||
| + | git checkout master | ||
| + | git merge upstream/ | ||
| + | </ | ||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| =====Commit===== | =====Commit===== | ||
| + | |||
| ====Tags==== | ====Tags==== | ||
| + | |||
| Suppression d'un tag déjà push | Suppression d'un tag déjà push | ||
| <code bash> | <code bash> | ||
| Ligne 237: | Ligne 290: | ||
| ====Annulation d'une modification non encore " | ====Annulation d'une modification non encore " | ||
| + | |||
| <code bash> | <code bash> | ||
| git checkout -- < | git checkout -- < | ||
| Ligne 242: | Ligne 296: | ||
| ====Afficher les différences==== | ====Afficher les différences==== | ||
| + | |||
| Avant '' | Avant '' | ||
| <code bash> | <code bash> | ||
| Ligne 255: | Ligne 310: | ||
| ====Trouver le commit à l' | ====Trouver le commit à l' | ||
| + | |||
| <code bash> | <code bash> | ||
| git bisect start | git bisect start | ||
| Ligne 283: | Ligne 339: | ||
| Il est théoriquement inutile de supprimer le dossier de compilation et de repartir à chaque fois à 0. Mais, parfois, le système de compilation (autotools) se trompe dans les dépendances et ne recompile pas tout ce qui devrait l' | Il est théoriquement inutile de supprimer le dossier de compilation et de repartir à chaque fois à 0. Mais, parfois, le système de compilation (autotools) se trompe dans les dépendances et ne recompile pas tout ce qui devrait l' | ||
| - | ====Se resynchroniser après qu'un projet ait accepté la pull request==== | + | ====Importer |
| - | Ou le syndrome github du '' | + | |
| - | <code bash> | + | |
| - | git remote add upstream git:// | + | |
| - | git fetch upstream | + | |
| - | git checkout master | + | |
| - | git merge upstream/ | + | |
| - | </ | + | |
| - | [[https:// | + | |
| - | [[https:// | ||
| - | |||
| - | ====Changer le message de tous les commit automatiquement==== | ||
| - | git filter-branch -f --msg-filter 'sed " | ||
| - | Cela enlève toutes les lignes commençant par '' | ||
| - | |||
| - | ====Importer un commit depuis un autre dépôt==== | ||
| Il faut ajouter le nouveau dépôt, faire un fetch puis utiliser la commande '' | Il faut ajouter le nouveau dépôt, faire un fetch puis utiliser la commande '' | ||
| Ligne 317: | Ligne 358: | ||
| git cherry-pick -Xrename-threshold=5% -x SHA | git cherry-pick -Xrename-threshold=5% -x SHA | ||
| </ | </ | ||
| + | |||
| ====Importer seulement un fichier d'un commit==== | ====Importer seulement un fichier d'un commit==== | ||
| + | |||
| <code bash> | <code bash> | ||
| git show SHA -- file1.txt file2.txt | git apply - | git show SHA -- file1.txt file2.txt | git apply - | ||
| Ligne 341: | Ligne 384: | ||
| Mais attention, en cas de signature avec une clé GPG, la date du commit sera toujours l' | Mais attention, en cas de signature avec une clé GPG, la date du commit sera toujours l' | ||
| - | =====Subtree===== | ||
| - | Les subtree utilisent les '' | ||
| - | ====Ajout d'un subtree==== | + | ====Signer tous les commits existants==== |
| - | <code bash> | + | |
| - | git remote add -f name url_repository | + | |
| - | git subtree add --prefix folder url_repository branch | + | |
| - | </ | + | |
| - | avec : | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | Dans le cas d'une architecture '' | + | Cela réécrit tout l'arbre git. |
| - | '' | + | |
| + | git push -f | ||
| - | ====pusher un subtree==== | + | [[https:// |
| - | Faire un commit de façon traditionnelle. | + | |
| - | La technique consiste à '' | + | ====Avoir tous les enfants d'un commit==== |
| - | | + | <code bash> |
| + | find_descendants() { | ||
| + | local sha=$1 | ||
| + | line=$(git rev-list --all --children | grep ^$sha) | ||
| - | Mais en faisant simplement çà, on se retrouve avec des commits différents entre le dépot principal et le dépot | + | if [[ $line == *" "* ]]; then |
| + | children=$(echo $line | cut -d' ' | ||
| + | for child in $children; do | ||
| + | echo $child | ||
| + | find_descendants $child | ||
| + | done | ||
| + | fi | ||
| + | } | ||
| - | ====Récupérer les modifications d'une branche==== | + | find_descendants $1 |
| + | </ | ||
| - | git subtree pull --prefix=folder remote_name branch | + | =====État du dépôt===== |
| - | Et c'est très moche dans l' | + | ====Si des fichiers ont été modifiés==== |
| - | {{:prog:git: | + | <code bash> |
| + | if [[ ! -z "$(git status --porcelain --ignore-submodules)" | ||
| + | then | ||
| + | echo "Some files has been modified." | ||
| + | exit 1 | ||
| + | fi; | ||
| + | </ | ||
| - | En plus, dans le '' | + | Pour utiliser |
| - | Je ne comprends pas pourquoi les '' | + | ====Si des fichiers non ignorés ont été ajoutés==== |
| - | [[https:// | + | <code bash> |
| + | if [ -n "$(git ls-files --others --exclude-standard)" | ||
| + | </code> | ||
| - | [[https:// | + | =====Maintenance===== |
| - | [[https:// | + | ====Changer l' |
| - | =====Historique===== | + | Pour connaître |
| - | ====Chercher dans le code sur l'ensemble des commits==== | + | |
| - | git grep < | + | |
| - | Attention, cela cherche dans tous les fichiers, pas uniquement dans les modifications du commit. | + | |
| - | + | ||
| - | ====Chercher dans le code uniquement les modifications==== | + | |
| - | git log -S"a chercher" | + | |
| - | + | ||
| - | ====Trouver le commit qui supprime un fichier==== | + | |
| - | Il n'y a pas moyen. Mais on peut retrouver tous les commits modifiant un fichier précis. | + | |
| - | git log --full-history -- your_file | + | |
| - | Le dernier sera celui l' | + | |
| - | + | ||
| - | ====Chercher une modification également dans les sous-modules==== | + | |
| - | git submodule foreach git log -S" | + | |
| - | + | ||
| - | ====Annuler temporairement des modifications==== | + | |
| - | Les modifications sont stockés sous forme d'une liste FILO. | + | |
| - | * Stocke les modifications dans une zone '' | + | |
| <code bash> | <code bash> | ||
| - | git stash push -m nom_memoire fichiers | + | git remote |
| </ | </ | ||
| - | * Restaure les modifications | + | Pour la modifier : |
| <code bash> | <code bash> | ||
| - | git stash apply | + | git remote set-url origin https:// |
| - | # Il est possible d' | + | |
| - | git stash drop | + | |
| - | + | ||
| - | # Ou il est possible de tout faire en même temps. | + | |
| - | git stash pop | + | |
| </ | </ | ||
| - | ====Ignorer certains commits avec blame==== | + | [[https:// |
| - | Inscrire les numéros de commit (un par ligne) dans un fichier '' | + | |
| - | ====Modifier une liste de commits==== | + | ====Déplacer un dossier vers au nouveau dépôt==== |
| - | Applique | + | <WRAP center round important 60%> |
| + | Il faut créer un double du clone du dépôt car c'est le dossier du dépôt en cours qui va être converti vers un nouveau dépôt. | ||
| + | </ | ||
| - | <code bash> | + | [[https:// |
| - | git filter-branch | + | |
| - | | + | |
| - | grep .cpp)' -- < | + | |
| - | </code> | + | |
| - | [[https:// | + | ====Fusionner deux dépôts en un seul et en conservant l' |
| - | =====État du dépôt===== | + | Depuis le projet A : |
| - | ====bash==== | + | < |
| + | git remote add -f Bproject path/to/B | ||
| + | git merge -s ours --no-commit --allow-unrelated-histories Bproject/ | ||
| + | rm -Rf path/to/B | ||
| + | git read-tree --prefix=path/to/B -u Bproject/ | ||
| + | git commit -m "Merge B project as our subdirectory" | ||
| + | </ | ||
| - | * Si des fichiers | + | Supprimer le submodule |
| <code bash> | <code bash> | ||
| - | if [[ ! -z "$(git status | + | git add .gitmodules |
| - | then | + | git commit |
| - | echo "Some files has been modified." | + | |
| - | exit 1 | + | |
| - | fi; | + | |
| </ | </ | ||
| - | Pour utiliser '' | + | [[https:// |
| - | * Si des fichiers non ignorés ont été ajoutés | + | Ou |
| <code bash> | <code bash> | ||
| - | if [ -n "$(git ls-files --others | + | cd main |
| + | # Cette commande doit impérativement être lancée depuis la racine du dépôt git et pas à l' | ||
| + | git fetch ../other master: | ||
| + | git checkout tmp | ||
| + | git filter-branch --index-filter \ | ||
| + | 'git ls-files -s | sed "s-\t\"*-&sub/-" | | ||
| + | GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ | ||
| + | git update-index --index-info && | ||
| + | | ||
| + | git rebase master | ||
| + | git checkout master | ||
| + | git merge tmp | ||
| + | git branch -d tmp | ||
| + | git update-ref -d refs/ | ||
| </ | </ | ||
| - | =====Maintenance===== | + | [[https:// |
| ====Vérifie l' | ====Vérifie l' | ||
| Ligne 484: | Ligne 527: | ||
| </ | </ | ||
| - | ====Avoir tous les enfants d'un commit==== | + | ====Suppression des dangling blobs==== |
| - | <code bash> | ||
| - | find_descendants() { | ||
| - | local sha=$1 | ||
| - | line=$(git rev-list --all --children | grep ^$sha) | ||
| - | |||
| - | if [[ $line == *" "* ]]; then | ||
| - | children=$(echo $line | cut -d' ' -f2-) | ||
| - | for child in $children; do | ||
| - | echo $child | ||
| - | find_descendants $child | ||
| - | done | ||
| - | fi | ||
| - | } | ||
| - | |||
| - | find_descendants $1 | ||
| - | </ | ||
| - | ====Suppression des dangling blobs==== | ||
| Ces commits inachevés sont détectés par la commande | Ces commits inachevés sont détectés par la commande | ||
| <code bash> | <code bash> | ||
| Ligne 515: | Ligne 541: | ||
| ====Ne garder que la dernière version après un git pull==== | ====Ne garder que la dernière version après un git pull==== | ||
| + | |||
| <code bash> | <code bash> | ||
| git checkout --orphan master | git checkout --orphan master | ||
| git gc --prune=all | git gc --prune=all | ||
| </ | </ | ||
| - | |||
| - | ====Supprimer un submodule==== | ||
| - | |||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | ====Changer l' | ||
| - | |||
| - | <code bash> | ||
| - | git submodule set-url -- < | ||
| - | </ | ||
| - | |||
| - | ====Signer tous les commits existants==== | ||
| - | git filter-branch -f --commit-filter 'git commit-tree -S " | ||
| - | git push -f | ||
| - | |||
| - | [[https:// | ||
| ====Supprimer les branches locales qui ont été supprimées sur le dépôt distant==== | ====Supprimer les branches locales qui ont été supprimées sur le dépôt distant==== | ||
| Ligne 547: | Ligne 553: | ||
| git branch --merged main | grep -v '^[ *]*main$' | git branch --merged main | grep -v '^[ *]*main$' | ||
| </ | </ | ||
| + | |||
| + | Bien mettre à jour '' | ||
| [[https:// | [[https:// | ||
| - | =====Clés publiques / privées===== | + | =====Historique===== |
| - | Pour signer les commits, il faut commencer par avoir la clé publique et privée. | + | ====Chercher dans le code sur l' |
| - | ====Génération de la clé==== | + | git grep < |
| + | Attention, cela cherche dans tous les fichiers, pas uniquement dans les modifications du commit. | ||
| - | <code bash> | + | ====Chercher dans le code uniquement les modifications==== |
| - | gpg --full-generate-key | + | |
| - | </ | + | |
| - | Choisir une clé '' | + | git log -S"a chercher" |
| - | ====Afficher la clé publique et privée==== | + | ====Trouver le commit qui supprime un fichier==== |
| - | <code bash> | + | Il n'y a pas moyen. Mais on peut retrouver tous les commits modifiant un fichier précis. |
| - | gpg --list-secret-keys --keyid-format LONG | + | git log --full-history |
| - | </ | + | Le dernier sera celui l' |
| - | Avec '' | + | ====Chercher une modification également dans les sous-modules==== |
| - | Pour exporter la clé publique : | + | git submodule foreach git log -S" |
| + | ====Changer le message de tous les commit automatiquement==== | ||
| + | git filter-branch -f --msg-filter 'sed " | ||
| + | Cela enlève toutes les lignes commençant par '' | ||
| + | |||
| + | ====Annuler temporairement des modifications==== | ||
| + | |||
| + | Les modifications sont stockés sous forme d'une liste FILO. | ||
| + | * Stocke les modifications dans une zone '' | ||
| <code bash> | <code bash> | ||
| - | gpg --armor --export YYYYYYYYY | + | git stash push -m nom_memoire fichiers |
| </ | </ | ||
| - | Pour exporter la clé privée : | + | * Restaure les modifications |
| <code bash> | <code bash> | ||
| - | gpg --export-secret-keys YYYYYYYYY > file.key | + | git stash apply |
| + | # Il est possible d' | ||
| + | git stash drop | ||
| + | |||
| + | # Ou il est possible de tout faire en même temps. | ||
| + | git stash pop | ||
| </ | </ | ||
| - | ====Configurer git==== | + | ====Ignorer certains commits avec blame==== |
| - | Pour importer une clé privée : | + | Inscrire les numéros de commit (un par ligne) dans un fichier '' |
| - | <code bash> | + | ====Modifier une liste de commits==== |
| - | gpg --import file.key | + | |
| - | </ | + | Applique '' |
| - | Si on souhaite ajouter la signature des commits pour tous les projets. | ||
| <code bash> | <code bash> | ||
| - | git config | + | git filter-branch |
| - | git config | + | git diff-index --diff-filter=AM --name-only $GIT_COMMIT |\ |
| + | grep .cpp)' -- < | ||
| </ | </ | ||
| - | ====Mettre à jour la clé==== | + | [[https:// |
| - | Il faut connaître le numéro de la clé. | + | =====Subtree===== |
| + | |||
| + | Les subtree utilisent les '' | ||
| + | |||
| + | ====Ajout d'un subtree==== | ||
| <code bash> | <code bash> | ||
| - | gpg --list-keys --keyid-format=long | + | git remote add -f name url_repository |
| + | git subtree add --prefix folder url_repository branch | ||
| </ | </ | ||
| - | Le numéro | + | avec : |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| - | < | + | Dans le cas d'une architecture '' |
| - | pub | + | |
| - | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | + | |
| - | uid [ unknown] USERNAME < | + | |
| - | sub | + | |
| - | ===Date d'expiration=== | + | ''git subtree add'' |
| - | Pour mettre à jour la date d' | + | ====pusher un subtree==== |
| - | <code bash> | + | Faire un commit de façon traditionnelle. |
| - | gpg --edit-key KEY_ID | + | |
| - | list | + | |
| - | key 0 | + | |
| - | expire | + | |
| - | key 1 | + | |
| - | expire | + | |
| - | save | + | |
| - | </ | + | |
| - | Ne pas choisir une date d' | + | La technique consiste |
| - | Pour la mettre | + | git subtree push --prefix=folder remote_name branch |
| + | |||
| + | Mais en faisant simplement çà, on se retrouve avec des commits différents entre le dépot principal et le dépot '' | ||
| + | |||
| + | ====Récupérer les modifications d'une branche==== | ||
| + | |||
| + | git subtree pull --prefix=folder remote_name branch | ||
| + | |||
| + | Et c'est très moche dans l' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | En plus, dans le '' | ||
| + | |||
| + | Je ne comprends pas pourquoi les '' | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | =====Best partices===== | ||
| + | |||
| + | ====Un dépôt global ou un dépôt par projet / dépendance==== | ||
| + | |||
| + | Je conseille un projet par librairie / projet. | ||
| + | |||
| + | L' | ||
| + | |||
| + | ===Nombres de dépôts=== | ||
| + | |||
| + | Séparer les dépôts réduit le nombre de dépendances de chaque projet car chaque projet n' | ||
| + | |||
| + | Mais avoir de nombreux projets nécessite plus de travail pour la synchronisation et pour la publication officielles des versions. | ||
| + | |||
| + | ===Gestion des dépendances=== | ||
| + | |||
| + | * Super projet contenant les submodules | ||
| + | |||
| + | Exemple [[https:// | ||
| + | |||
| + | Inconvénients : | ||
| + | |||
| + | - Nécessite un super projet pour compiler. Au choix : soit un super projet qui clone tout (Boost), soit un super projet par projet à compiler. | ||
| + | - Dépendances circulaires difficilement détectables entre projets. | ||
| + | |||
| + | * Submodule dans chaque projet | ||
| + | |||
| + | Inconvénients : | ||
| + | |||
| + | - Clonage récursif infini si dépendances circulaires. | ||
| + | - Si 2 librairies dépendent d'une même 3ème, la 3ème peut être a des versions différentes | ||
| + | |||
| + | * Gestionnaire externe (vcpkg) | ||
| + | |||
| + | Inconvénients : | ||
| + | |||
| + | - Travail supplémentaire pour maintenir les ports vcpkg. Dans le cas de vcpkg, il faut créer un port par branche de dev et l' | ||
| + | - Si on travaille sur des dépendances, | ||
| + | |||
| + | ====Rebase / amend / force push==== | ||
| + | |||
| + | Faut-il autoriser les rebases ou non ? Il y a 2 parties irréconciliables : avoir un arbre git propre (et autoriser les rebases) et avoir un arbre qui mémorise l' | ||
| + | |||
| + | ===Retravailler l' | ||
| + | |||
| + | * Sur les branches de développement | ||
| + | |||
| + | Je suis pour les modifications. C'est un espace de travail et de bac à sable qui peut être utilisé pour tester le code sur la CI. De plus, ça permet de sauvegarder le code quotidiennement et de voir l' | ||
| + | |||
| + | ⚠️ Autoriser de retravailler une branche interdit de se greffer sur une branche de développement d'un dépôt enfant. La branche de développement de l' | ||
| + | |||
| + | Par contre, il ne faut fusionner | ||
| + | |||
| + | * Modifier le commit de base d'une racine | ||
| + | |||
| + | Lors d'un merge, il faut utiliser '' | ||
| + | |||
| + | L' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Mais plutôt d' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Oui, c'est plus joli. Mais est-ce c'est nécessaire de l' | ||
| + | |||
| + | Si beaucoup de personnes travaillent en même temps sur le projet, l' | ||
| + | |||
| + | S'il n'y a pas de conflit lors du merge, | ||
| + | |||
| + | En cas de conflit lors du merge, il ne faut pas résoudre | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Il faut appliquer la technique de Gitlab avec le double merge. On merge la branche de destination vers la branche de dev pour résoudre les conflits puis on merge la branche de dev vers la branche de destination. Il y a toujours un commit de merge qui contient la résolution des conflits mais il est séparé du commit de merge final. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | On peut aussi faire des rebases régulièrement afin d' | ||
| - | [[https:// | ||
| =====Messages d' | =====Messages d' | ||
| + | |||
| ====warning: | ====warning: | ||
| + | |||
| C'est généralement affiché lors d'un '' | C'est généralement affiché lors d'un '' | ||
| + | |||
| ====warning: | ====warning: | ||
| + | |||
| git config XXX YYY | git config XXX YYY | ||
| ====git describe==== | ====git describe==== | ||
| + | |||
| * '' | * '' | ||
| Ligne 688: | Ligne 808: | ||
| Supprimer le dossier '' | Supprimer le dossier '' | ||
| - | =====Windows===== | ||
| - | [[https:// | ||
| - | |||
| - | [[http:// | ||
| - | |||
| - | =====Github===== | ||
| - | |||
| - | ====Personal access token==== | ||
| - | |||
| - | Pour pouvoir pousser sur un dépôt en utilisant un token plutôt que le mot de passe du site, il faut : | ||
| - | |||
| - | * Générer le token dans les [[https:// | ||
| - | * Créer un nouveau token avec les droits : '' | ||
| - | * Noter la clé, | ||
| - | * Puis, au moment de faire un '' | ||
| - | |||
| - | =====Third party===== | ||
| - | |||
| - | ====Gource==== | ||
| - | |||
| - | Programme de visualisation sous forme de vidéos des dépôts github. [[https:// | ||
| - | |||
| - | Le dépôt est représenté sous forme d'un arbre. Le dossier est une branche et les fichiers sont des feuilles. | ||
| - | |||
| - | Puis on voit où chaque contributeur contribue au fil du temps. | ||
| - | |||
| - | Commandes [[https:// | ||
| - | |||
| - | <code bash> | ||
| - | gource -1280x720 -o gource.ppm | ||
| - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i gource.ppm -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 24 -threads 8 gource.mp4 | ||
| - | </ | ||
| - | |||
| - | Attention, l' | ||
prog/git.1760967287.txt.gz · Dernière modification : de root
