git克隆通过ssh

时间:2011-05-29 13:10:11

标签: git git-clone

我有一个项目,我在其上创建了一个git存储库:

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

我想在另一台机器上创建一个裸克隆:

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

我执行了克隆但没有打印任何答案。 我登录到服务器计算机并尝试查看文件的存储方式。路径/ GitRepos是空的,所以我决定再次进行克隆:

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

这次答案是:

  

致命:目标路径'ssh:// user @ server:/GitRepos/myproject.git'已经存在且不是空目录。

但是我看到路径是空的 这是怎么回事?

10 个答案:

答案 0 :(得分:192)

这可能与问题无直接关系;但是我自己做的一个错误,我在OP中看到的是URL规范ssh://user@server:/GitRepos/myproject.git - 也就是说,你有一个冒号:和一个正斜杠/一条绝对的道路。

然后我找到Git clone, ssh: Could not resolve hostname – git , development – Nicolas Kuttler(因为这是我在git版本1.7.9.5上得到的错误),注意到:

  

我最初使用的命令的问题是我尝试使用类似scp的语法。

......这也是我的问题!所以基本上在gitssh中,您可以使用

  • ssh://username@host.xz/absolute/path/to/repo.git/ - 只是服务器上绝对路径的正斜杠
  • username@host.xz:relative/path/to/repo.git/ - 只是冒号(服务器上的相对路径不得为ssh://(相对于服务器计算机上username的主目录)

希望这有助于某人,
干杯!

答案 1 :(得分:110)

对于GitHub上的存储库,请尝试:

git clone ssh://git@github.com/<user>/<repository name>.git

要设置git以通过ssh克隆,请参阅:

答案 2 :(得分:42)

您需要在要调用服务器的内容上运行clone命令。但我敢打赌你没有在你的本地客户端上运行ssh服务器,所以无论如何都无法运行。建议你遵循这种方法(检查手册'因为我是从记忆中做到这一点)

  1. 登录服务器计算机。
  2. 使用git init --bare
  3. 创建一个裸仓库
  4. 在客户端计算机上,您可以将repo推送到服务器。 git remote add origin ssh://user@server:/GitRepos/myproject.git后跟git push origin master

答案 3 :(得分:4)

Git 101:

git是一个分散版本控制系统。您无需使用服务器即可启动并运行git。你可能仍然希望这样做,因为它看起来很酷,对吗? (如果您想从多台计算机处理单个项目,这也很有用。)

因此要运行“服务器”,您需要运行git init --bare <your_project>.git,因为这将创建一个空的存储库,然后您可以在计算机上导入该存储库,而不必在{{1}中的配置文件中进行处理} dir。

在此之后,您可以克隆客户端上的repo,因为它应该可以工作,但我发现一些客户端(即.git)将无法克隆完全为空的repo。要解决此问题,您需要运行git-gui。 (请注意,如果您以前没有这样做,可能需要为该计算机的git配置用户名和电子邮件。运行的实际命令将出现在您收到的错误消息中,因此我将省略它们。)< / p>

因此,此时您只需运行cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master即可将存储库克隆到任何计算机。 (正如其他人指出的那样,如果使用绝对路径,则可能需要在前缀git clone <user>@<server>:<relative_path><your_project>.git。)这假设您已经可以从客户端登录到服务器。 (如果您打算将大量内容推送到远程服务器,您还可以获得设置ssh://配置文件和密钥的奖励积分。)

一些相关链接:
This pretty much tells you what you need to know.
And this is for those who know the basic workings of git but sometimes forget the exact syntax.

答案 4 :(得分:2)

Upfront,我有点缺乏我的GIT技能。

这将在您的计算机上克隆一个裸存储库,该存储库仅包含.git中隐藏目录中的文件夹。执行ls -al,您应该在存储库中看到.gitcd .git

您是否可以添加对意图的描述,以便具有更多GIT技能的人可以提供帮助?你真的想要做的是什么,而不是你打算怎么做?

答案 5 :(得分:2)

我想尝试一个包含git-flow和三个'点'或用例,git中央存储库,本地开发和生产机器的答案。 未经过充分测试

我正在给出令人难以置信的特定命令。我会说<your folder>而不是说/root/git。我更改原始命令的唯一地方是用example.com替换我的特定服务器名称。我将解释文件夹的用途,以便您可以相应地进行调整。请让我知道任何困惑,我会更新答案。

服务器上的git版本是1.7.1。服务器是CentOS 6.3(最终版)。

开发机器上的git版本是1.8.1.1。这是Mac OS X 10.8.4。

中央存储库和生产机器在同一台机器上。

中央存储库,svn用户可以与“服务器”相关联,配置如下。我有一个文件夹/root/git,我保留了所有的git存储库。我想为我称之为'flowers'的项目创建一个git存储库。

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

git命令给出了两条消息:

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

无需担心。

在开发机器上配置如下。我有一个文件夹/home/kinjal/Sites,我放置了所有项目。我现在想要获得中央git存储库。

cd /home/kinjal/Sites
git clone root@example.net:/root/git/flowers.git

这让我可以开始添加内容。我首先设置了git flow

git flow init -d

默认情况下,这是在分支develop上。我现在在这里添加我的代码。然后我需要提交到中央git存储库。

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

此时它推向了开发分支。我想将它添加到主分支。

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

请注意,我在发布开始和发布完成之间没有做任何事情。当我完成发布时,我被提示编辑两个文件。这推动了开发部门的掌握。

在与我的中央git存储库位于同一台计算机上的生产站点上,我想将存储库放在/var/www/vhosts/example.net中。我已经/var/www/vhosts

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

如果生产机器也在不同的机器上,git clone命令看起来就像在开发机器上使用的那样。

答案 6 :(得分:1)

免责声明:这只是bobbaluba发表的评论的副本,对于以后的访问者来说更加明显。它对我的帮助比其他任何答案都重要。


ssh://为例,您必须删除git clone前缀

git clone git@github.com:owner/repo.git

答案 7 :(得分:0)

我做到了: git clone --bare“ / GITREPOSITORIES / RepoA”“ ssh:// luc @ EERSTENASDS119J / volume1 / RepoA” 结果: 致命:目标路径'ssh:// luc @ EERSTENASDS119J / volume1 / RepoA'已经存在,并且不是空目录。

系统在我的当前路径中创建了目录ssh:// luc @ EERSTENASDS119J / volume1 / RepoA。

因此git clone没有解释URL规范。 使用了Alec的解决方法。

答案 8 :(得分:0)

尝试一下。

第1步:

ls -al ~/.ssh

enter image description here

第2步:

ssh-keygen 

(使用Enter键作为默认值) enter image description here 第3步:设置配置文件

vim /c/Users/Willie/.ssh/config
  

主持人gitlab.com
  主机名gitlab.com
  用户git
  IdentityFile〜/ .ssh / id_rsa

第4步:

git clone git@gitlab.com:<username>/test2.git

enter image description here

第5步:
完成第4步后
1. test2.git文件将被下载完成
2.您将在〜/ .ssh中获得新文件(known_hosts)
enter image description here

PS:我自己创建了id_rsa和id_rsa.ub,并将其交付给Gitlab服务器。使用任何客户端(Windows和Linux)的两个键。

答案 9 :(得分:-1)

git clone git @ server:Example / proyect.git