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 :
- 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 :
mount
Si exec n’est pas ajouté, tentez :
mount -o remount,defaults,exec /chemin/partition
- 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) :
cd /chemin/vers/depots/git/hooks/
chmod a+x post-receive
- 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 :
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 :
- avoir crée le dépôt /depots/publics/projet à l’aide de la commande :
git clone --bare /depots/officiels/monprojet /depots/publics/projet
- avoir ajouté un dépôt externe via la commande :
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 :
- soit on ajoute --export-all dans le fichier /etc/sv/git-daemon/run à la ligne qui donne les dépôts
- soit on ajoute le fichier git-daemon-export-ok dans les dépôts dont nous avons besoin d’un accès
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 :
- Dossier où se trouvent les fichiers pour gitweb : /var/www/git
- Dossier où se trouvent les dépôts : /srv/depots/git
Il faut :
- avoir un dépôt de type --bare (pas obligatoire, mais dans ce cas il faut y accéder par le dossier .git)
- utiliser la commande git update-server-info dans CHACUN des dépôts qu’on veut partager via le net
- Mettre ceci dans Apache :
<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
- origine : serveur.org
- destination : destination.org
- utilisateur : git (sur les deux machines)
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