Git

Vous en avez marre de chercher comment amend un commit qui date d'il y a deux semaine?
Voici une liste (non exhaustive) des commande qui sauvent la vie (ou 3 jours de dev dont 2 a chercher la bonne commande sur internet)

Domaine: 

Affichage de logs en "graphique"

Une petite commande sympa qui permet d'avoir un aperçu rapide de vos commit (et voir si vous faites des sacs de noeud avec vos branchs)

$ git log --graph --oneline --all --decorate

si vous voulez le rajouter en tant qu'alias:

$ git config --global --add alias.tree "log --graph --oneline --all --decorate"
$ git tree

Et si vous voulez un format personnalisé, vous pouvez regarder dans le man de git-log
pour obtenir par exemple le nom de l'auteur et de la date en plus:

$ git log --graph --decorate --pretty=format:'%C(auto)%h %C(yellow)[ %C(bold magenta)%cn%C(reset)%C(yellow)|%C(bold white)%ar%C(reset)%C(yellow)]%C(reset)%C(auto) %d%n %s'

%C(yellow), %C(reset) %C(auto) ... : pour la couleur
%h : hash du commit
%cn : nom de l'auteur
%ar : date du commit
%d : la décoration (nom des branch qui apparaissent (peut nécessiter le --decorate))
%n : nouvelle ligne
%s : message du commit

Affichage des commit ayant ajouté ou supprimé des fichiers

De manière simple:
ajout d'un fichier (première fois qu'il est versionné)

git log --name-status --reverse -- "sourceFile.c" |head

suppression d'un fichier (dernière fois qu'il est versionné)

git log --name-status -- "sourceFile.c" |head

(attention toutefois, si vous n'avez pas un "D" à côté du nom (par exemple un "M") le fichier existe toujours)

et de manière compliqué:
pour avoir une vue global de tous les ajout/suppression:
affiche (en jaune) le hash du commit suivi des fichier ayant été supprimé (rouge) et ajouté (vert)

git log --name-status --pretty=format:"%C(yellow)%H%Creset" --diff-filter=AD |GREP_COLORS="mt=32" egrep --color=always "^A.*$|^" |GREP_COLORS="mt=31" egrep --color=always "^D.*$|^"

Amend d'anciens commit

commit 589a5252b92bda5c9ab8ddde54ee96b3c185d947
Author: Nepta <nepta23@gmail.com>
Date:   Fri Jul 26 09:04:26 2013 +0000
 
    added labyrinth test
 
commit af07bcf4c1f1b60834f466c2996bdf1690f92867
Author: Nepta <nepta23@gmail.com>
Date:   Fri Jul 26 07:02:07 2013 +0000
 
    fix pathFinding algorithm

oups, vous avez oublié de rajouter le fichier de test du labyrinth?
ici, c'est le dernier commit donc un simple amend suffit:

$git add labyrinthTest.c
$git commit --amend

vous vous êtes rendu compte qu'en faite l'algo est pas fixé du tout ...
la solution: fixer le code, crée un nouveau commit, stash des éventuels changement non encore commiter, rebase et enfin poper ce qui à été stasher

$nano algo.c
$git add algo.c
$git commit -m  "fix pathFinding algorithm"
$git stash
$git rebase --onto af07bc~1 af07bc
$git stash pop

(source : http://www.haypocalc.com/blog/index.php/ )

De la couleur dans git

Un peu de couleurs pour égailler vos longue soirées à coder

$ git config --global --add color.ui true
$ git status

Historique de la journée

En fin de journée, ça peut être intéressant de savoir ce qui à été fait dans un projet:

$ git shortlog --since=yesterday

va vous donner un petit récapitulatif des commit de la journée, utile a faire en fin de journée pour savoir ce que les autres ont fait, ou même se rappeler ce vous avez fait dans la journée

(et l'alias:)

$ git config --global --add alias.today shortlog --since=yesterday

Mémento Git

Bonjour à tous,

Suite à l'intro sur Git que nous avons donné le 24 octobre dernier, voici comme promis en fichier joint un petit mémento des commandes de base.
Un tutoriel plus approfondi et détaillé arrive dans les prochains mois (normalement avant janvier).

Bien sûr, si vous avez la moindre question n'hésitez pas à passer au club ou à rentrer en contact avec nous via notre page facebook !

Bons commits et à bientôt,

Kidon.

Fichier attachéTaille
Icône PDF GIT Memento.pdf173.21 Ko

compter le nombre d'occurence d'une expression

$ git grep --color=never -c 'expression' |cut -d ':' -f2 |paste -sd+ |bc

petit explicatif:

$ git grep --color=never -c 'expression'

permet de compter le nombre d’occurrence de 'expression' dans le repo courant
ensuit, un peu de traitement assez simple, on récupère juste les nombres (nombre d'occurence du mot)

cut -d ':' -f2

et enfin, pour faire la somme de tout ça, nous utilisons `bc`, une calculatrice, manque juste a rajouter un '+' entre chaque nombre et ramener ça sur une seul ligne
chose faire par `paste` (-s pour tout mettre sur une ligne, et -d+ pour remplacer les séparateur par des `+`)

paste -sd+ |bc

maintenant un peu plus complexe, je veux pouvoir juste faire:

$ git count 'expression'

juste faire un alias ne suffira pas, j'ai besoin d'un paramètre qui devra se placer au début de la ligne...

l'astuce, faire une fonction:
(ref: http://stackoverflow.com/questions/3321492/git-alias-with-positional-par...)

$ git config --global --add alias.count '!f() { git grep --color=never -c $1 |cut -d ':' -f2 |paste -sd+ |bc; }; f'