Outils pour utilisateurs

Outils du site


prog:git

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
prog:git [2023/08/23 13:37] – [Maintenance] : ajout de "git fsck" rootprog:git [2025/10/20 15:34] (Version actuelle) – [Génération de la clé] : utilisation de sign only root
Ligne 20: Ligne 20:
 git config --global lfs.locksverify true git config --global lfs.locksverify true
 </code> </code>
 +
 +[[prive:prog:git|Données privées]]
  
 Si le dépôt demande constamment le mot de passe, il faut soit configurer l'utilisation de clés privées / publiques SSH et utiliser le protocole ''git@'', soit stocker les mots de passe (en clair sur le disque) et utiliser ''https:%%//%%'' : Si le dépôt demande constamment le mot de passe, il faut soit configurer l'utilisation de clés privées / publiques SSH et utiliser le protocole ''git@'', soit stocker les mots de passe (en clair sur le disque) et utiliser ''https:%%//%%'' :
Ligne 102: Ligne 104:
 ====Fusionner deux dépôts en un seul==== ====Fusionner deux dépôts en un seul====
  
-[[https://blog.rom1v.com/2017/07/fusionner-deux-depots-git/|Fusionner deux dépôts git]] {{ :prog:git:fusionner_deux_depots_git_rom1v_blog_2019-10-22_13_30_34_.html |Archive du 12/07/2017 le 22/10/2019}}+Depuis le projet A : 
 + 
 +<code bash> 
 +git remote add -f Bproject path/to/B 
 +git merge -s ours --no-commit --allow-unrelated-histories Bproject/master 
 +rm -Rf path/to/B 
 +git read-tree --prefix=path/to/B -u Bproject/master 
 +git commit -m "Merge B project as our subdirectory" 
 +</code> 
 + 
 +Supprimer le submodule des fichiers ''.gitmodules'', ''.git/config'' et supprimer le dossier ''.git/modules/path/to/B'' 
 + 
 +<code bash> 
 +git add .gitmodules 
 +git commit -m "Remove submodule B project" 
 +</code> 
 + 
 +[[https://stackoverflow.com/questions/23327701/git-merge-submodule-into-parent-tree-cleanly-and-preserving-commit-history|Git merge submodule into parent tree cleanly and preserving commit history]] {{ :prog:git:git_merge_submodule_into_parent_tree_cleanly_and_preserving_commit_history_-_stack_overflow_22_09_2023_12_24_09_.html |Archive du 27/04/2014 le 22/09/2023}} 
 + 
 +Ou
  
 <code bash> <code bash>
Ligne 120: Ligne 141:
 git update-ref -d refs/original/refs/heads/tmp git update-ref -d refs/original/refs/heads/tmp
 </code> </code>
 +
 +[[https://blog.rom1v.com/2017/07/fusionner-deux-depots-git/|Fusionner deux dépôts git]] {{ :prog:git:fusionner_deux_depots_git_rom1v_blog_2019-10-22_13_30_34_.html |Archive du 12/07/2017 le 22/10/2019}}
 +
  
 ====Dupliquer un dépôt==== ====Dupliquer un dépôt====
Ligne 192: Ligne 216:
 {{:prog:git:git_merge.png?350|}} {{:prog:git:git_merge.png?350|}}
  
-====Gestion des conflits====+====Gestion des conflits lors d'un push====
   git push --force-with-lease   git push --force-with-lease
  
Ligne 408: Ligne 432:
  
 [[https://stackoverflow.com/questions/43974371/run-git-clang-format-on-series-of-git-commits|Run git-clang-format on series of git commits]] {{ :prog:git:formatting_-_run_git-clang-format_on_series_of_git_commits_-_stack_overflow_27_03_2023_10_03_57_.html |Archive du 15/05/2017 le 27/03/2023}} [[https://stackoverflow.com/questions/43974371/run-git-clang-format-on-series-of-git-commits|Run git-clang-format on series of git commits]] {{ :prog:git:formatting_-_run_git-clang-format_on_series_of_git_commits_-_stack_overflow_27_03_2023_10_03_57_.html |Archive du 15/05/2017 le 27/03/2023}}
 +
 +=====État du dépôt=====
 +
 +====bash====
 +
 +  * Si des fichiers ont été modifiés
 +
 +<code bash>
 +if [[ ! -z "$(git status --porcelain)" ]]
 +then
 +  echo "Some files has been modified."
 +  exit 1
 +fi;
 +</code>
 +
 +Pour utiliser ''%%git diff-index --name-only HEAD --%%'', il est nécessaire d'appeler ''%%git update-index --refresh%%''. [[https://stackoverflow.com/questions/34807971/why-does-git-diff-index-head-result-change-for-touched-files-after-git-diff-or-g|Why does git diff-index HEAD result change for touched files after git diff or git status?]] {{ :prog:git:why_does_git_diff-index_head_result_change_for_touched_files_after_git_diff_or_git_status_-_stack_overflow_1_19_2024_4_04_53_pm_.html |Archive du 15/01/2016 le 19/01/2024}}
 +
 +  * Si des fichiers non ignorés ont été ajoutés
 +
 +<code bash>
 +if [ -n "$(git ls-files --others --exclude-standard)" ]
 +</code>
  
 =====Maintenance===== =====Maintenance=====
Ligne 425: Ligne 471:
 missing tree 2a9e451f85ba5e26dbe34d742105e877b0942570 missing tree 2a9e451f85ba5e26dbe34d742105e877b0942570
 </code> </code>
-====Suppression des dangling blobs====+ 
 +====Savoir à quel commit appartient un blob==== 
 <code bash> <code bash>
-git gc --prune="0 days"+git log --raw --all --find-object=<blob hash>
 </code> </code>
 +
 +et pour un objet LFS
 +
 +<code bash>
 +git log -S<SHA>
 +</code>
 +
 +====Avoir tous les enfants d'un commit====
 +
 +<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
 +</code>
 +====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>
 git fsck 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
 </code> </code>
  
Ligne 439: Ligne 517:
 <code bash> <code bash>
 git checkout --orphan master git checkout --orphan master
-git gc --aggressive --prune=all+git gc --prune=all
 </code> </code>
  
Ligne 482: Ligne 560:
 </code> </code>
  
-Choisir une clé ''RSA et RSA'' de la taille maximale (4096).+Choisir une clé ''RSA (sign only)'' de la taille maximale (4096). ''RSA'' signe plus rapidement que ''DSA'' (qui vérifie plus rapidement). Dans mon cas, ce qui m'intéresse, c'est que les commits soient signés rapidement sur ma machine.
  
 ====Afficher la clé publique et privée==== ====Afficher la clé publique et privée====
Ligne 584: Ligne 662:
 [[https://stackoverflow.com/questions/23885449/unable-to-resolve-unable-to-get-local-issuer-certificate-using-git-on-windows|Unable to resolve "unable to get local issuer certificate" using git on Windows with self-signed certificate]] {{ :prog:git:unable_to_resolve_unable_to_get_local_issuer_certificate_using_git_on_windows_with_self-signed_certificate_-_stack_overflow_27_02_2023_16_06_21_.html |Archive du 27/05/2015 le 27/02/2023}} [[https://stackoverflow.com/questions/23885449/unable-to-resolve-unable-to-get-local-issuer-certificate-using-git-on-windows|Unable to resolve "unable to get local issuer certificate" using git on Windows with self-signed certificate]] {{ :prog:git:unable_to_resolve_unable_to_get_local_issuer_certificate_using_git_on_windows_with_self-signed_certificate_-_stack_overflow_27_02_2023_16_06_21_.html |Archive du 27/05/2015 le 27/02/2023}}
  
 +====fatal: unable to access 'xxxxx.git/': error setting certificate file: xxxx\CI_SERVER_TLS_CA_FILE====
 +
 +L'option ''credential.helper'' est configuré à ''store'' et le mot de passe défini dans le fichier ''.git-credentials'' est faux.
 +
 +====error: object file .git/objects/a3/02c397c3b0c0c8959b35778c1705a89108fdb2 is empty====
 +
 +Pour éviter de devoir tout cloner à nouveau et devoir tout recompiler, il faut tester :
 +
 +<code bash>
 +find .git/objects/ -size 0 -delete
 +git fetch
 +</code>
 +
 +[[https://stackoverflow.com/questions/4111728/how-do-i-deal-with-corrupted-git-object-files|How do I deal with corrupted Git object files?]] {{ :prog:git:how_do_i_deal_with_corrupted_git_object_files_-_stack_overflow_28_12_2024_22_04_15_.html |Archive du 06/11/2010 le 28/12/2024}}
 +
 +====gpg: keydb_search failed: Invalid argument====
 +
 +<code>
 +gpg: keydb_search failed: Invalid argument
 +gpg: skipped "XXXXXXXXXXXXXXXX": Invalid argument
 +[GNUPG:] INV_SGNR 0 XXXXXXXXXXXXXXXX
 +[GNUPG:] FAILURE sign XXXXXXXXX
 +gpg: signing failed: Invalid argument
 +</code>
 +
 +Supprimer le dossier ''~/.gnupg'' et réimporter les clés privées.
 =====Windows===== =====Windows=====
 [[https://gitforwindows.org|Site Web]], {{ :prog:git:git-2.21.0-64-bit.exe |Archive git gui 64 bit 2.21.0 (26/02/2019)}} [[https://gitforwindows.org|Site Web]], {{ :prog:git:git-2.21.0-64-bit.exe |Archive git gui 64 bit 2.21.0 (26/02/2019)}}
prog/git.1692790636.txt.gz · Dernière modification : de root