2012-01-29 4 views
0

J'ai deux serveurs exécutant git, une instance principale avec gibier installé et un autre sur un nuage. Je voudrais les garder égaux. Chaque poussée que j'effectue sur ma machine locale doit aller vers les deux serveurs ou la synchronisation du serveur principal avec le cloud. Comment puis-je le faire? Y a-t-il un moyen simple? Devrait-il être fait sur ma machine locale ou sur le serveur principal?Comment pousser git vers deux serveurs (miroir)

Répondre

3

Vous pouvez ajouter plusieurs URL à une seule télécommande. Ce que vous devez faire est, sur votre machine locale, tout d'abord créer un correspondant distant au serveur gitorious:

git remote add -m master remotename ssh://gitorious-server/path 

Vous devez ajouter à nouveau l'URL du serveur gitorious comme une URL push explicite:

git remote set-url --add --push remotename ssh://gitorious-server/path 

puis faire la même chose pour le serveur cloud:

git remote set-url --add --push remotename ssh://cloud-server/path 

Cela devrait mettre en place une configuration où chaque fois que vous exécutez git push localement, votre chang es seront poussés vers les deux serveurs. Mais lorsque vous exécutez git pull (ou git fetch), il ne récupère que depuis le serveur Gitorious. Cela devrait être tout ce qui est nécessaire, si les serveurs doivent rester synchronisés.

Si vous ne poussez que vers l'un ou l'autre serveur à partir de cette machine locale particulière, alors c'est tout ce dont vous avez besoin. Mais si vous poussez sur l'un ou l'autre serveur à partir d'un autre ordinateur, vous devrez faire la même configuration sur chacun de ces autres ordinateurs. S'il y a suffisamment d'ordinateurs pour que cela devienne difficile, ou si d'autres personnes ont un accès en écriture aux deux référentiels et que vous ne leur faites absolument pas confiance pour obtenir la configuration correcte, vous feriez mieux de faire quelque chose du côté serveur. Ce serait la méthode de hook post-réception que manojlds mentioned. Pour être clair, si vous utilisez la méthode post-réception, ne pas utiliser la méthode à distance double URL décrite dans la partie précédente de mon message.

1

Le moyen idéal serait de configurer un crochet post-receive sur votre repo gitorious qui pousse à votre repo nuage.

+0

Salut, Avez-vous un exemple de crochet? – dextervip

0

manière la plus simple serait d'écrire une fonction bash et l'appliquer dans votre ~/.profile ou ~/.bashrc ou ~/.bash_profile (en supposant Unix) exemple:

function gitpushall { 
    git push -u origin master 
    git push -u foo master 
} 

Ensuite, exécutez source .profile pour l'appliquer à votre login et exécuter gitpushall

Questions connexes