2009-10-27 18 views
3

J'ai un git clone/repo sur un serveur de développement, mais je passe maintenant à un autre. Je ne veux pas commettre toutes mes branches locales et les changements dans le dépôt principal, alors comment puis-je faire une copie exacte de tout sur oldserver vers le serveur de news?Déplacement d'un repo git vers un autre serveur

J'ai essayé oldserver:~$ scp -rp project newserver:~/project

mais je viens d'obtenir des charges et des charges d'erreurs « typechange » en essayant de faire quoi que ce soit sur newserver. Quelqu'un a dit quelque chose à propos de x-modes, mais comment puis-je préserver cela lors du déplacement de fichiers entre les serveurs?

Répondre

4

Si vous voulez une solution git, vous pouvez essayer

git clone --mirror <oldurl> <newurl> 

bien que ce soit seulement pour les dépôts nus.

Si cela est une prise en pension non-nu, vous pouvez aussi faire le clone normale, suivi par quelque chose comme ceci:

git fetch origin 
git branch -r | grep '^ *origin/[^ ]*$' | 
    while read rb; do git branch --no-track ${rb#*/} $rb; done 
git remote rm origin 

L'étape intermédiaire peut bien entendu se faire de 5000 façons différentes, mais c'est un ! (notez que la ligne de continuation \ n'est pas nécessaire après le pipe dans bash - il sait qu'il a besoin de plus d'entrées)

Enfin, je suggère d'utiliser rsync au lieu de scp (probablement avec des options -avz?) si vous voulez copier directement. (Quelles sont exactement ces erreurs de typechange?)

+0

Je n'ai pas de préférence particulière sur la façon de copier les fichiers, je viens de choisir scp parce que c'est ce que j'utilise habituellement. Je vais jeter un oeil à rsync et revenir à votre solution. –

+0

Je suis toujours curieux de savoir quelles sont les erreurs de typechange - elles sont en essayant d'utiliser git dans le nouveau repo? Sont-ils des problèmes de permissions? Les autorisations et la propriété sont-elles correctes sur le nouveau dépôt? – Cascabel

+0

J'ai couru 'git status' et j'ai obtenu un tas de fichiers modifiés:" typechange filename ". Mon utilisateur et mon groupe ont les mêmes noms, et les fichiers ont les mêmes permissions, sur le serveur de news que sur oldserver. –

1

J'ai effectivement fait cela, et tout ce que j'ai fait, c'est d'abord mettre le repo en place et le scp dessus. Je pense que scp -rp fonctionnerait aussi bien. "Typechange" se réfère normalement à des choses comme un lien symbolique devenant un fichier ou vice-versa. Les deux serveurs exécutent-ils le même système d'exploitation?

+0

Oui, les deux utilisent Debian Lenny.Je vais essayer de goudronner le repo avant de le scinder. –

+0

Cela expliquerait pourquoi rsync l'a corrigé - c'est un peu plus intelligent sur les liens symboliques. – Cascabel

1

Vous pouvez également essayer la solution simple et stupide - ne vous inquiétez pas sur la façon dont les typechanges sont arrivés là, mais laissez git les fixer avec une commande de réinitialisation:

git reset --hard HEAD 

Cela n'a de sens que si (1) les problèmes concernent tous les fichiers extraits (et non la structure du référentiel elle-même) et (2) vous n'avez apporté aucune modification au serveur de news que vous devez conserver. Compte tenu de ces avertissements, cela a fonctionné pour moi quand je me suis retrouvé avec le même problème, et il ne vous oblige pas à penser à l'interne de Git ou à quel point votre processus de transfert de fichiers est la préservation des attributs.

Questions connexes