2010-08-30 12 views
1

Je vais transférer des dépôts Git d'un ancien serveur SCM vers un nouveau. Ma principale préoccupation (autre que la fidélité, bien sûr) est de minimiser les temps d'arrêt. Voici mon plan:Comment déplacer des dépôts Git et minimiser les temps d'arrêt

  1. Sur la nouvelle machine, cloner chaque dépôt en utilisant git clone --mirror
  2. Copie sur des crochets de prise en pension pour chaque dépôt
  3. accès Disallow à l'ancien serveur (nous utilisons gitosis, donc supprimer l'accès pour tous les utilisateurs sauf pour le nouveau serveur)
  4. Déplacez l'entrée DNS afin que les utilisateurs Git de l'alias DNS utilisent
  5. Exécutez git pull pour chaque référentiel sur le nouveau serveur. Pour chaque référentiel sur le nouveau serveur, modifiez le fichier de configuration pour supprimer la section remote "origin".
  6. Activez l'accès au nouveau serveur

Questions:

  1. Est-ce correct? Je suis spécifiquement concerné par l'étape # 6.
  2. Y a-t-il un moyen de le faire pour réduire les temps d'arrêt?

Merci.

Répondre

1

Je (s'il n'y a pas de communication possible entre l'ancien serveur et nouveau serveur):

    bundle
  • chaque repo using git bundle
  • copie le paquet sur le nouveau serveur
  • créer repo nus
  • git fetch de ces paquets dans chacun des repo vide vide (aucune origine à définir)
  • copie survoler les crochets
  • accès Disallow à l'ancien serveur
  • faire un dernier paquet git sur chaque repo (faisceau supplémentaire, très rapide)
  • copier ces petits paquets
  • git fetch l'incrément des petits paquets supplémentaires
    </temps d'arrêt : pas d'origine pour supprimer >
  • rétablir l'accès

En cas de communication possible (par SSL) entre le nouveau et l'ancien serveur:

  • Je voudrais créer une « migration » spécial utilisateur gitosis, avec tous les projets accès
  • clone --bare chaque projet sur la nouvelle serveur
  • copie planent les crochets
  • accès à Disallow ancien serveur
  • une dernière git fetch sur chaque repo cloné
  • supprimer origine </arrêt >
  • restaurer l'accès
+0

Merci pour votre aide, VonC. Il y a une connectivité entre les deux cases, donc j'utiliserai clone pour déplacer le contenu du repo. En outre, merci pour le pick-up sur la copie des crochets. J'ai manqué ça. Je pense que clone --mirror est meilleur que clone --bare dans ce scénario car le miroir est le plus nue et ajoute l'origine au fichier de configuration. Y at-il quelque chose à propos de clone --mirror je ne sais pas ce qui vous ferait ne pas le recommander? – StretchyBill

+0

@StretchyBill: 'git clone --mirror' me semble bien, déjà utilisé dans les techniques de sauvegarde comme dans http://stackoverflow.com/questions/1251713/backup-of-github-repo ou http://stackoverflow.com/questions/1694608/dépôt-cloné-dépôt-dans-git-le-maître/1694832 # 1694832 – VonC