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).

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 :

Pour les hooks je me suis notĂ© qu’il faut :

mount

Si exec n’est pas ajoutĂ©, tentez :

mount -o remount,defaults,exec /chemin/partition
cd /chemin/vers/depots/git/hooks/
chmod a+x post-receive

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 :

sh /chemin/vers/mon/script.sh

Ce qui a l’avantage d’avoir le script quelque part dans la machine ;)

Il est possible de faire la mĂŞme chose en supprimant le fichier post-receive et en faisant un lien symbolique :

cd hooks
rm post-receive
ln -sf /chemin/vers/mon/script.sh post-receive

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… )

Les codes sont Ă  mettre dans un hook, par exemple post-receive.

Système D

## 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

Plus propre

Requis :

git clone --bare /depots/officiels/monprojet /depots/publics/projet
git remote add origin /depots/officiels/monprojet

Ensuite on peut utiliser le code suivant :

cd /srv/toile/depots/panheroic
git fetch origin && git reset -- refs/remotes/origin/master > /dev/null

Avec un plugin Redmine

Un plugin Redmine existe pour simplifier la vie : https://github.com/kahseng/redmine_gitolite_hook/blob/master/README.rdoc

OU un autre encore : https://github.com/ericpaulbishop/redmine_git_hosting

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 :

cd /chemin/vers/mon/depots/git/
git archive maBranche | /bin/tar -x -U -C /destination/voulue/

Ă€ noter que maBranche n’est pas obligatoire.

Accès public à un dépôt

Via le protocole git://

Si on utilise l’outil git-daemon-run, rendre un dĂ©pĂ´t public n’est pas compliquĂ©.

Il y a deux méthodes :

Il ne reste alors plus qu’Ă  rĂ©cupĂ©rer le dĂ©pĂ´t de la manière suivante :

git clone git://SERVEUR/nom_depot.git

Via le protocole http:// en mĂŞme temps que Gitweb

Notes :

Il faut :

<VirtualHost *:80>
        ServerAdmin admin@domaine.tld
        ServerName git.domaine.tld

        DocumentRoot /srv/depots/git
        SetEnv GITWEB_CONFIG /etc/gitweb.conf

        RewriteEngine on
        RewriteRule ^/$                                            /gitweb [PT]
        RewriteRule ^/(.*<br/>.git/(?!/?(HEAD|info|objects|refs)).*)?$ /gitweb%{REQUEST_URI}  [L,PT]

        # Aliases
        ScriptAlias /gitweb           /var/www/git/gitweb.cgi
        Alias       /gitweb.css       /var/www/git/gitweb.css
        Alias       /git-logo.png     /var/www/git/git-logo.png
        Alias       /git-favicon.png  /var/www/git/git-favicon.png
</VirtualHost>

Ainsi vous accĂ©dez Ă  gitweb via l’adresse suivante : http://git.domaine.tld/ et allez dans les projets avec http://git.domaine.tld/mon_projet.git/ mais vous pouvez aussi faire :

git clone http://git.domaine.tld/mon_projet.git

VĂ©rifier le contenu du dossier /var/www/git Ă  l’aide d’un ls -l, il semblerait que gitweb.cgi soit devenu index.cgi.

Il faudrait donc remplacer la ligne suivante :

ScriptAlias /gitweb           /var/www/git/gitweb.cgi

par :

ScriptAlias /gitweb           /var/www/git/index.cgi

Utilisateur de Gitolite, pour vous simplifier la vie avec git update-server-info, faites un lien symbolique vers le dossier .gitolite comme ceci :

ln -sv /usr/share/git-core/templates/hooks/post-update.sample /srv/depots/git/.gitolite/hooks/common/post-update

Puis lancez Ă  nouveau gl-setup pour mettre Ă  jour ce qu’il faut.

Et le tour est joué !

Lien : Configurer gitweb pour les accès HTTP avec git (en)

Via SSH

git clone UTILISATEUR@SERVEUR:mon_depot.git

Migration d’un dĂ©pĂ´t d’un serveur Ă  un autre

git clone git@serveur.org:projets/mondepot.git
cd mondepot.git
git remote add -m master -t master --tags distante ssh://git@destination.org:PORT/projets/mondepot.git
git push -f --all distante
git push --tags distante
git checkout --track autrebranche
git push distante autrebranche