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édentes Révision précédente
Prochaine révision
Révision précédente
memo:git [22/12/2014 13:50] – [Gestion des dépôts distants (remote)] Ajouter Arnaud Jacqueminmemo:git [10/12/2024 11:39] (Version actuelle) – Gestion des branches Arnaud Jacquemin
Ligne 1: Ligne 1:
 ====== Git====== ====== Git======
 +
 +===== Récupérer sources depuis un dépôt =====
 +
 +<code bash>
 +git clone git@framagit.org:mres-web/site_MRES_squelette.git
 +</code>
 +
 +Pour Framagit, renseigner au préalable dans les paramètres du compte la clé publique du PC, à récuperer dans ''~/.ssh/id_rsa.pub''
 +
 +
 +===== Récupérer les changements d'un dépôt distant =====
 +
 +Resynchronise le dépôt local avec le dépôt distant. Ne change rien dans l'espace de travail.
 +
 +<code bash>
 +# Avec "origine" = nom du dépôt distant (remote)
 +git fetch origin
 +</code>
 +
 +===== Gestion des branches =====
 +
 +Créer une branche : ((https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell#_create_new_branch))
 +<code bash>
 +git branch nomdelabranche
 +</code>
 +
 +Basculer sur cette branche : ((https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell#_switching_branches))
 +<code bash>
 +git checkout nomdelabranche
 +</code>
 +
 +Faire ces deux actions (créer et basculer sur une nouvelle branche) en une seule commande avec un raccourci : ((https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging#_basic_branching))
 +<code bash>
 +git checkout -b nomdelabranche
 +</code>
 +
 +Fusionner les changements d'une autre branche (de //hotfix// vers //main// dans cet exemple) :
 +<code bash>
 +git checkout main
 +git merge hotfix
 +</code>
 +
 +Re-baser son travail sur une autre branche, par exemple avant de demander la fusion de ses changements dans cette branche. Résultat similaire à un ''merge'' mais pour obtenir un historique plus propre.
 +⚠️ À ne pas faire sur une branche publique qui a potentiellement servi de base à d'autres modifications (([[https://git-scm.com/book/en/v2/Git-Branching-Rebasing#The%20Perils%20of%20Rebasing|The Perils of Rebasing]]))
 +<code bash>
 +# Re-baser l'environnement de travail sur la branche develop. Idéalement faire un fetch avant !
 +git rebase develop
 +</code>
 +
 +Obtenir la liste des branches :
 +<code bash>
 +git branch
 +# Uniquement celles qui n'ont pas encore été fusionnées :
 +git branch --no-merged
 +</code>
 +
 +Supprimer une branche :
 +<code bash>
 +git branch -d hotfix
 +</code>
 +
 +Renommer une branche, par exemple de //master// vers //main// ((https://git-scm.com/book/en/v2/Git-Branching-Branch-Management#_changing_a_branch_name)):
 +<code bash>
 +git branch --move master main
 +# L'envoyer sur le dépôt distant
 +git push --set-upstream origin main
 +# Supprimer l'ancienne du dépôt distant
 +git push origin --delete master
 +# Vérifier le résultat :
 +git branch --all
 +</code>
 +
 +===== Obtenir statut de l'espace de travail =====
 +
 +<code bash>
 +git status
 +</code>
 +
 +
 +===== Créer dépôt de travail à partir de sources =====
 +
 +A la racine des sources, jouer les commandes suivantes :
 +
 +<code bash>
 +git init
 +git add .
 +git commit -m 'Initial Commit'
 +</code>
 +
 +Sources : [[https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository|Git Basics - Getting a Git Repository]]
 +
 +
  
 ===== Créer dépôt nu ("bare") ===== ===== Créer dépôt nu ("bare") =====
Ligne 6: Ligne 98:
  
 <code bash> <code bash>
-git clone --bare --shared my_project my_project.git+git clone --bare my_project my_project.git
 </code> </code>
  
-Sources : [[http://git-scm.com/book/en/Git-on-the-Server-Getting-Git-on-a-Server|Getting Git on a Server]] et [[http://www.bitflop.com/document/111|Git bare vs. non-bare repositories]]+Exemple avec un dossier SMB (sous windows)
  
-Sinon, créer depuis les sources :+<code dos> 
 +git clone --bare "C:\Users\ajacquemin\Sources\dsi\nom_depot" "\\\\serveurfichiers\...\git\gdm\dsi\nom_depot.git" 
 +</code> 
 + 
 +Exemple sous Linux
 <code bash> <code bash>
-mv project project.git +git clone --bare ~/Webmastering/backup/dokuwiki-git/ /media/eddie/public/git/dokuwiki.git
-cd project.git +
-git init --bare --shared +
-git add . +
-git commit -m 'initial commit'+
 </code> </code>
 +
 +Sources : [[http://git-scm.com/book/en/Git-on-the-Server-Getting-Git-on-a-Server|Getting Git on a Server]] et [[http://www.bitflop.com/document/111|Git bare vs. non-bare repositories]]
 +
 +
  
 ===== Gestion des dépôts distants (remote) ===== ===== Gestion des dépôts distants (remote) =====
Ligne 36: Ligne 132:
  
 <code bash> <code bash>
-git remote add origin "///Efiles.feel-it.mad\xanit\sources_dvpt\git\gdm\ecommerce\ExportJobGDMToSparkow.git"+git remote add origin "///serveur-de-fichiers\dossier\depot.git"
 </code> </code>
  
-Remplacer ''origin'' par le nom du dépôt+Si besoin remplacer ''origin'' par l'alias à donner au dépôt.
  
  
-==== Changer URL ====+==== Modifier ====
  
 <code bash> <code bash>
-$ git remote set-url origin "///Efiles.feel-it.mad\xanit\sources_dvpt\git\gdm\ecommerce\flux-probance.git"+# Changer l'URL d'un dépôt distant 
 +$ git remote set-url origin ".git
 + 
 +# Renommer un dépôt distant 
 +git remote rename origin newname
 </code> </code>
  
-Remplacer ''origin'' par le nom du dépôt+Remplacer ''origin'' par le nom du dépôt distant
  
  
 +===== Lister changements d'un commit =====
 +
 +Obtenir la liste de tous les fichiers modifiés par un commit donné
 +
 +<code bash>
 +git diff-tree --no-commit-id --name-only -r <commit id>
 +</code>
 +
 +Source : http://stackoverflow.com/questions/424071/how-to-list-all-the-files-in-a-commit
 +
 +
 +===== Comparer deux branches =====
 +
 +Liste tous les fichiers qui diffèrent entre deux branches :
 +
 +<code bash>
 +git diff --stat=120 branche1..branche2
 +</code>
 +
 +Source : http://stackoverflow.com/questions/9834689/comparing-two-branches-in-git#9834872
 ===== Changer date d'un commit ===== ===== Changer date d'un commit =====
  
Ligne 63: Ligne 183:
  
 Source : http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git Source : http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git
 +
 +===== Changer auteur d'un commit =====
 +
 +<file bash git-author-rewrite.sh>
 +#!/bin/sh
 +
 +git filter-branch --env-filter '
 +
 +OLD_EMAIL="arnaud@jacquemin.info"
 +CORRECT_NAME="Arnaud Jacquemin"
 +CORRECT_EMAIL="arnaud.jacquemin+framagit@free.fr"
 +
 +if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
 +then
 +    export GIT_COMMITTER_NAME="$CORRECT_NAME"
 +    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
 +fi
 +if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
 +then
 +    export GIT_AUTHOR_NAME="$CORRECT_NAME"
 +    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
 +fi
 +' --tag-name-filter cat -- --branches --tags
 +</file>
 +
 +===== Annuler un commit =====
 +
 +==== Non poussé ====
 +
 +
 +Supprimer définitivement le dernier commit non poussé :
 +
 +<code bash>
 +git reset --hard HEAD~1
 +</code>
 +
 +
 +Supprimer le dernier commit non poussé tout en conservant les modifications dans la staging area :
 +
 +<code bash>
 +git reset --soft HEAD~1
 +</code>
 +
 +
 +==== Déjà poussé ====
 +
 +Revenir dans l’étant du commit précédent en appliquant un nouveau commit qui est exactement l’opposé du précédent : très pratique pour annuler un commit qui a déjà été poussé, et qu’on ne peut donc pas supprimer du dépôt central sans gêner les collaborateurs :
 +
 +<code bash>
 +git revert HEAD~1
 +</code>
 +
 +Source : http://gebeo.info/2014/05/13/git-annuler-le-dernier-commit/
 +
 +
 +Annuler partiellement un commit déjà poussé :
 +
 +<code bash>
 +git revert <sha-of-bad-commit> --no-commit
 +git reset   # sortir les modification de la staging area
 +# effectuer les éventuelles corrections souhaitées
 +git add <file> # ajouter les modifications souhaitées dans le staging
 +git checkout . # pour ne pas modifier les autres fichiers (d'où l'annulation partielle)
 +git commit
 +</code>
 +
 +Source : http://stackoverflow.com/questions/5669358/can-i-do-a-partial-revert-in-git#5669428
  
  
Ligne 68: Ligne 255:
  
 <code bash> <code bash>
-ssh login@ssh.cluster006.ovh.net+LOGINOVH=login 
 +ssh ${LOGINOVH}@ssh.cluster006.ovh.net
 #Sur le serveur OVH #Sur le serveur OVH
-mkdir -p ~/sources/nom_projet.git +NOMPROJET=nom_projet 
-cd ~/sources/nom_projet.git+mkdir -p ~/sources/${NOMPROJET}.git 
 +cd ~/sources/${NOMPROJET}.git
 git init --bare git init --bare
 </code> </code>
Ligne 77: Ligne 266:
 <code bash> <code bash>
 #En local #En local
-cd ./nom_projet +NOMPROJET=nom_projet 
-git remote add ovh ssh://login@ssh.cluster006.ovh.net/home/login/sources/nom_projet.git+LOGINOVH=login 
 +cd ./${NOMPROJET} 
 +git remote add ovh ssh://${LOGINOVH}@ssh.cluster006.ovh.net/home/${LOGINOVH}/sources/${NOMPROJET}.git
 git push ovh master git push ovh master
 </code> </code>
Ligne 85: Ligne 276:
  
 A lire aussi : https://blog.jtlebi.fr/2013/11/30/gerer-son-site-avec-git-sur-un-serveur-mutualise/ A lire aussi : https://blog.jtlebi.fr/2013/11/30/gerer-son-site-avec-git-sur-un-serveur-mutualise/
 +
 +
 +===== Corriger error: refs does not point to a valid object =====
 +
 +<code bash>
 +git repack -a && rm ./objects/info/alternates
 +</code>
 +
 +Cf. http://randyfay.com/content/git-clone-reference-considered-harmful
 +
 +
 +===== Supprimer un tag =====
 +
 +<code bash>
 +git push --delete origin tagname
 +git tag -d tagname
 +</code>
 +
 +Source : http://stackoverflow.com/questions/5480258/how-to-delete-a-remote-tag
 +
 +
 +===== Supprimer toutes les modifications locales =====
 +
 +Remove untracked files from the current directory as well as any files that Git usually ignores.
 +
 +<code bash>
 +# Undo changes in tracked files
 +git reset --hard
 +# Remove untracked files
 +git clean -df
 +</code>
 +
 +Source : https://www.atlassian.com/git/tutorials/undoing-changes/git-clean
 +
 +
  • memo/git.1419252637.txt.gz
  • Dernière modification : il y a 11 ans
  • de Arnaud Jacquemin