Table des matières

Versionner son code avec Git

Pour suivre ce tutoriel, il faut bien sur avoir un compte sur GitHub. L'accès est gratuit et très réputé au près des développeurs : https://github.com

Après avoir suivi ce tutoriel, nous allons pourvoir organiser notre code source avec Git.

Pour visualiser les branches facilement, nous pouvons utiliser l'utilitaire gitg ou grv.

Pré-requis

Pour commencer, son installation est simple sous Linux puisqu'il suffit de faire :

apt install git

Les fichiers de configurations se situent dans :

Ainsi la configuration minimale doit être dans le fichier ~/.gitconfig :

[user]
    name = Bruno Tatu
    email = brnotatu@domaine.com
[pull]
    rebase = true
[push]
    default = simple
[core]
    editor = vim

Mémorisation du mot de mot de passe durant 15 minutes :

git config --global credential.helper cache

Travailler dans son dépôt

Dans le cas d'un développement seul sans collaborateur, on peut commencer par initier son dépôt en local :

mkdir projet && cd projet
git init
git clone https://your_repository.git
git add fichier1 fichier2 fichier3
git commit -m "Mon intitulé"
git commit -am "Mon nouvel intitulé"
git commit --amend
git log
git log --graph --date-order
git status
git push

Créer sa branche de travail

Admettons que nous voulons travailler sur un projet spécifique sans vouloir déranger le branche principal :

git checkout -b nouvelle-branche

Après quelques modifications d'un code source et après avoir commité ;

git push -u origin nouvelle-branche

-u équivaut à –set-upstream

git pull
git checkout master
git merge nouvelle-branche
git branch -d nouvelle-branche

Éditer le projet sur une nouvelle branche (fork)

Admettons que l'on souhaite participer à un projet libre, on télécharge le projet puis on créer notre propre branche.

git clone https://github.com/Fusing/irc2telegram.git
git checkout -b nouvelle-branche
git request-pull origin/master nouvelle-branche
#
git push
# ou
git checkout master
git merge nouvelle-branche
git branch -d nouvelle-branche
git push origin --delete branche2

Un commit de retard

Il peut arriver qu'un collaborateur push un commit avant le vautre alors que l'on a oublier de faire un pull juste avant son propre commit. Dans ce cas, il est possible de déplacer notre commit vers la dernière position du commit en cours.

git rebase master
git rebase --abort
git cherry-pick <SHA1> <SHA1>

Gérer les dépôts distant

git remove show origin
git remove rename ancien-nom nouveau-nom
git remote rm dépôt
git remote set-url origin git@gitea.$DOMAIN.org:$DOSSIER/$NOM-DEPOT.git

Gestion des versions

git tag v0.01
git show v0.01
git push origin --tags

Corriger son dernier commit

git add mon-fichier-editer
git commit --amend

Remisage

git stash -u
git stash apply [stash@{2}]
git stash drop [stash@{2}]
git stash pop
git stash show -p stash@{2}

Cloner une seule branche

Admettons que le projet est gros et que nous avons une faible bande passante. Il sera alors intéressant de télécharger qu'une seule branche :

git clone -b branche1 --single-branch http://git.bruno-tatu.com/test.git

On voudrait merger le travail mais on a besoin de la branche principale (master). Il faudra alors éditer le fichier suivant :

nano .git/config

et remplacer le mot branche1 par master et indiquer que l'on accepte le rebase :

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = http://git.bruno-tatu.com/test.git
        fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
        remote = origin
        merge = refs/heads/master
        rebase = true

Il restera plus qu'a faire la récupération :

git fetch origin

Cloner une seconde branche

Il est possible de télécharger une seconde branche sans avoir celle du master :

git remote set-branches --add origin branche2
git fetch origin branche2:branche2
git checkout branche2

Suite aux modifications, faites un commit pour l'envoyé sur le serveur :

git add fichier3.txt 
git commit -am "ajout fichier3-branche2"
git push -u origin branche2

D'autres commandes

# faire "git a"
git config --global alias.a add

# faire "git l"
git config --global alias.last 'log -3 HEAD'

# faire "git s"
git config --global alias.s status
git reset --hard <tag/branch/commit id>
git revert <commit id>
nano .gitignore
_site/
git rm --cached _site/ -r
git diff
git mergetool
git rm fichier.txt
git mv fichier.txt destination/fichier.txt
git push origin branche1:branche2
git branch -m ancien nouveau
git reset HEAD fichier.txt
git reset --hard
git blame fichier.txt
git show HEAD~1
git show -p HEAD~3..HEAD~1
git remote set-url origin utilisateur@mon-domaine.com:adresse/depot/utilisateur/distant.git
git checkout -B 16 d171d1aff8df2f784c1814ef93a63cdfc3749335 
https://stackoverflow.com/questions/26570242/how-to-move-master-to-head
git branch -f master $ID
git checkout master