web-dev-qa-db-fra.com

Synchronisation des référentiels git sur différents hôtes

Je pense à démarrer un petit projet et je veux faire son versioning avec git.

Bitbucket semble une bonne option pour moi avec leur plan gratuit. Je veux l'utiliser comme outil principal pour travailler avec git car ils ont de bons outils comme une interface web, un client Mac OS, etc. Mais, afin d'avoir une meilleure protection contre les dommages accidentels pouvant être causés par l'utilisation d'un service tiers, je souhaite également installer git sur mon NAS comme deuxième copie de sauvegarde de le référentiel.

Maintenant, ma question est de savoir s'il est possible de créer un référentiel sur deux hôtes différents, puis de les garder synchronisés? Par exemple, supposons qu'une fois par semaine, je mette à jour le référentiel sur mon NAS pour correspondre à celui sur Bitbucket. Ensuite, en cas de problème avec Bitbucket, j'aurai toujours le référentiel complet avec l'historique complet de développement sur mon local NAS stockage.

Et existe-t-il un moyen d'importer un référentiel existant avec l'historique complet vers un autre service git?


Je pense que la mise en miroir est ce dont j'ai besoin. Cette article semble décrire exactement ce dont j'ai besoin. Et cela n aussi.

Je crois qu'il fera une copie complète avec l'historique complet et même automatiquement automatiquement de nouvelles versions dans les référentiels sur les deux hôtes.

Ai-je raison?

36
BartoNaz

Oui, c'est exactement la beauté des DVCS comme git. Vous pouvez utiliser n'importe quel nombre de dépôts différents avec le même état que celui sur bitbucket ou github.

Même votre copie locale (le référentiel sur votre ordinateur) est généralement un clone complet du référentiel distant.

La seule chose que vous devez faire pour garder plusieurs dépôts synchronisés est d'en tirer un (généralement appelé Origin ou amont) et de pousser vers les copies de sauvegarde.

19
Wilbert

Voici une solution testée pour le problème: Référentiels Git distants Automatic Sync 2

Un script simple pour synchroniser 2 référentiels Git distants

J'ai recherché sur le Web un script simple qui se synchronisera. 2 référentiels distants mais je n'ai pas pu trouver un tel script même si beaucoup semblent le chercher! J'ai donc créé 2 référentiels de test simples et commencé à tester et à construire un tel script.

Que doit faire un tel script?

Eh bien, en général, les étapes pour le faire sont simples: 1. Clonez le premier référentiel 1. Ajoutez le second en tant que référentiel distant supplémentaire 1. récupérez tout ce qu'il y a dans le deuxième référentiel 1. Poussez le référentiel local mis à jour sur le 2 référentiels distants.

Le problème qui subsiste est - quels sont les bons commutateurs pour toutes les commandes git ci-dessus?

Alors le voici ...

script gisp 2repos-sync.sh

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $Origin_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch Origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git Push Origin --all
git Push Origin --tags
git Push repo1 --all
git Push repo1 --tags

[~ # ~] note [~ # ~] - ce script ne résout pas les cas de conflits entre le contenu du référentiel!

12
yorammi

J'utilise un GitLab privé pour stocker tous mes référentiels, donc je n'ai qu'une seule origine que je pousse et tire pendant que je fais du développement au jour le jour.

Mais, pour les projets open source, GitHub est une communauté beaucoup plus dynamique, donc, si je veux accepter les contributions de la communauté à mes projets, j'utilise le système de hook Web de Web GitLab pour envoyer un ping à un serveur que j'exécute, puis met à jour mes dépôts publics sur GitHub.

Cela me permet de traiter GitHub comme une autre télécommande à partir de laquelle quelqu'un peut contribuer - puis je fusionne - no-ff localement, et il y a un flux sur la façon dont tous mes référentiels principaux et publics distribuent les modifications.

0
diffalot