Anthony Cassaigne
git config --global user.name "Prénom Nom"
git config --global user.email mon_email@example.comPour lister la configuration
git config --listOn peut également éditer le fichier ~/.gitconfig
git clone http://url/depot.git- En indiquant un chemin absolut.
git clone ssh://gituser@little/home/gituser/anthony_atelier- En indiquant un chemin relatif.
git clone gituser@little:anthony_ateliergit guiIl faut un peu de configuration sous OS X
- Pour contrôler ce que l’on commit !
- Pour commiter des ensembles cohérent.
- On peut même commiter une partie de fichier.
- Modifier un fichier et utiliser ces commandes.
git add
git commit –m "message de commit"- Modifier un fichier
git status- Créer un fichier
git status- Ajouter à l'index ces deux fichiers et commiter
git add fichier1 fichier2
git commit -m "message"git push- les commits sont identifiable via les SHA1
ba74ed1dae5d2b25618f0a8a43a57218c432da46C'est un peu long la plupart du temps il suffit d'utiliser la forme courte
ba74ed1quelques commandes à tester donnant une mise en forme différente.
git log
git log --pretty=oneline
git log --pretty=oneline --abbrev-commit
git log --pretty=oneline --abbrev-commit --decorateL'option --stat
git log --stat
...
blog/Sandro_Mancuso_SCPPP.rst | 17 ++++++++---------
draft/pelican.rst | 18 ++++++++++++++++++
2 files changed, 26 insertions(+), 9 deletions(-)
donne des statistiques en nombre de lignes supprimées et ajoutées pour chaque fichier (texte) du commit.
L'option -p donne les parties du fichier qui sont modifiés.
Voir le contenu d'un fichier à une version donnée :
git show SHA1:./filename.txtPour obtenir cette version il faut utiliser la commande checkout
git checkout SHA1 filename.txtVous souhaitez obtenir ce fichier avec un autre nom ?
git show SHA1:./filename.txt > toto.txt- Partir sur un dépôt dont la commande git status retourne
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory cleanQue donne la commande
git diffModifier un fichier, que donne la commande
git diffMettre le fichier dans l'index ou la zone de staging
git addQue donne la commande
git diffgit diff C1 C2Est différent de
git diff C2 C1
git diff 7904654 62d62b0- Cette commande
git diff 7904654 62d62b0- Donne les différences sur tous les fichiers appartenant aux commits.
- Si l'on ne veut comparer qu'un fichier
git diff 7904654 62d62b0 filename.txtPour cela il nous faut configurer l'usage de notre outil préféré. Exemple de configuration sous windows.
[diff]
tool = winmerge
[difftool "winmerge"]
cmd = "winmerge.sh \"$LOCAL\" \"$REMOTE\""
[difftool]
prompt = false
git add -allAjouter toutes les modifications et commité !
git ci -a -m "Message de commit"git reset --hard HEADgit reset --hard HEADAu sein des messages de commit ::
git log --grep "<PATTERN>"Chercher au sein du code ::
git log --stat -G'STRING'
git log -p -S'STRING'Chercher une chaine de caractère qui a été effacé au sein du code.
git log -p -S'STRING' --diff-filter=DChercher dans les fichiers du répertoire de travail mais uniquement pour les fichiers sous révision
git grep -e 'STRING'Chercher dans les fichiers du répertoire de travail mais uniquement pour les fichiers sous révision
git grep -e 'STRING'Chercher uniquement dans les fichiers ayant l'extension .c
git grep -e 'STRING' -- '*.c'Chercher au sein des fichiers stockés dans l'index
git grep --cached -e 'STRING' -- '*.c'- Copier une branche
git branch copie_branche branche_existante- Pour créer une branche sur un ancien commit
git branch ma_branche 96a31f2314c091121996positionner un tag sur le commit courant
git tag mon_tagVoir les tags
git tag -nle -n donne le message associé.
la liste des tags avec le SHA1 ::
git show --summary --oneline --decorate#Amélioration de l'environnement...
########################################################################
# Matthew's Git Bash Prompt
########################################################################
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
BLUE="\[\033[0;34m\]"
LIGHT_RED="\[\033[1;31m\]"
LIGHT_GREEN="\[\033[1;32m\]"
WHITE="\[\033[1;37m\]"
LIGHT_GRAY="\[\033[0;37m\]"
COLOR_NONE="\[\e[0m\]"
function parse_git_branch {
git rev-parse --git-dir &> /dev/null
git_status="$(git status 2> /dev/null)"
branch_pattern="^# On branch ([^${IFS}]*)"
remote_pattern="# Your branch is (.*) of"
diverge_pattern="# Your branch and (.*) have diverged"
if [[ ! ${git_status}} =~ "working directory clean" ]]; then
state="${RED}⚡"
fi
# add an else if or two here if you want to get more specific
if [[ ${git_status} =~ ${remote_pattern} ]]; then
if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
remote="${YELLOW}↑"
else
remote="${YELLOW}↓"
fi
fi
if [[ ${git_status} =~ ${diverge_pattern} ]]; then
remote="${YELLOW}↕"
fi
if [[ ${git_status} =~ ${branch_pattern} ]]; then
branch=${BASH_REMATCH[1]}
echo " (${branch})${remote}${state}"
fi
}
function git_dirty_flag {
git status 2> /dev/null | grep -c : | awk '{if ($1 > 0) print "⚡"}'
}
function prompt_func() {
previous_return_value=$?;
#The lowercase w is the full current working directory
#prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE}"
#Capital W is just the trailing part of the current working directory
prompt="${TITLEBAR}${BLUE}[${RED}\W${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE}"
if test $previous_return_value -eq 0
then
PS1="${prompt}> "
else
PS1="${prompt}${RED}>${COLOR_NONE} "
fi
}
PROMPT_COMMAND=prompt_func- simple
- plus évolué
- A regarder.
##Bon le git add c'est lourd !
- Essayons git number
##Installation git number
git clone https://github.com/holygeek/git-number
cd git-number
cp git-* ~/bin
vi ~/.bashrc
# alias
alias gn='git number --column'
alias ga='git number add'#Les branches
##Création d'une branche
git branch ma_branche- Maintenant il faut travailler dans la branche
git checkout ma_branche- merge de la branche test dans master.
git checkout test
... modifs, commit ...
git checkout master
git merge testgit branch test
git checkout test
vi a.txt
.... modifier le fichier
ga 1
git ci -m "ma modif"
git checkout master
git merge kkk##Interruption !
- Je travail sur une évolution
- On me demande en urgence un correctif !
- ha non pas un commit à motié fonctionnel
- vive git stash
git stash- plus exactement une sorte de pile
git stash list- récupérer le dernier stash
git stash apply- récupérer un stash particulier
git stash apply stash@{2}- Lors du rebase git va rejouer un à un les commits de la branche que l'on rebase.
- Dans notre exemple l'ensemble des commit qui sont de couleur bleu sur la branche jaune.
- En cas de conflit il nous faudra comme dans un merge réaliser un choix :
- prendre la version du fichier de la branche bleue ?
- prendre la version du fichier de la branche jaune ?
- ou éditer ce fichier et en faire une autre version.
Création des commits sur la branche master
Commit C1
echo Hello > a.txt
git add a.txt
git commit -m "Hello"Commit C2
echo Salut >> a.txt
git add a.txt
git commit -m "Salut"
git branch bleueCommit C3
echo Bonjour>> a.txt
git add a.txt
git commit -m "Bonjour"Création des commits de la branche bleue
Commit B1
git checkout bleue
echo Eau > b.txt
git add b.txt
git commit -m "Eau"Commit B2
echo Vin >> b.txt
git add b.txt
git commit -m "Vin"git checkout bleue
git rebase masteret maintenant amenons master au niveau de bleue
git checkout master
git merge bleue
ou
git rebase bleue#Voici la séquence de commit
- utiliser le script
atelier_git_rebase2.sh
git init .
echo Hello > a.txt
git add a.txt
git commit -m "C1 file a.txt"
echo Salut >> a.txt
git add a.txt
git commit -m "C2 file a.txt"
echo Bonjour >> a.txt
git add a.txt
git commit -m "C3 file a.txt"
git branch bleue HEAD~1
git checkout bleue
echo Eau > b.txt
git add b.txt
git commit -m "B1 file b.txt"
echo Good morning >> a.txt
git add a.txt
git commit -m "B2 file a.txt"git checkout bleue
git rebase master
...conflit...
...pour le résoudre utiliser...
...les mêmes outils que le merge...
git status
vi a.txt
git add a.txt
git rebase --continuegit init .
echo zzzz > trash.txt
git add trash.txt
git commit -m "Start"
echo Salut > a.txt
git add a.txt
git commit -m "C1 file a.txt"
echo Eau > b.txt
git add b.txt
git commit -m "C2 file b.txt"
echo Bonjour >> a.txt
git add a.txt
git commit -m "C3 file a.txt"
echo Vin >> b.txt
git add b.txt
git commit -m "C4 file b.txt" - Connaissez-vous la notation ?
- HEAD~1
- HEAD~2
- Pour réécrire l'histoire des quatre derniers commit voici la commande
git rebase -i HEAD~4Nous entrons dans un mode intéractif. Git crée un fichier quasi identique à un fichier de log où il est possible de choisir les opérations à réaliser.
Le fichier a ce format
pick 76d2aa4 C1 message de commit
pick dc8f5fe C2 message de commit
pick 81d308a C3 message de commit
pick 9d58418 C4 message de commit- Les commits sont affichés dans un ordre chronologique (du plus ancien au plus récent). Les opérations possibles sont : pick, reword, edit, squash, fixup, exec Consulter https://help.github.com/articles/interactive-rebase
Gloups ! Presque ! D'où le
git init .
git commit --allow-empty -m "Empty commit, it's base commit !"- Réaliser des prélévements de commit.
git checkout bleue
git cherry-pick 427a6e4666466b77e18bcd01b949a3aef8e34bd8- On prélève le commit
427a6e4666(de la branche master) pour le copier sur la branche bleue.
- Lancer le script :
atelier_git_cherry-pick.sh- pour se retrouver dans la situation souhaitée
- rebase
- cherrypick
- le hunk expliquer
- configuration des branches distantes : smart, simple etc...
- rerere
- plein de workflow possible
















