Vous souhaitez que votre référentiel central soit nu. Supposons que la machine sur laquelle elle vit s'appelle static
:
$ ssh static git init --bare /git/myproject.git
Ce référentiel nu est un point de rendez-vous central: il sert à pousser et à tirer, pas à développer.
Faites votre développement sur les clones du référentiel central:
$ cd ~/src
$ git clone static:/git/myproject.git
Même si vous êtes sur static
, travaillez en clone:
$ git clone /git/myproject.git
Bien que vous soyez le seul à travailler sur ce référentiel, prenez l'habitude de faire votre travail sur ce que la documentation de git appelle les branches de rubrique . Un avantage immédiat de ceci est qu'il garde un maître propre , c'est-à-dire que vous pouvez toujours tirer de votre branche principale centrale dans le maître de votre référentiel local actuel sans fusion.
Par exemple:
$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."
Cela peut ne pas sembler être un gros problème, mais cela vous donne la liberté de laisser le projet tel que représenté sur cette branche dans un état partiellement cuit, ou si votre idée cool se révèle être un flop, vous pouvez facilement jeter cette branche sans casser quoi que ce soit d'autre dans votre projet qui travaille déjà sur d'autres branches. Des mulligans gratuits à l'infini!
Peut-être que vous rentrez chez vous ce soir-là et ajouté une nouvelle fonctionnalité. Le lendemain matin, vous
$ git checkout master
$ git pull
pour mettre à jour votre maître local pour refléter ce qui se trouve dans le référentiel central.
Mais maintenant, dites que vous avez corrigé le bogue foo et êtes prêt à l'inclure dans votre branche principale. Vous voulez d'abord l'intégrer aux changements de la nuit dernière:
$ git checkout fix-bug-in-foo
$ git rebase master
La rebase
commande donne à votre référentiel l'impression que vous avez corrigé le bogue foo en plus de la nouvelle fonctionnalité de la nuit dernière. (C'est un peu comme svn update
, mais plus flexible et puissant.)
Maintenant, pour l'obtenir dans votre maître central:
$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master
Nous traitons le maître comme spécial, mais ce n'est que conventionnel. Vous pouvez partager le travail sur différentes branches de différents référentiels via le référentiel git static
tout aussi facilement.