Git
Un serveur Git
Installation
aptitude install git-core
Création/Initialisation d'un dépôt
Il y a certainement mieux pour initialiser mais bon. Voilà une méthode de A-Z d'initialisation d'un nouveau repos :
- En local sur un client :
mkdir mon_projet cd mon_projet git init
- Ensuite on y met nos premiers fichiers :
touch README
- On fait notre premier ajout/commit :
git add . git commit
- Ensuite on le clone au format bare :
cd .. git clone --bare monprojet monprojet.git
- Ensuite on met notre clone sur un serveur public :
scp -r monprojet.git/ user@srv:public_git/monprojet.git/
- On peut ensuite faire un clone du projet en local :
git clone ssh://user@srv/home/user/public_git/monprojet.git monprojet_local
- On peut maintenant utiliser ce clone normalement : add, commit, push, …
Mise en place d'un accès via git-daemon
- Éditer le fichier /etc/inetd.conf et ajouter la ligne suivante :
git stream tcp4 nowait root /usr/bin/git-daemon -- --inetd --syslog --verbose --export-all --base-path=[BASE] --timeout=60 --user-path=public_git
- [BASE] : le chemin de base de l'accès = la racine des urls d'accès
- Exemple:
- URL :
git://srv/toto
- [BASE] : /home
- Alors la racine du repos sera /home/toto
- –user-path : Le dossier dans les homes des utilisateurs qui seront partagé grâce à une URL en ~user (ici ~toto = $HOME/public_git)
- Restart openbsd-inetd : /etc/init.d/openbsd-inetd restart
Avec git-daemon-run
- Installer le paquet git-daemon-run :
apt-get install git-daemon-run
- Editer le fichier de lancement du daemon : /etc/sv/git-daemon/run
- Exemple d'une configuration avec un utilisateur git :
#!/bin/sh exec 2>&1 echo 'git-daemon starting.' exec chpst -ugit \ "$(git --exec-path)"/git-daemon --verbose --reuseaddr --export-all --enable=receive-pack \ --base-path=/home/git /home/git
Pour contrôler le service :
- Démarrage :
sv start git-daemon
- Arrêt :
sv stop git-daemon
- Redémarrage :
sv restart git-daemon
Suivie des logs dans le fichier : /var/log/git-daemon/current
Accès au serveur
Renseigner son profil git
git config --global user.email "user@email.com" git config --global user.name "User Name"
Remarque : Les infos sont stockées dans ˜/.gitconfig
Clone
- Via protocole Git :
git clone git://srv/~toto/monprojet monprojet_local
- Via SSH :
git clone ssh://toto@srv/home/toto/public_git/monprojet monprojet_local
monprojet_local : Chemin local du repo
Track d'une branche distante
git checkout -b prod origin/prod
Utilisation courante
- Connaitre le statut des fichiers modifié/ajouté/supprimé :
git status
- Ajouter un nouveau fichier :
git add file1 file2 ...
- Supprimer un fichier :
git rm file1
- Bouger/renomer un fichier :
git mv file-old file-new
- Commiter (local) :
git commit [-a]
- Envoyer ses commits sur le serveur remote :
git push
- Récupérer les derniers commits des autres dans son repos :
git pull
- Modifier le dernier commit (non propagé) :
- Faire les modifications souhaitées et les ajouter avec la commande git add
- Commiter en modifiant le dernier commit :
git commit --amend
- Modifier un commit spécifique (non propagé) :
- Via “fixup” :
- commiter vos modifications à fusionner dans le précédent commit via la commande suivante en indiquant l'ID du commit à modifier
git commit --fixup=38b184620e5d0da47de4c6d7ed81e807af479fb2
- exécuter ensuite la commande suivante en indiquant l'ID du commit à modifier (attention au
^
à la fin de l'ID du commit) :git rebase --interactive '38b184620e5d0da47de4c6d7ed81e807af479fb2^' --autostash --autosquash
- Via une édition manuelle :
- exécuter la commande suivante en indiquant l'ID du commit à modifier (attention au
^
à la fin de l'ID du commit) :git rebase --interactive '38b184620e5d0da47de4c6d7ed81e807af479fb2^' --autostash
- Dans l'éditeur s'ouvrant, repérer la ligne spécifiant le commit à modifier et remplacer
pick
paredit
. Enregistrer et quitter l'éditeur. - Effectuer la modification souhaitez puis commiter à l'aide de la commande suivante :
git commit --all --amend --no-edit
- Vous pouvez constater que votre commit à bien été modifié à l'aide de la commande
git show
- Pour revenir à votre working tree intégrant vos commits suivants, exécuter la commande suivante :
git rebase --continue
- Supprimer le dernier commit (en conservant les modifications) :
git reset HEAD^
- Supprimer le dernier commit (en suppriant les modifications) :
git reset --hard HEAD^
Remarque : C'est la même chose qu'un git fetch puis un git merge
- Voir la liste des commits :
git log
Remarque : On peut rajouter un nom de fichier pour voir seulement les commits impactant ce fichier.
- Générer des patchs à partir de vos commits :
- repérer dans
git log
l'ID du commit précédent le(s) commit(s) pour lesquel vous souhaitez générer les patchs - lancer la commande suivante :
git format-patch [ID commit précédent]
- Appliquer un patch sans comiter :
git apply [patch]
- Appliquer un patch et le comiter avec les informations fournis dans celui-ci :
git am --signoff -k < [patch]
Remarques :
- le paramètre
–signoff
permet d'ajouter une ligne Signed-off-by: dans le message du commit avec vos informations. - le paramètre
-k
permet de conserver les éventuels flag présent dans le message de commit (infos entre crochets)