Git tari ? Oh!
Par Jean-Seb le dimanche, octobre 3 2010, 21:46 - Coding - Lien permanent
Un nouveau billet sur l'intarissable Git
Et en avant la musique!
Note : cet article a été écrit en collaboration avec
Frédéric Jolliton
Résumé de l'épisode précédent
- La configuration et les commandes de bases de Git ont déjà été abordées.
- 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)
- Par la suite, on y fera référence sous le nom de
- 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!
Commentaires
On rencontre généralement les repos "bare" sous le nom "repo.git" plutot que "repo", surement pour indiquer que le répertoire en question ne contient que le contenu du répertoire ".git" des dépots normaux, sans working copy (sans les fichiers sur lesquels on travaille (mais travailler est un bien vilain mot tant il est plaisant d'utiliser git, n'est ce pas ?)).
Bref, ceci dit pour tatilloner.