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