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/07/28 08:35] – [Cloner et configurer d'un dépôt] : précision sur --global rootprog:git [2025/10/20 15:34] (Version actuelle) – [Génération de la clé] : utilisation de sign only root
Ligne 17: Ligne 17:
 git config --global pager.diff false git config --global pager.diff false
 git config --global pager.grep false git config --global pager.grep false
 +# lfs
 +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 100: 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 118: 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 190: 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 406: 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=====
-====Suppression des dangling blobs====+====Vérifie l'état d'un dépôt==== 
 <code bash> <code bash>
-git gc --prune="0 days"+git fsck --no-dangling
 </code> </code>
 +
 +<code>
 +$ git fsck --no-dangling
 +error: corrupt loose object '2a9e451f85ba5e26dbe34d742105e877b0942570'
 +error: unable to unpack contents of .git/objects/2a/9e451f85ba5e26dbe34d742105e877b0942570
 +error: 2a9e451f85ba5e26dbe34d742105e877b0942570: object corrupt or missing: .git/objects/2a/9e451f85ba5e26dbe34d742105e877b0942570
 +Checking object directories: 100% (256/256), done.
 +Checking objects: 100% (812/812), done.
 +missing tree 2a9e451f85ba5e26dbe34d742105e877b0942570
 +</code>
 +
 +====Savoir à quel commit appartient un blob====
 +
 +<code bash>
 +git log --raw --all --find-object=<blob hash>
 +</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 422: 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 465: 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 567: 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.1690526149.txt.gz · Dernière modification : de root