Petit mémo git

J'ai mis du temps à me faire à git. Non pas que son utilisation soit particulièrement compliquée, mais plutôt parce que, comme chaque système de gestion de version, il a ses propres caractéristiques. Venant du monde bazaar et fossil je me suis un peu emmêlé les pinceaux au début. Voici donc sans prétention ma petite cheatsheet.

Création d'une nouvelle branche avec propagation upstream

  1. On se place sur la branche mère $ git checkout master
  2. On crée la nouvelle branche locale et on bascule dessus $ git checkout -b nouvelle_branche
  3. On push upstream la nouvelle branche $ git push -u origin nouvelle_branche

Suppression de branches

  • Localement $ git branch -d la_branche_a_supprimer
  • Reporter upstream la suppression $ git push origin :la_branche_a_supprimer

Création d'un « serveur »

C'est à dire héberger une instance de votre dépôt git sur un serveur quelconque (pas sur github, donc ^^) pour servir de dépôt upstream. C'est grandement inspiré de cet article.

Mise en place du dépôt sur votre machine distante :

$ cd /var/www/repositories/
$ mkdir my_project.git
$ cd my_project.git
$ git init --bare

Puis, en local :

$ cd my_project
$ git init
$ git add *
$ git commit -m "My initial commit message"
$ git remote add origin user@monserveur:/var/www/repositories/my_project.git
$ git push -u origin master

Toute la magie tiens dans le fait que user doit avoir les droits d'écriture dans /var/www/repositories/ — ce qui est normalement le cas si vous avez réussi à faire votre git init --bare.

Si vous partagez votre dépôt avec des tiers, ils n'auront qu'à faire, pour le cloner, la ligne suivante : $ git clone user@monserveur:/var/www/repositories/my_project.git

Migration d'un dépôt github en interne

Pour le coup une simple reprise de cet article.

Cette commande vous permettra cloner en bare depuis github, transformant une version « clonée » en version « serveur ». Attention, il faut avoir l’autorisation de cloner (ssh, etc.) : $ git clone --bare git@github.com:quidam/my_project.git

Puis, sur votre poste de travail, il suffit de spécifier une nouvelle origine à votre copie de travail : $ git remote set-url origin user@monserveur:/var/www/repositories/my_project.git

Mise en place d'un miroir fossil sur github

Le script suivant doit pouvoir fonctionner avec n'importe quel hébergement git. Il faut simplement veiller à modifier la ligne 15 pour filtrer le résultat de git remote avec le bon fragment.

Tout l'intérêt de ce script, comparé au classique — et documentéfossil export --git ../repo.fossil | git fast-import, vient de l'étape intermédiaire au cours de laquelle je modifie les occurrences de mon identifiant fossil vers une identité reconnue par github (ligne 11). À vous d'ajouter les traitements qui vous paraissent nécessaires à la suite de cette ligne.

 1: #!/usr/bin/env bash
 2: 
 3: # This script have to be called from a git repository
 4: 
 5: # $1 must contain the path to the fossil file to export
 6: [ -z "$1" ] && exit 1
 7: 
 8: [ -f tmp_export_file ] && rm tmp_export_file
 9: 
10: fossil export --git "$1" > tmp_export_file
11: sed -i "s/milouse <milouse>/Étienne Deparis <mon@mail.tld>/g" tmp_export_file
12: 
13: cat tmp_export_file | git fast-import
14: 
15: GITHUB_TARGET=$(git remote -v | grep 'github.com:milouse' | head -n1 | cut -f1)
16: 
17: git push $GITHUB_TARGET trunk