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/25 12:34] – Ajout de "État du dépôt" 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 416: Ligne 440:
  
 <code bash> <code bash>
-if [ -"$(git diff-index --name-only HEAD --)" ]+if [[ ! -"$(git status --porcelain)" ]]
 then then
   echo "Some files has been modified."   echo "Some files has been modified."
Ligne 422: Ligne 446:
 fi; fi;
 </code> </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   * Si des fichiers non ignorés ont été ajoutés
Ligne 444: Ligne 470:
 Checking objects: 100% (812/812), done. Checking objects: 100% (812/812), done.
 missing tree 2a9e451f85ba5e26dbe34d742105e877b0942570 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> </code>
 ====Suppression des dangling blobs==== ====Suppression des dangling blobs====
Ligne 503: 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 605: 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.1692959693.txt.gz · Dernière modification : de root