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 [2023/08/23 14:48] – Suppression de "--aggressive" de "git gc" 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 20: | Ligne 27: | ||
| git config --global lfs.locksverify true | git config --global lfs.locksverify true | ||
| </ | </ | ||
| + | |||
| + | [[prive: | ||
| Si le dépôt demande constamment le mot de passe, il faut soit configurer l' | Si le dépôt demande constamment le mot de passe, il faut soit configurer l' | ||
| Ligne 54: | 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 : |
| - | [[https:// | + | <code bash> |
| + | gpg --import file.key | ||
| + | </code> | ||
| + | Si on souhaite ajouter la signature des commits pour tous les projets. | ||
| <code bash> | <code bash> | ||
| - | cd main | + | git config |
| - | # Cette commande doit impérativement être lancée depuis la racine du dépôt git et pas à l' | + | git config |
| - | git fetch ../other master: | + | |
| - | git checkout tmp | + | |
| - | git filter-branch | + | |
| - | 'git ls-files -s | sed " | + | |
| - | GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ | + | |
| - | git update-index --index-info && | + | |
| - | mv " | + | |
| - | git rebase master | + | |
| - | git checkout master | + | |
| - | git merge tmp | + | |
| - | git branch -d tmp | + | |
| - | git update-ref -d refs/ | + | |
| </ | </ | ||
| - | ====Dupliquer un dépôt==== | + | ====Mettre à jour la clé==== |
| + | |||
| + | Il faut connaître le numéro de la clé. | ||
| + | |||
| + | <code bash> | ||
| + | gpg --list-keys --keyid-format=long | ||
| + | </ | ||
| + | |||
| + | Le numéro de la clé est celui du pub après l' | ||
| + | |||
| + | < | ||
| + | pub | ||
| + | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | ||
| + | uid [ unknown] USERNAME < | ||
| + | sub | ||
| + | |||
| + | ====Date d' | ||
| + | |||
| + | Pour mettre à jour la date d' | ||
| + | |||
| + | <code bash> | ||
| + | gpg --edit-key KEY_ID | ||
| + | list | ||
| + | key 0 | ||
| + | expire | ||
| + | key 1 | ||
| + | expire | ||
| + | save | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| 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 139: | 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 198: | 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 213: | Ligne 290: | ||
| ====Annulation d'une modification non encore " | ====Annulation d'une modification non encore " | ||
| + | |||
| <code bash> | <code bash> | ||
| git checkout -- < | git checkout -- < | ||
| Ligne 218: | Ligne 296: | ||
| ====Afficher les différences==== | ====Afficher les différences==== | ||
| + | |||
| Avant '' | Avant '' | ||
| <code bash> | <code bash> | ||
| Ligne 231: | Ligne 310: | ||
| ====Trouver le commit à l' | ====Trouver le commit à l' | ||
| + | |||
| <code bash> | <code bash> | ||
| git bisect start | git bisect start | ||
| Ligne 259: | 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 293: | 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 317: | 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' | + | ====Signer tous les commits existants==== |
| + | |||
| + | Cela réécrit tout l' | ||
| + | |||
| + | git filter-branch -f --commit-filter 'git commit-tree -S " | ||
| + | git push -f | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ====Avoir tous les enfants | ||
| <code bash> | <code bash> | ||
| - | git remote add -f name url_repository | + | find_descendants() { |
| - | git subtree add --prefix folder url_repository branch | + | local sha=$1 |
| + | line=$(git rev-list --all --children | grep ^$sha) | ||
| + | |||
| + | if [[ $line == *" "* ]]; then | ||
| + | children=$(echo $line | cut -d' ' | ||
| + | for child in $children; do | ||
| + | echo $child | ||
| + | find_descendants $child | ||
| + | done | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | find_descendants $1 | ||
| </ | </ | ||
| - | avec : | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | Dans le cas d'une architecture '' | + | =====État du dépôt===== |
| - | '' | + | ====Si des fichiers ont été modifiés==== |
| - | ====pusher un subtree==== | + | <code bash> |
| - | Faire un commit de façon traditionnelle. | + | if [[ ! -z "$(git status --porcelain --ignore-submodules)" |
| + | then | ||
| + | echo "Some files has been modified." | ||
| + | exit 1 | ||
| + | fi; | ||
| + | </ | ||
| - | La technique consiste à '' | + | Pour utiliser |
| - | git subtree push --prefix=folder remote_name branch | + | ====Si des fichiers non ignorés ont été ajoutés==== |
| - | Mais en faisant simplement çà, on se retrouve avec des commits différents entre le dépot principal et le dépot '' | + | <code bash> |
| + | if [ -n "$(git ls-files --others --exclude-standard)" | ||
| + | </ | ||
| - | ====Récupérer les modifications d'une branche==== | + | =====Maintenance===== |
| - | git subtree pull --prefix=folder remote_name branch | + | ====Changer l' |
| - | Et c'est très moche dans l'historique de git : | + | Pour connaître |
| + | <code bash> | ||
| + | git remote -v | ||
| + | </ | ||
| - | {{:prog:git:git_historique_subtree.png|Historique | + | Pour la modifier |
| + | <code bash> | ||
| + | git remote set-url origin https:// | ||
| + | </ | ||
| - | En plus, dans le '' | + | [[https:// |
| - | Je ne comprends pas pourquoi les '' | + | ====Déplacer un dossier vers au nouveau dépôt==== |
| - | [[https:// | + | <WRAP center round important 60%> |
| + | Il faut créer un double | ||
| + | </WRAP> | ||
| - | [[https://gauthier.frama.io/post/git-subtree/|Git subtree: une alternative à Git submodule]] {{ :prog:git:git_subtree_une_alternative_a_git_submodule_le_blog_de_gauthier_2019-10-07_00_00_35_.html |Archive | + | [[https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/|Splitting a subfolder out into a new repository]] {{ :prog:git:splitting_a_subfolder_out_into_a_new_repository_-_github_help_2019-10-22_13_30_27_.html |Archive le 22/10/2019}} |
| - | [[https://tsh.io/blog/git-subtree-or-how-i-stopped-worrying-and-learned-to-love-external-dependencies/|Git subtree | + | ====Fusionner deux dépôts en un seul et en conservant l' |
| + | |||
| + | Depuis le projet A : | ||
| + | |||
| + | <code 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/ | ||
| + | git commit -m "Merge B project as our subdirectory" | ||
| + | </ | ||
| + | |||
| + | Supprimer le submodule des fichiers '' | ||
| + | |||
| + | <code bash> | ||
| + | git add .gitmodules | ||
| + | git commit -m " | ||
| + | </ | ||
| + | |||
| + | [[https://stackoverflow.com/questions/ | ||
| + | |||
| + | Ou | ||
| + | |||
| + | <code bash> | ||
| + | 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 " | ||
| + | GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ | ||
| + | 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:// | ||
| + | |||
| + | ====Vérifie l' | ||
| + | |||
| + | <code bash> | ||
| + | git fsck --no-dangling | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | $ git fsck --no-dangling | ||
| + | error: corrupt loose object ' | ||
| + | error: unable to unpack contents of .git/ | ||
| + | error: 2a9e451f85ba5e26dbe34d742105e877b0942570: | ||
| + | Checking object directories: | ||
| + | Checking objects: 100% (812/812), done. | ||
| + | missing tree 2a9e451f85ba5e26dbe34d742105e877b0942570 | ||
| + | </ | ||
| + | |||
| + | ====Savoir à quel commit appartient un blob==== | ||
| + | |||
| + | <code bash> | ||
| + | git log --raw --all --find-object=< | ||
| + | </ | ||
| + | |||
| + | et pour un objet LFS | ||
| + | |||
| + | <code bash> | ||
| + | git log -S< | ||
| + | </ | ||
| + | |||
| + | ====Suppression des dangling blobs==== | ||
| + | |||
| + | Ces commits inachevés sont détectés par la commande | ||
| + | <code bash> | ||
| + | git fsck | ||
| + | git reflog expire --expire-unreachable=now --expire=now --all --dry-run | ||
| + | git reflog expire --expire-unreachable=now --expire=now --all | ||
| + | git gc --prune=now | ||
| + | git repack | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ====Ne garder que la dernière version après un git pull==== | ||
| + | |||
| + | <code bash> | ||
| + | git checkout --orphan master | ||
| + | git gc --prune=all | ||
| + | </ | ||
| + | |||
| + | ====Supprimer les branches locales qui ont été supprimées sur le dépôt distant==== | ||
| + | |||
| + | <code bash> | ||
| + | git fetch -p | ||
| + | git branch --merged main | grep -v '^[ *]*main$' | ||
| + | </ | ||
| + | |||
| + | Bien mettre à jour '' | ||
| + | |||
| + | [[https:// | ||
| =====Historique===== | =====Historique===== | ||
| + | |||
| ====Chercher dans le code sur l' | ====Chercher dans le code sur l' | ||
| + | |||
| git grep < | git grep < | ||
| Attention, cela cherche dans tous les fichiers, pas uniquement dans les modifications du commit. | Attention, cela cherche dans tous les fichiers, pas uniquement dans les modifications du commit. | ||
| ====Chercher dans le code uniquement les modifications==== | ====Chercher dans le code uniquement les modifications==== | ||
| + | |||
| git log -S"a chercher" | git log -S"a chercher" | ||
| ====Trouver le commit qui supprime un fichier==== | ====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. | Il n'y a pas moyen. Mais on peut retrouver tous les commits modifiant un fichier précis. | ||
| git log --full-history -- your_file | git log --full-history -- your_file | ||
| Ligne 375: | Ligne 576: | ||
| ====Chercher une modification également dans les sous-modules==== | ====Chercher une modification également dans les sous-modules==== | ||
| + | |||
| git submodule foreach git log -S" | 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==== | ====Annuler temporairement des modifications==== | ||
| + | |||
| Les modifications sont stockés sous forme d'une liste FILO. | Les modifications sont stockés sous forme d'une liste FILO. | ||
| * Stocke les modifications dans une zone '' | * Stocke les modifications dans une zone '' | ||
| Ligne 395: | Ligne 602: | ||
| ====Ignorer certains commits avec blame==== | ====Ignorer certains commits avec blame==== | ||
| + | |||
| Inscrire les numéros de commit (un par ligne) dans un fichier '' | Inscrire les numéros de commit (un par ligne) dans un fichier '' | ||
| Ligne 409: | Ligne 617: | ||
| [[https:// | [[https:// | ||
| - | =====Maintenance===== | + | =====Subtree===== |
| - | ====Vérifie l' | + | |
| - | <code bash> | + | Les subtree utilisent les '' |
| - | git fsck --no-dangling | + | |
| - | </ | + | ====Ajout d'un subtree==== |
| - | < | ||
| - | $ git fsck --no-dangling | ||
| - | error: corrupt loose object ' | ||
| - | error: unable to unpack contents of .git/ | ||
| - | error: 2a9e451f85ba5e26dbe34d742105e877b0942570: | ||
| - | Checking object directories: | ||
| - | Checking objects: 100% (812/812), done. | ||
| - | missing tree 2a9e451f85ba5e26dbe34d742105e877b0942570 | ||
| - | </ | ||
| - | ====Suppression des dangling blobs==== | ||
| - | Ces commits inachevés sont détectés par la commande | ||
| <code bash> | <code bash> | ||
| - | git fsck | + | git remote add -f name url_repository |
| - | git reflog expire | + | git subtree add --prefix folder url_repository branch |
| - | git reflog expire | + | |
| - | git gc --prune=now | + | |
| - | git repack | + | |
| </ | </ | ||
| - | [[https:// | + | avec : |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| - | ====Ne garder que la dernière version après un git pull==== | + | Dans le cas d'une architecture '' |
| - | <code bash> | + | |
| - | git checkout | + | |
| - | git gc --prune=all | + | |
| - | </ | + | |
| - | ====Supprimer | + | '' |
| - | * '' | + | ====pusher un subtree==== |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | [[https:// | + | Faire un commit de façon traditionnelle. |
| - | ====Changer l'url/remote d'un submodule==== | + | La technique consiste à '' |
| - | <code bash> | + | |
| - | git submodule set-url -- < | + | |
| - | </ | + | |
| - | ====Signer tous les commits | + | Mais en faisant simplement çà, on se retrouve avec des commits |
| - | git filter-branch -f --commit-filter | + | |
| - | git push -f | + | |
| - | [[https:// | + | ====Récupérer les modifications d'une branche==== |
| - | ====Supprimer les branches locales qui ont été supprimées sur le dépôt distant==== | + | git subtree pull --prefix=folder remote_name branch |
| - | <code bash> | + | Et c'est très moche dans l'historique de git : |
| - | git fetch -p | + | |
| - | git branch --merged main | grep -v '^[ *]*main$' | + | |
| - | </ | + | |
| - | [[https:// | + | {{: |
| - | =====Clés publiques / privées===== | + | En plus, dans le '' |
| - | Pour signer | + | Je ne comprends pas pourquoi |
| - | ====Génération de la clé==== | + | [[https:// |
| - | <code bash> | + | [[https:// |
| - | gpg --full-generate-key | + | |
| - | </code> | + | |
| - | Choisir une clé '' | + | [[https:// |
| - | ====Afficher la clé publique et privée==== | + | =====Best partices===== |
| - | <code bash> | + | ====Un dépôt global ou un dépôt par projet |
| - | gpg --list-secret-keys --keyid-format LONG | + | |
| - | </code> | + | |
| - | Avec '' | + | Je conseille un projet par librairie |
| - | Pour exporter la clé publique : | + | L' |
| - | <code bash> | + | ===Nombres de dépôts=== |
| - | gpg --armor --export YYYYYYYYY | + | |
| - | </ | + | |
| - | Pour exporter la clé privée : | + | Séparer les dépôts réduit le nombre de dépendances de chaque projet car chaque projet n' |
| - | <code bash> | + | Mais avoir de nombreux projets nécessite plus de travail pour la synchronisation et pour la publication officielles des versions. |
| - | gpg --export-secret-keys YYYYYYYYY > file.key | + | |
| - | </ | + | |
| - | ====Configurer git==== | + | ===Gestion des dépendances=== |
| - | Pour importer une clé privée : | + | * Super projet contenant les submodules à la racine |
| - | <code bash> | + | Exemple [[https:// |
| - | gpg --import file.key | + | |
| - | </code> | + | |
| - | Si on souhaite ajouter la signature des commits pour tous les projets. | + | Inconvénients : |
| - | <code bash> | + | |
| - | git config --global user.signingkey YYYYYYYYY | + | |
| - | git config --global commit.gpgsign true | + | |
| - | </ | + | |
| - | ====Mettre | + | - Nécessite un super projet pour compiler. Au choix : soit un super projet qui clone tout (Boost), soit un super projet par projet |
| + | - Dépendances circulaires difficilement détectables entre projets. | ||
| - | Il faut connaître le numéro de la clé. | + | * Submodule dans chaque projet |
| - | <code bash> | + | Inconvénients : |
| - | gpg --list-keys --keyid-format=long | + | |
| - | </ | + | |
| - | Le numéro de la clé est celui du pub après l' | + | - Clonage récursif infini si dépendances circulaires. |
| + | - Si 2 librairies dépendent d'une même 3ème, | ||
| - | < | + | |
| - | pub | + | |
| - | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | + | |
| - | uid [ unknown] USERNAME < | + | |
| - | sub | + | |
| - | ===Date d' | + | Inconvénients : |
| - | Pour mettre à jour la date d' | + | - 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, | ||
| - | <code bash> | + | ====Rebase |
| - | gpg --edit-key KEY_ID | + | |
| - | list | + | |
| - | key 0 | + | |
| - | expire | + | |
| - | key 1 | + | |
| - | expire | + | |
| - | save | + | |
| - | </code> | + | |
| - | Ne pas choisir une date d'expiration supérieure à 1 an. C'est la limite | + | 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'évolution |
| - | Pour la mettre | + | ===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 585: | Ligne 782: | ||
| [[https:// | [[https:// | ||
| - | =====Windows===== | + | ====fatal: unable to access ' |
| - | [[https:// | + | |
| - | [[http:// | + | L' |
| - | =====Github===== | + | ====error: object file .git/ |
| - | ====Personal access token==== | + | Pour éviter de devoir tout cloner à nouveau et devoir tout recompiler, il faut tester : |
| - | Pour pouvoir pousser sur un dépôt en utilisant un token plutôt que le mot de passe du site, il faut : | + | <code bash> |
| + | find .git/ | ||
| + | git fetch | ||
| + | </ | ||
| - | * Générer le token dans les [[https://github.com/settings/tokens|settings]] de l' | + | [[https://stackoverflow.com/questions/4111728/ |
| - | * Créer un nouveau token avec les droits | + | |
| - | * Noter la clé, | + | |
| - | * Puis, au moment de faire un '' | + | |
| - | =====Third party===== | + | ====gpg: keydb_search failed: Invalid argument==== |
| - | ====Gource==== | + | < |
| - | + | gpg: keydb_search failed: Invalid argument | |
| - | Programme de visualisation sous forme de vidéos des dépôts github. | + | gpg: skipped " |
| - | + | [GNUPG:] INV_SGNR | |
| - | Le dépôt est représenté sous forme d'un arbre. Le dossier est une branche et les fichiers sont des feuilles. | + | [GNUPG:] FAILURE sign XXXXXXXXX |
| - | + | gpg: signing failed: Invalid argument | |
| - | Puis on voit où chaque contributeur contribue au fil du temps. | + | |
| - | + | ||
| - | Commandes | + | |
| - | + | ||
| - | <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'encodage est mauvais dans les dégradés sombres. Il faudra accepter une vidéo de faible taille avec des carrés ou mettre un crf très faible (< 15) avec une vidéo de très grosse taille. | + | Supprimer le dossier |
prog/git.1692794910.txt.gz · Dernière modification : de root
