# YBlog - Git en solo
Keywords: git, svn, workflow

Anglais ↓ Menu ↓

# Git en solo

Màj : Actuellement j’utilise github avec des repository privés. Je paye une somme très raisonnable pour ce service. Si vous voulez être complètement autonome, je vous conseille d’utiliser gitolite sur votre propre serveur accessible sur le web.

J’utilise Git pour gérer mes projets personnels. J’ai un repository centralisé et tous mes ordinateurs se synchronisent avec lui. Cependant, dans la documentation officielle, je n’ai pas trouvé clairement ce que je souhaitais.

En d’autres termes, si vous souhaitez utiliser le type de workflow que SVN proposait avec Git (et ses avantages), voici comment procéder.

## Initialisation

Disons que j’ai déjà un projet et que je veuille en créer un nouveau.

    cd to/project/directory/
    git init
    git add
    git commit

Maintenant tous les fichiers du répertoire `to/project/directory/` sont versionnés. Si vous voulez ignorer certains fichiers il suffit de modifier le fichier `.gitignore`.

Par exemple voici le mien :

    *.swp
    .DS_Store
    ikog.py.bak
    output/Scratch/assets
    output/Scratch/en
    output/Scratch/fr
    output/Scratch/multi

Ensuite, il faut placer ce projet dans un répertoire accessible via Internet.

    git clone --bare . /path/to/repository

Màj: La meilleure solution est d’installer gitolite pour installer un serveur git sur sa machine. Gitolite permet de gérer la gestion des droits d’utilisateurs, ceux-ci n’ayant pas accès à un shell sur la machine.

Maintenant à partir de n’importe quel ordinateur, voici ce que vous pouvez faire :

    git clone protocol://path/to/repository local_directory

et `local_directory` contiendra un projet à jour.

Je vous conseille de faire la même opération sur l’ordinateur qui à servi à créer le projet de façon à vérifier que tout fonctionne correctement.

## L’utilisation courante

Pour résumer vous avez maintenant un repository sur Internet et un ou plusieurs ordinateurs lui sont associés. Maintenant il faut que tout soit toujours synchronisé.

Avant de commencer à travailler, la première chose à faire est de récupérer les modification à partir d’Internet vers votre poste local :

    git pull

Ensuit vous pouvez travailler en faisant (plusieurs fois) :

    hack, hack, hack...
    git add some files
    git commit

Quang vous voulez envoyez les modifications locales sur Internet, il suffit de faire :

    git push

Tout devrait être bon.

Si vous avez des problèmes avec le `push` et le `pull` ; vérifiez votre fichier `.git/config`. Il devrait contenir les lignes suivantes :

    ...
    [remote "origin"]
    	url = protocol://url/of/the/repository
    	fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
    	remote = origin
    	merge = refs/heads/master
    ...

## Synchronisation des branches

Bien, maintenant que tout semble bon, il faut encore s’occuper de quelques petites choses (sinon, SVN suffirait). Git est complètement orienté sur la décentralisation et la création de nouvelles branches sur le même poste. Synchroniser des branches sur plusieurs serveurs différent n’est pas une opération naturelle.

C’est pourquoi j’ai créé deux simples scripts pour automatiser cette opération. Un script pour créer un branche localement et en ligne. Un autre script pour récupérer les branches en lignes qui ne sont pas présente localement.

Ainsi, lorsque je veux créer une nouvelle branche (localement et ligne) ; je lance le script :

`git-create-new-branch branch_name`

et quand je suis sur un autre ordinateur et que je veux récupérer les branches crées sur un autre poste, j’exécute :

`git-get-remote-branches`

Voici le code des deux script (en zsh) :

    #!/usr/bin/env zsh

    if (($#<1)); then
        print -- "usage: $0:t branch_name" >&2
        exit 1
    fi

    branch=$1
    git br ${branch}
    git co ${branch}
    git config branch.${branch}.remote origin
    git config branch.${branch}.merge refs/heads/${branch}

    #!/usr/bin/env zsh

    # recup branches not on local
    localbranches=( $(git br | sed 's/\*/ /') )
    remoteMissingBranches=( $(git br -r | \
        egrep -v "origin/HEAD|(${(j:|:)localbranches})" ) )
    for br in $remoteMissingBranches; do
      branch=${br#origin/}
      print "get remote branch $branch"
      git br ${branch}
      git config branch.${branch}.remote origin
      git config branch.${branch}.merge refs/heads/${branch}
    done

RSS · Tweet · FB
Ces liens sociaux préservent votre vie privée
↑ Top ↑
Published on 2009-08-18
Follow @yogsototh
Yann Esposito©
Done with Vim spacemacs & nanoc Hakyll

ADA: `DdzFFzCqrhtAvdkmATx5Fm8NPJViDy85ZBw13p4XcNzVzvQg8e3vWLXq23JQWFxPEXK6Kvhaxxe7oJt4VMYHxpA2vtCFiP8fziohN6Yp`