Résumé de l'épisode précédent

  • Cette fois, nous nous penchons sur l' utilisation de Git au quotidien.
  • repo sera l'abréviation de repository dans la suite du texte.


Déterrons le SSH de guerre

  • Vous voulez héberger un repo Git.
  • Si possible, vous souhaiteriez le repo Git hébergé ne nécessite pas un énième binaire troué et des heures de configuration ?
    • Utilisez ssh, au moins il n 'y aura que ça à mettre à jour.


Vous ne le ferez qu'une fois
  • Créez un groupe git qui servira pour les droits d'accès de vos utilisateurs.
    • groupadd git
  • Créez un home pour le/les repo(s) à héberger.
    • mkdir /home/git
  • Modifiez les droits et les propriétaires.

boss # chown votrelogin.git /home/git
boss # chmod 770 /home/git

boss # ls /home/git -lhd
drwxrwx--- 3 jseb git 4,0K aoû 19 17:50 /home/git

  • Vous êtes le propriétaire de /home/git, et les utilisateurs abilités seront dans le groupe git.


  • Éditez le fichier /etc/shells et ajoutez une entrée avec l'emplacement de git-shell
    • Ce fichier donne la liste des shells autorisés par le système.
    • git-shell est un shell restreint qui permet uniquement l'utilisation de git.
    • Les utilisateurs que vous créerez utiliseront ce shell.


A faire pour chaque utilisateur
  • Notre utilisateur sera le fameux toto.

useradd -d /home/git/ -G git -m -s /usr/bin/git-shell toto

  • -d /home/git : home de l'utilisateur.
  • -G git : il fait partie du groupe git.
  • -m : créer le home si il n'existe pas déja (et y copie /etc/skels/)
  • -s /usr/bin/git-shell : shell restreint de l'utilisateur.


  • Eventuellement, permettez à l'utilisateur d'utiliser ssh.
    • Ce n'est pas obligatoire, et dépend de votre config sshd.
    • sshd_config : AllowUsers toto
  • Si vous utilisez l'authentification interactive, n'oubliez pas de donner un mot de passe à votre utilisateur.
  • Faire un test de login.
    • ssh doit vous envoyer paître.

$ ssh toto@192.168.1.1
Password:
Last login: Thu Aug 20 19:23:37 CEST 2009 from 192.168.1.42 on ssh
fatal: What do you think I am? A shell?
Connection to 192.168.1.1 closed.

  • C'est normal, git-shell ne permets pas ce genre de choses.



Création d'une repo bare

  • Une repo bare, c'est une repo dont vous ne verrez jamais le contenu directement.
  • Elle sert juste à distribuer des fichiers entre les utilisateurs.
  • Par exemple, les commandes checkout ne fonctionneront pas.



Côté serveur ssh
  • mkdir repo
  • cd repo
  • git init --bare

$ git init --bare
Initialized empty Git repository in /home/gitfoogit/

$ ls
config  description  HEAD  hooks  info  objects  refs

  • ls liste des fichiers qui sont normalement dans .git
  • Pas la peine de faire un git branch -a, il n'y a pas de branches.



Côté client

$ git remote add repo_remote ssh://jseb@192.168.1.1/home/git/repo

$ git push repo_remote mmap

  • On ajoute le serveur à la liste des repositories.
    • Par la suite, on y fera référence sous le nom de repo_remote
    • repo_remote est donc le nom du serveur (voir .git/config)
  • Une fois le serveur ajouté, on pushe les modifications.
    • mmap est le nom de la branche que j'ai poussé sur le serveur.



Clonage par un utilisateur
  • Maintenant que les sources ont été pushées dans le repo, n'importe quel utilisateur peut y accéder.

$ git clone ssh://toto@192.168.1.1/home/git/repo
Initialized empty Git repository in /tmp/votre_repo/.git/
Password:
remote: Counting objects: 21, done.
remote: Compressing remote: objects: 100% (13/13), done.
remote: Total 21 (delta 7), reused 21 (delta 7)
Receiving objects: 100% (21/21), 432.15 KiB, done.
Resolving deltas: 100% (7/7), done.
Warning: Remote HEAD refers to nonexistent ref, unable to checkout.

  • Le repo est presque disponible pour toto.
    • La dernière ligne indique qu'aucune branche n'est disponible.


  • Nous allons merger ce qui a été récupéré.

$ git branch -a
  origin/mmap

$ git merge origin/mmap

$ git branch -a
* master
  origin/mmap

  • La première commande récupère le nom de la branche qui a été clonée.
    • origin est le nom par défaut du repo distant (voir .git/config)
  • La seconde effectue le merge.
  • La troisième vérifie qu'une branche est maintenant disponible.
  • Éventuellement, on peut renommer la branche master en mmap
    • git branch -m master mmap



Le repo du guerrier

  • N'hésitez pas à poster vos méthodes et remarques, ainsi que tout ce qui concerne votre utilisation de Git au quotidien.
  • Il y aura surement d'autres billets sur Git, d'ailleurs je crée derechef le tag.
    • Hop!