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/01/05 11:15] – [Cloner et configurer d'un dépôt] : Ajout de la rubrique WSL rootprog:git [2024/08/19 10:36] (Version actuelle) – Ajout de "Savoir à quel commit appartient un blob" root
Ligne 4: Ligne 4:
 git clone https://github.com/bansan85/2lgc.git git clone https://github.com/bansan85/2lgc.git
 </code> </code>
-Mais surtout, ne pas oublier :+Mais surtout, ne pas oublier (l'option ''--global'' configure tous les dépôts et pas uniquement le dépôt courant) :
  
 <code bash> <code bash>
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|}}
  
-  * Maintenance : supprimer les branches locales qui ont été supprimées sur le dépôt distant +====Gestion des conflits lors d'un push====
- +
-<code bash> +
-git remote prune origin +
-</code> +
-====Gestion des conflits====+
   git push --force-with-lease   git push --force-with-lease
  
Ligne 399: Ligne 420:
 ====Ignorer certains commits avec blame==== ====Ignorer certains commits avec blame====
 Inscrire les numéros de commit (un par ligne) dans un fichier ''.git-blame-ignore-revs''. Inscrire les numéros de commit (un par ligne) dans un fichier ''.git-blame-ignore-revs''.
 +
 +====Modifier une liste de commits====
 +
 +Applique ''clang-format'' pour tous les fichiers ''.cpp'' ayant changés.
 +
 +<code bash>
 +git filter-branch --tree-filter 'git-clang-format $(\
 +  git diff-index --diff-filter=AM --name-only $GIT_COMMIT |\
 +    grep .cpp)' -- <SHA1>..HEAD
 +</code>
 +
 +[[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>
 +====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 415: Ligne 492:
 <code bash> <code bash>
 git checkout --orphan master git checkout --orphan master
-git gc --aggressive --prune=all+git gc --prune=all
 </code> </code>
  
Ligne 426: Ligne 503:
  
 [[https://gist.github.com/myusuf3/7f645819ded92bda6677#gistcomment-2650640|How effectively delete a git submodule?]] {{ :prog:git:how_effectively_delete_a_git_submodule._github_2019-10-22_13_32_38_.html |Archive du 18/07/2018 le 22/10/2019}} [[https://gist.github.com/myusuf3/7f645819ded92bda6677#gistcomment-2650640|How effectively delete a git submodule?]] {{ :prog:git:how_effectively_delete_a_git_submodule._github_2019-10-22_13_32_38_.html |Archive du 18/07/2018 le 22/10/2019}}
 +
 +====Changer l'url/remote d'un submodule====
 +
 +<code bash>
 +git submodule set-url -- <local_path> <new_url>
 +</code>
  
 ====Signer tous les commits existants==== ====Signer tous les commits existants====
Ligne 432: Ligne 515:
  
 [[https://stackoverflow.com/questions/13043357/git-sign-off-previous-commits|Git sign off previous commits?]] {{ :prog:git:git_sign_off_previous_commits_-_stack_overflow_2019-10-22_13_32_56_.html |Archive du 24/10/2012 le 22/10/2019}} [[https://stackoverflow.com/questions/13043357/git-sign-off-previous-commits|Git sign off previous commits?]] {{ :prog:git:git_sign_off_previous_commits_-_stack_overflow_2019-10-22_13_32_56_.html |Archive du 24/10/2012 le 22/10/2019}}
 +
 +====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$' | xargs git branch -d
 +</code>
 +
 +[[https://stackoverflow.com/questions/13064613/how-to-prune-local-tracking-branches-that-do-not-exist-on-remote-anymore|How to prune local tracking branches that do not exist on remote anymore?]] {{ :prog:git:git_-_how_to_prune_local_tracking_branches_that_do_not_exist_on_remote_anymore_-_stack_overflow_20_03_2023_10_21_42_.html |Archive du 25/10/2012 le 20/03/2023}}
  
 =====Clés publiques / privées===== =====Clés publiques / privées=====
Ligne 534: Ligne 626:
  
 Pour cloner des dépôts en ''https://github.com/xxx'', il faut compiler ''git'' avec le support de ''curl''. Pour cloner des dépôts en ''https://github.com/xxx'', il faut compiler ''git'' avec le support de ''curl''.
 +
 +====SSL certificate problem: unable to get local issuer certificate====
 +
 +Sous Windows :
 +
 +<code bash>
 +git config --global http.sslbackend schannel
 +</code>
 +
 +[[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.
  
 =====Windows===== =====Windows=====
prog/git.1672913755.txt.gz · Dernière modification : 2023/01/05 11:15 de root