Bonjour à tous, ce début d’année est consacré à une réflexion sur comment faire tel ou tel chose avant de se lancer dans un truc et de ce dire j’aurais mieux faire autrement.

Avec tous les projets prévus cette année j’ai décidé de commencer par mettre en place Git sur l’ensemble de mon infrastructure pour gagner en flexibilité, en efficacité et aussi en suivi des fichiers des modifications de l’ensemble des fichiers importants (scripts / fichiers de configuration / etc…).
Si l’utilisation en est assez simple après avoir compris son fonctionnement, le choix de la solution à utiliser pour héberger ses repositories est plus compliqué.

La vraie question est auto hébergé avec Gitlab (ou autre) ou en ligne sur la plateforme avec Gitlab ou Github (surtout depuis cette semaine ou les repositories privés sont devenus gratuits).

Après plusieurs comparaisons et tests dans tous les sens au final je vais partir sur l’utilisation de Gitlab en ligne pour des raisons de fonctionnalités comme la gestion des groupes qui n’hésite pas à ma connaissance sous Github.
Le fait que je n’héberge pas mon “Serveur Git” me permet aussi de na pas avoir à me soucier des points suivants :

  • La mise à jour et le maintien de la solution auto hébergée
  • La gestion des sauvegardes et surtout les tests de restauration
  • La réplication des sauvegardes vers un environnement externe à mon infrastructure

Vient ensuite le choix de l’utilisation ou non d’un “browser” graphique, mais après pas mal de tests je pense que je vais partir pour mon Imac avec le logiciel SourceTree.

Pour ma part sur 90% de mes machines soit l’ensemble de serveurs je n’utiliserais pas de version dit “graphique” avec l’environnement de git mais uniquement la ligne de commande pour mettre à jour des repositories , voir mon article sur l’utilisation de git en ligne de commande.

Je pense avoir fait le tour, il ne reste plus qu’à trouver comment organiser tous les repositories et de mettre cette solution en place, ce qui est prévu courant de ce mois.

Bonjour

Dans l’article précédent nous avons vu comment installer son propre serveur Git sous GitLab, maintenant déployons notre premier projet.

Ces commandes sont valide pour un OS basé sur Débian dont Ubuntu 12.04 que j’utilise.

Il faut dans un premier temps installer git avec la commande :

apt-get install git

Ensuite nous allons passer à la configuration, avec un repository nécessitant une authentification ou simplement pour bien identifier votre identité lors de commit, vous pouvez définir votre nom et email de façon permanente (peut être modifié par la suite en retapant cette commande, mais vous évite de le faire à chaque commit) :

git config --global user.name "ThorAndCo"
git config --global user.email thorandco@domaine.fr

Ensuite nous allons voir les points suivants :

Gérer ses dépots

Dans les exemples suivants, je vous propose de se baser sur les valeurs suivantes :

  • Le répertoire local du projet : /home/git/monprojet
  • Le dépot distant est sur GitLab : http://git.domaine.fr
  • Le repo distant est accessible sur : git.domaine.fr/thorandco/monprojet.git

Créer un nouveau projet vide sur un dépot git vide

cd /home/git
mkdir monprojet
cd monprojet
git init
touch README
git add README
git commit -m 'Premier Commit'
git remote add origin git.domaine.fr/thorandco/monprojet.git
git push -u origin master

 Initialiser un projet git depuis un dépôt existant

cd /home/git
mkdir monprojet
cd monprojet
git init
git remote add git.domaine.fr/thorandco/monprojet.git
git pull -u origin master

Utilisation de git durant le développement

Ajouter un fichier au prochain commit

 git add monfichier.txt

Ajouter tous les fichiers créés ou modifiés au prochain commit

git add -A

Commiter sur le dépôt git local

La commande commitera les fichiers ajoutés précédemment avec un commentaire « Ajout du fichier monfichier.txt». Si besoin, il vous sera demandé de vous authentifier par la suite.

git commit -m "Ajout du fichier monfichier.txt"

Modifier le message du dernier commit

Cette commande ne fonctionnera que si vous n’avez pas encore pushé sur le serveur distant. Elle permet de changer le message joint au dernier commit.

git commit --amend -m "Ajout du fichier monfichier.txt pour le projet"

Ou simplement la commande suivante qui vous ouvrira votre éditeur de texte préféré pour modifier le texte :

git commit --amend

Voir l’historique des commits

git log

Annuler un commit

Avant un push, pour annuler tous les commits fait depuis la dernière synchronisation git avec le dépôt distant :

git reset HEAD

et de même, mais uniquement sur un fichier :

git reset HEAD nomdufichier.txt

Récupérer un fichier dans sa dernière version commitée

git checkout -- monfichier.txt

Récupérer les sources du dépôt distants

git fetch
git pull origin master

Gérer les conflits git lors d’une synchronisation

Si une erreur survient (conflit sur dse fichiers), vous pouvez au choix :

  • Faire un checkout local (ignore vos modification locales et les remplace par la source distante)
  • Stocker la version dans un autre répertoire (stash) pour la retravailler proprement
  • Fusionner les sources (merge)

Pusher ses commit sur le dépot distant

Pour pousser sur le depot origin, dans la branch master :

git push origin master

Annuler un commit en particulier déjà pushé

Dans un premier temps, vous récupérer l’id du commit à annuler, par exemple en consultant les logs :

git log

Puis, vous annulez le commit en question :

git revert XXX

ou XXX est l’id du commit à annuler.

Puis vous pushez proprement avec

git push

Annuler les N derniers commits déjà pushés

La même méthode est employée, mais vous pouvez utiliser la commande suivante qui annulera par exemple les 3 derniers commits. Il vous restera alors à pusher proprement.

git revert HEAD~3

Les branches

Nous allons dans notre exemple vouloir créer une branche dev pour tester des modifications

Créer un branche dev

git branch dev

et pour créer une branche et switcher directement dessus :

git checkout -b dev

Lister les branches

git branch -v

Changer la branche courante

git checkout dev

Supprimer une branche

git branch -d dev

Récupérer une branche du dépôt git distant en local

git checkout -b dev origin/dev

Merger (fusionner) une branche avec une autre

Par exemple, pour fusionner la branche « dev» avec la branche « master » :

git checkout master
git merge dev

Statistiques

Connaitre le nombre de commit git par utilisateur

git shortlog -sn

 

Bonjour

Ca fait un certain temps que je me dis qu’il faudrait que je fasse du versionning de mes fichiers en particulier de mes scripts et tout centraliser dans un dépôt commun.

Après avoir testé par mal de chose comme :

  • GitHub (gratuit mais uniquement pour des repositories public) et ne voulant pas payer pour ça, je l’ai éliminé de la liste.
  • Venait ensuite Bitbucket que j’avais retenu dans ma short list mais bon ça reste externalisé.

Ce week end on m’a parlé de GitLab et j’ai donc été “forcé” de tester, et j’avoue que je l’ai adopté.

Avoir son propre serveur Git auto-hébergé ça n’a pas de prix.

Dans un premier nous allons voir l’installation qui est des plus simple, il suffit de vous rendre sur la page dédié à votre version d’OS pour moi Ubuntu 12.04 et de suivre les quelques lignes ci dessous :

wget https://downloads-packages.s3.amazonaws.com/ubuntu-12.04/gitlab_7.3.2-omnibus-1_amd64.deb
apt-get install openssh-server
apt-get install postfix # Select 'Internet Site', using sendmail instead also works, exim has problems
dpkg -i gitlab_7.3.2-omnibus-1_amd64.deb

Puis une fois ces commandes passées, il faut éditer le fichier /etc/gitlab/gitlab.rb pour rajouter l’adresse externe de votre serveur Git

nano /etc/gitlab/gitlab.rb
# Change the external_url to the address your users will type in their browser
external_url 'http://git.domaine.fr

Une fois ce fichier modifié on lance la configuration de l’application avec la commande :

gitlab-ctl reconfigure

Une fois la procédure de configuration terminé vous pouvez vous connecter à l’adresse suivante http://git.domaine.fr avec le compte par défaut qui est :

Utilisateur : root

Password : 5iveL!fe

Il ne vous reste plus qu’à configurer votre GitLab et créer votre premier projet.