web-dev-qa-db-fra.com

git Clone à travers SSH

J'ai un projet sur lequel j'ai créé un dépôt git:

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

Je voulais créer un clone nu sur une autre machine:

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  

J'ai exécuté le clone, mais aucune réponse n'a été imprimée .. Je me suis connecté au serveur et j'ai essayé de voir comment les fichiers étaient stockés. Le chemin/GitRepos était vide, alors j'ai décidé de refaire le clone: 

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git

Cette fois, la réponse fut:

fatal: le chemin de destination 'ssh: // utilisateur @ serveur: /GitRepos/myproject.git' existe déjà et n'est pas un répertoire vide.

Mais j'ai vu que le chemin était vide.
Que se passe t-il ici ?

183
dlsa

Cela n’est peut-être pas directement lié à la question; mais une erreur que je viens de commettre moi-même, et je vois dans l'OP, est la spécification d'URL ssh://user@server:/GitRepos/myproject.git, à savoir que vous avez à la fois un deux-points : et une barre oblique / après qui signifie un chemin absolu.

J'ai ensuite trouvé Git clone, ssh: impossible de résoudre le nom d'hôte - git, développement - Nicolas Kuttler (car c'était l'erreur que je rencontrais, sur la version 1.7.9.5 de git), notant:

Le problème avec la commande que j'ai utilisée initialement était que j'ai essayé d'utiliser une syntaxe similaire à scp.

... qui était aussi mon problème! Donc, fondamentalement, dans git avec ssh, vous pouvez soit utiliser 

  • ssh://[email protected]/absolute/path/to/repo.git/ - juste une barre oblique pour le chemin absolu sur le serveur
  • [email protected]:relative/path/to/repo.git/ - seulement deux points (il ne doit pas avoir le ssh:// pour le chemin relatif sur le serveur (par rapport au répertoire personnel de username sur la machine du serveur)

J'espère que ça aide quelqu'un,
À votre santé!

186
sdaau

Pour les dépôts sur GitHub, essayez:

git clone ssh://[email protected]/<user>/<repository name>.git

Pour configurer git à cloner via ssh, voir:

99
dsrdakota

Vous devez exécuter la commande clone sur ce que vous appelez le serveur. Mais je parie que vous n’exécutez pas de serveur ssh sur votre client local, cela ne fonctionnera pas de toute façon. Vous suggérons de suivre cette approche (consultez le manuel car je le fais de mémoire)

  1. Connectez-vous à la machine du serveur.
  2. Créer un rapport nu en utilisant git init --bare 
  3. Sur la machine client, vous pouvez envoyer votre référentiel sur le serveur. git remote add Origin ssh://user@server:/GitRepos/myproject.git suivi de git Push Origin master
42
Alec the Geek

Git 101:

git est un système de contrôle de version décentralisé. Vous n'avez pas nécessairement besoin d'un serveur pour vous familiariser avec git. Néanmoins, vous voudrez peut-être faire cela car ça a l'air cool, non? (Cela est également utile si vous souhaitez travailler sur un seul projet à partir de plusieurs ordinateurs.)

Donc, pour faire fonctionner un "serveur", vous devez exécuter git init --bare <your_project>.git car cela créera un référentiel vide, que vous pourrez ensuite importer sur vos machines sans avoir à perdre des fichiers de configuration dans votre répertoire .git.

Après cela, vous pouvez cloner le référentiel sur vos clients comme il est supposé fonctionner, mais j'ai constaté que certains clients (à savoir git-gui) ne parviendraient pas à cloner un référentiel complètement vide. Pour contourner ce problème, vous devez exécuter cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git Push Origin master. (Notez que vous devrez peut-être configurer votre nom d'utilisateur et votre courrier électronique pour le git de cette machine si vous ne l'aviez pas déjà fait auparavant. Les commandes à exécuter seront dans le message d'erreur que vous obtenez, je vais donc simplement les omettre.)

Donc, à ce stade, vous pouvez cloner le référentiel sur n’importe quelle machine simplement en exécutant git clone <user>@<server>:<relative_path><your_project>.git. (Comme d'autres l'ont déjà fait remarquer, vous devrez peut-être le préfixer avec ssh:// si vous utilisez le chemin absolu.) Cela suppose que vous pouvez déjà vous connecter depuis votre client au serveur. (Vous obtiendrez également des points bonus pour la configuration d'un fichier de configuration et de clés pour ssh, si vous avez l'intention de transférer beaucoup de choses sur le serveur distant.)

Quelques liens pertinents:
Cela vous dit à peu près ce que vous devez savoir.
Et ceci est destiné à ceux qui connaissent le fonctionnement de base de git mais oublient parfois la syntaxe exacte.

4
Wolfer

Je souhaite tenter une réponse comprenant git-flow et trois «points» ou cas d'utilisation, le référentiel central git, le développement local et la machine de production. Ce n'est pas bien testé .

Je donne des commandes incroyablement spécifiques. Au lieu de dire <your folder>, je dirai /root/git. Le seul endroit où je modifie la commande d'origine est de remplacer mon nom de serveur spécifique par example.com. Je vais expliquer le but des dossiers afin que vous puissiez l’ajuster en conséquence. S'il vous plaît laissez-moi savoir de toute confusion et je mettrai à jour la réponse.

La version de git sur le serveur est 1.7.1. Le serveur est CentOS 6.3 (Final).

La version git sur la machine de développement est la 1.8.1.1. C'est Mac OS X 10.8.4.

Le référentiel central et la machine de production sont sur la même machine.

le référentiel central, auquel les utilisateurs svn peuvent se référer en tant que «serveur», est configuré comme suit. J'ai un dossier /root/git où je garde tous mes dépôts git. Je souhaite créer un référentiel Git pour un projet appelé "fleurs".

cd /root/git
git clone --bare flowers flowers.git

La commande git a donné deux messages:

Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.

Rien à craindre.

Sur la machine de développement, la configuration est la suivante. J'ai un dossier /home/kinjal/Sites où je mets tous mes projets. Je veux maintenant obtenir le référentiel central git.

cd /home/kinjal/Sites
git clone [email protected]:/root/git/flowers.git

Cela me conduit à un point où je peux commencer à ajouter des éléments. J'ai d'abord mis en place Git Flow

git flow init -d

Par défaut, il s'agit de la branche develop. J'ajoute mon code ici, maintenant. Ensuite, je dois m'engager dans le référentiel central git.

git add .
git commit -am 'initial'
git Push

À ce stade, il a poussé à la branche de développement. Je veux aussi ajouter ceci à la branche principale.

git flow release start v0.0.0 develop
git flow release finish v0.0.0
git Push

Notez que je n'ai rien fait entre le début et la fin de la publication. Et lorsque j'ai terminé la publication, on m'a demandé de modifier deux fichiers. Cela a poussé la branche de développement à maîtriser.

Sur le site de production, qui se trouve sur le même ordinateur que mon référentiel git central, je souhaite placer le référentiel dans /var/www/vhosts/example.net. J'ai déjà /var/www/vhosts.

cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net

Si la machine de production se trouvait également sur une autre machine, la commande git clone ressemblerait à celle utilisée sur la machine de développement.

2
Kinjal Dixit

Au début, je manque un peu dans mes compétences GIT.

Cela va cloner un référentiel nu sur votre machine, qui ne contient que les dossiers de .git qui est un répertoire caché. exécutez ls -al et vous devriez voir .git ou cd .git dans votre référentiel.

Pouvez-vous ajouter une description de votre intention afin qu'une personne ayant davantage de compétences en TI puisse vous aider? Qu'est-ce que vous voulez vraiment faire et comment vous comptez le faire?

2
Andrew T Finnell

J'ai fait: Git clone --bare "/ GITREPOSITORIES/RepoA" "ssh: // luc @ EERSTENASDS119J/volume1/RepoA" Résultat: Fatal: chemin de destination ssh: // luc @ EERSTENASDS119J/volume1/RepoA 'existe déjà et n'est pas un répertoire vide.

Le système a créé un répertoire ssh: // luc @ EERSTENASDS119J/volume1/RepoA dans mon chemin actuel.

Donc, le clone git n’interprète pas la spécification de l’URL . Utilise la solution de contournement d’Alec.

0
Luc Depoorter

Disclaimer: Ceci est juste une copie d'un commentaire de bobbaluba rendu plus visible pour les futurs visiteurs. Cela m'a aidé plus que toute autre réponse. 


Vous devez supprimer le préfixe ssh:// lorsque vous utilisez git clone à titre d'exemple. 

git clone [email protected]:owner/repo.git
0
Pztar