73 votes

Comment déplacer mon dépôt Git local vers un dépôt Git distant ?

J'ai plusieurs projets Git qui sont sur ma machine locale. J'ai un serveur que j'aimerais utiliser comme dépôt Git distant. Comment puis-je déplacer mes dépôts Git locaux (projets) vers mon serveur tout en conservant l'historique intact ?

Merci !

EDIT : Merci pour toutes ces bonnes réponses. La réponse que j'ai choisie est logique par rapport à mes connaissances limitées de GIT.

EDIT #2 : J'ai remarqué que ma sélection de réponse originale n'a pas copié mes balises. git push --mirror <path> fait des balises de copie.

71voto

knittl Points 64110

Sur votre serveur, créez les dépôts git en tant que dépôts nus.

git init --bare repo.git

puis, poussez les commits de votre dépôt local

git push --mirror ssh://yourserver/~/repo.git

0 votes

Si je fais cela, n'importe qui pourra-t-il cloner mon repo ? (s'ils connaissent l'adresse)

0 votes

@sliders_alpha : s'ils ont un accès SSH à votre serveur et que le référentiel a les autorisations appropriées, alors oui.

2 votes

Il y a tellement de merde à ce sujet. Merci pour le meilleur et le plus facile des moyens !

69voto

Dor Shemer Points 5669

Tout d'abord, créez un dépôt git sur votre serveur.

git init --bare /path/to/repo

Ajoutez ensuite le dépôt distant à votre dépôt local (ssh:// ou https://).

git remote add origin ssh://server/path/to/repo

Et, pousser les fichiers/commissions

git push origin master

Et enfin, pousser les balises

git push origin --tags

2 votes

Je préfère celle-ci car l'option --mirror (de l'aide git :) "Les refs locales nouvellement créées seront poussées vers l'extrémité distante, les refs mises à jour localement seront mises à jour de force sur l'extrémité distante, et les refs supprimées seront supprimées de l'extrémité distante".

1 votes

Cela ne fonctionne pas pour moi. Le dépôt distant reçoit toutes sortes de fatal: This operation must be run in a work tree des erreurs si j'essaie de faire quoi que ce soit avec elle

0 votes

Cela fonctionne bien pour moi, j'ai ajouté la ligne pour pousser les balises également. Note : le protocole ssh:// peut aussi être https://.

12voto

iwein Points 4957

Il existe un bon tutoriel sur Le blog de Ralf Wernders . En supposant que vous savez comment créer un référentiel sur le serveur, ou que cela a déjà été fait :

git remote add <remote> <url>

Pour ajouter une télécommande à votre référentiel local. <remote> est le nom du distant (souvent "origine"). <url> est l'url de votre dépôt avec accès en écriture (comme git@...)

git push <remote> <branch>

Pour déplacer les commits vers l'origine. <branch> est la branche que vous poussez (souvent "master").

0 votes

Cette question ne concerne pas github. C'est à propos de git

0 votes

Si vous voulez pousser et tirer vous pouvez ajouter git push --set-upstream origin master

4voto

Femaref Points 41959

Créez un dépôt git sur le serveur (vous pouvez utiliser gitolite/gitosis ou juste un compte utilisateur normal + pubkey ssh auth), ajoutez le serveur à votre dépôt git local en utilisant

git remote add name url

et utiliser git push -u name master ( -u marque la branche actuelle comme étant en cours de suivi afin que vous puissiez simplement git pull au lieu de git pull name master ).

Du côté du serveur (système basé sur Debian) :

adduser --system --home /home/git --bash /bin/bash git
su - git
mkdir .ssh
cat yourkey.pub > .ssh/authorized_keys

Maintenant, créez un nouveau référentiel nu pour chaque référentiel local en utilisant

mkdir projectName
cd projectName
git init --bare

Après cela, l'url serait git@yourserver:projectName .

0 votes

Il demande un mot de passe. Quel mot de passe dois-je utiliser ?

3voto

Daniel Pittman Points 7394

Si vous voulez un dépôt normal (par exemple : non nu), copiez-le simplement. Il n'y a rien de spécial à faire.

Si vous voulez utiliser un dépôt nu sur le serveur, il suffit de l'initialiser sur le serveur, de l'ajouter comme dépôt distant sur la copie "locale", puis de le pousser vers lui. ( git push --mirror fera tout passer).

0 votes

Cela ne fonctionne pas pour moi. sur la télécommande, mkdir somefolder; cd somefolder; git init . Sur le plan local git push --mirror ssh://remote/somefolder . Résultat remote: error: refusing to update checked out branch: refs/heads/master

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X