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

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

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

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