Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
| — |
astuces:depots:git:notes [2010/06/02 11:31] (version actuelle) olivier créée |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Présentation ====== | ||
| + | |||
| + | Cette page recense les notes de l'auteur à propos de Git. Vous trouverez possiblement des astuces ou des commandes qui pourraient vous mettre sur la voie (quand vous rencontrez un problème). | ||
| + | |||
| + | ====== Gestion de dépôts Git ====== | ||
| + | |||
| + | Pour gérer plusieurs dépôts Git de manière simple, en ayant la possibilité d'ajouter, supprimer, modifier les droits d'écritures à telle personne sur tel dépôt, je vous conseille [[http://eagain.net/gitweb/?p=gitosis.git |Gitosis]] dont nous pouvons trouver un tutoriel ici : http://www.mickael-allain.fr/index.php?post/2010/03/06/Installation-et-configuration-de-son-serveur-Git-avec-Gitosis-sous-Debian-5#installation . | ||
| + | |||
| + | ====== Les hooks : déclencher un script à l'envoi d'un commit ====== | ||
| + | |||
| + | Les hooks sont des déclencheurs qui actionnent un script selon certains évènements : | ||
| + | * avant de recevoir des modifications sur le dépôts | ||
| + | * après avoir reçu des modifications sur le dépôt | ||
| + | * pendant une mise à jour | ||
| + | * après une mise à jour | ||
| + | * etc. | ||
| + | |||
| + | Pour les hooks je me suis noté qu'il faut : | ||
| + | * vérifier que la partition sur laquelle se trouve le dépôt contient **exec** grâce à la commande : | ||
| + | <code bash> | ||
| + | mount | ||
| + | </code> | ||
| + | Si exec n'est pas ajouté, tentez : | ||
| + | <code bash> | ||
| + | mount -o remount,defaults,exec /chemin/partition | ||
| + | </code> | ||
| + | * Aller dans le dossier **hooks** et rendre exécutable le déclencheur que nous voulons et qui contient le script que nous voulons exécuter (par exemple le post-receive) : | ||
| + | <code bash> | ||
| + | cd /chemin/vers/depots/git/hooks/ | ||
| + | chmod a+x post-receive | ||
| + | </code> | ||
| + | * Ajouter le code que nous voulons effectuer | ||
| + | |||
| + | ===== Astuce ===== | ||
| + | |||
| + | Je n'aime pas le fait de mettre directement le code dans le déclencheur (hook). Du coup je préfère éditer le fichier, par exemple //post-receive// et ajouter une ligne comme : | ||
| + | <code bash> | ||
| + | sh /chemin/vers/mon/script.sh | ||
| + | </code> | ||
| + | |||
| + | Ce qui a l'avantage d'avoir le script quelque part dans la machine ;) | ||
| + | |||
| + | <note tip>Il est possible de faire la même chose en supprimant le fichier post-receive et en faisant un lien symbolique : | ||
| + | <code bash> | ||
| + | cd hooks | ||
| + | rm post-receive | ||
| + | ln -sf /chemin/vers/mon/script.sh post-receive | ||
| + | </code> | ||
| + | </note> | ||
| + | |||
| + | ====== Copie d'un dépôt en vue de l'afficher dans un outil de gestion (Redmine par exemple) ====== | ||
| + | |||
| + | C'est encore en phase de test, mais voici deux codes utilisés pour l'export d'un dépôt git dans un nouveau dépôt %%--%%bare. | ||
| + | |||
| + | Par ailleurs les dépôts ne sont pas distants mais locals (oui c'est inutile je sais… ) | ||
| + | |||
| + | <note>Les codes sont à mettre dans un **hook**, par exemple **post-receive**.</note> | ||
| + | |||
| + | ===== Système D ===== | ||
| + | |||
| + | <code bash> | ||
| + | ## Systeme D | ||
| + | rm -rf /depots/publics/projet | ||
| + | git clone --bare /depots/officiels/monprojet /depots/publics/projet | ||
| + | chown www-data:www-data /depots/publics/projet -R | ||
| + | </code> | ||
| + | |||
| + | ===== Plus propre ===== | ||
| + | |||
| + | Requis : | ||
| + | * avoir crée le dépôt **/depots/publics/projet** à l'aide de la commande : | ||
| + | <code bash> | ||
| + | git clone --bare /depots/officiels/monprojet /depots/publics/projet | ||
| + | </code> | ||
| + | * avoir ajouté un dépôt externe via la commande : | ||
| + | <code bash> | ||
| + | git remote add origin /depots/officiels/monprojet | ||
| + | </code> | ||
| + | |||
| + | Ensuite on peut utiliser le code suivant : | ||
| + | <code bash> | ||
| + | cd /srv/toile/depots/panheroic | ||
| + | git fetch origin && git reset refs/remotes/origin/master > /dev/null | ||
| + | </code> | ||
| + | |||
| + | ====== Export d'un dépôt git (équivalent svn export) ====== | ||
| + | |||
| + | Cf. http://stackoverflow.com/questions/160608/how-to-do-a-git-export-like-svn-export | ||
| + | |||
| + | La méthode que j'ai retenue : | ||
| + | <code> | ||
| + | cd /chemin/vers/mon/depots/git/ | ||
| + | git archive maBranche | /bin/tar -x -U -C /destination/voulue/ | ||
| + | </code> | ||
| + | |||
| + | À noter que **maBranche** n'est pas obligatoire. | ||
| + | |||
| + | ====== Démon Git ====== | ||
| + | |||
| + | Sous Debian, un paquet nommé **git-daemon-run** simplifie la vie pour le lancement en tâche de fond d'un démon git. | ||
| + | |||
| + | Je ne sais pas encore à quoi cela sert, mais il me semble que c'est nécessaire pour le logiciel [[https://git.wiki.kernel.org/index.php/Gitweb |Gitweb]] et [[http://hjemli.net/git/cgit/ |cgit]] (interfaces Web). | ||
| + | |||
| + | |||