Git push / clone vers un nouveau serveur

127

J'apprends juste Git et il y a quelque chose que je n'arrive pas à résoudre. Après avoir créé et utilisé un référentiel git localement sur mon Mac, puis-je envoyer une copie vers un autre serveur ailleurs? Je suis derrière un pare-feu donc malheureusement je ne peux pas courir git clonedepuis l'autre machine.

Jacob
la source

Réponses:

137
  1. git remote add URL du nom
  2. git push nom branche

Exemple:

git remote add origin [email protected]:foo/bar.git
git push origin master

Voir la documentation pour git push- vous pouvez définir une télécommande comme télécommande par défaut pour une branche donnée; sinon, le nom originest spécial. Tout git pushseul fera la même chose que cette git push origin branche (quelle que soit la branche sur laquelle vous vous trouvez).

Hobbs
la source
7
Pour un effet plus proche en tant que "clonage push" plutôt que de simplement pushinh une _branch_ : git push -u --allnous pouvons omettre origincar c'est le nom supposé par défaut pour le push et suivrons-u également les branches distantes.
cregox
13
Il devrait suffire de créer un référentiel vide vide sur le serveur en utilisant git init --bare /foo/bar.git, puis d'y pousser votre dépôt local (comme dans cette réponse). Vous n'avez pas besoin de transférer quoi que ce soit avec zippé / taré vers le serveur.
OderWat
1
Appuyant OderWat. Pour l'exemple, faites le 'git init --bare foo / bar.git' tout en étant connecté à la télécommande (c'est-à-dire [email protected]), puis 'l'origine distante' aura une destination vers laquelle pousser. Pour l'exemple de github, je pense que vous pouvez utiliser l'interface Web Repository / Add de github, puis suivre les conseils "Pousser un dépôt existant à partir de la ligne de commande". Github conseille à un '-u' de provoquer une référence de suivi.
Dave X
Cette méthode peut être canonique, mais elle est obtuse et rend git moins utilisable. Je m'aime un peu con, mais bon Dieu, il a des problèmes d'interface utilisateur ..
Ross Rogers
J'ai pris la liberté de supprimer le paragraphe «EDIT» qui a été ajouté à la question initiale, ce qui donnait l'impression que cette procédure était discutable. Je ne pense pas que ce soit le cas, et cela aurait probablement dû être un commentaire au lieu d'une question de toute façon.
August Lilleaas
75

Ce que vous voudrez peut-être faire, c'est d'abord, sur votre machine locale, créer un clone nu du référentiel

git clone --bare /path/to/repo /path/to/bare/repo.git  # don't forget the .git!

Maintenant, archivez le nouveau répertoire repo.git en utilisant tar / gzip ou quel que soit votre outil d'archivage préféré, puis copiez l'archive sur le serveur.

Désarchivez le dépôt sur votre serveur. Vous devrez ensuite configurer une télécommande sur votre référentiel local:

git remote add repo-name user@host:/path/to/repo.git #this assumes you're using SSH

Vous pourrez alors pousser et extraire du référentiel distant avec:

git push repo-name branch-name
git pull repo-name branch-name
Grant Limberg
la source
4
Pouvez-vous expliquer le commentaire "n'oubliez pas le .git!"? Où est le point d'ajouter .git à la fin du dossier? Quand dois-je faire ça? Une convention seulement?
lombaire
5
Le ".git" est juste la norme non officielle pour identifier un dépôt git nu
Grant Limberg
3
Je ne suis pas cette idée ... cela ne brise-t-il pas l'objectif de configurer un serveur git et de l' utiliser pour "transférer / copier / garder les choses synchronisées / sauvegarder" plutôt que de compresser et d'utiliser une autre méthode?
cregox
1
C'est exactement ce dont j'avais besoin, car le dépôt d'origine était sur un réseau qui n'avait pas accès au réseau sur lequel le serveur que je voulais pousser existait. Cela m'a permis de mettre le repo sur une boîte qui y avait accès.
michaeltwofish
3
@Cawas vous n'avez qu'à compresser / copier / extraire manuellement le dépôt une seule fois. après cela, tout ce dont vous avez besoin est git push and pull.
Sparebytes
9

Il existe de nombreuses façons de déplacer les référentiels, git bundlec'est un bon moyen si vous avez une disponibilité réseau insuffisante. Puisqu'un référentiel Git n'est en réalité qu'un répertoire plein de fichiers, vous pouvez "cloner" un référentiel en faisant une copie du .gitrépertoire de la manière qui vous convient le mieux.

Le moyen le plus efficace est d'utiliser un référentiel externe quelque part (utilisez GitHub ou configurez Gitosis ), puis git push.

Greg Hewgill
la source
7
remote server> cd /home/ec2-user
remote server> git init --bare --shared  test
add ssh pub key to remote server
local> git remote add aws ssh://ec2-user@<hostorip>:/home/ec2-user/dev/test
local> git push aws master
jazzé
la source
J'aime la simplicité de votre réponse, mais je ne sais pas si c'est ce dont j'ai besoin ou non. J'ai un référentiel GIT existant sur GitHub, et je veux maintenant pousser les fichiers en direct sur notre serveur Ubuntu (sur lequel GIT est installé). Pouvez-vous ajouter quelques commentaires pour rendre le processus plus clair?
Dave Everitt
1

Vous pouvez pousser une branche vers un serveur distant, disons github . Vous devez d'abord effectuer la configuration initiale du projet, puis cloner votre projet et:

git push <remote repo> <your branch>
César
la source