293

我有一个项目,我在其上创建了一个 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' 已经存在并且不是空目录。

但我看到这条路是空的。
这里发生了什么 ?

4

10 回答 10

256

这可能与问题没有直接关系;但是我自己犯的一个错误,我在 OP 中看到,是 URL 规范ssh://user@server:/GitRepos/myproject.git- 即,你有一个冒号:,并且在它之后有一个正斜杠/,表示绝对路径。

然后我找到了Git clone, ssh: Could not resolve hostname – git, development – Nicolas Kuttler(这是我在git1.7.9.5 版本上遇到的错误),并指出:

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

...这也是我的问题!所以基本上在gitwith中ssh,你要么使用

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

希望这对某人有帮助,
干杯!

于 2013-04-21T18:01:36.083 回答
175

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

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

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

于 2014-06-07T12:54:47.633 回答
52

您需要在您调用的服务器上运行克隆命令。但是我敢打赌,您没有在本地客户端上运行 ssh 服务器,因此无论如何它都不会工作。建议你遵循这种方法(检查手册,因为我是从记忆中做的)

  1. 登录到服务器机器。
  2. 使用创建一个裸仓库git init --bare
  3. 在客户端机器上,您可以将您的 repo 推送到服务器。git remote add origin ssh://user@server:/GitRepos/myproject.git其次是git push origin master
于 2011-05-29T13:21:58.367 回答
25

免责声明:这只是bobbaluba评论的副本,让未来的访问者更容易看到。它对我的帮助比任何其他答案都多。


用作示例ssh://时必须删除前缀git clone

git clone git@github.com:owner/repo.git
于 2018-11-07T22:04:44.843 回答
23

解决这个问题的简单方法
试试这个。

步骤1:

ls -al ~/.ssh

在此处输入图像描述

第2步:

ssh-keygen 

(使用回车键作为默认值) 在此处输入图像描述 第三步:设置配置文件

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

主机 gitlab.com 主机名
gitlab.com
用户 git
IdentityFile ~/.ssh/id_rsa

第4步:

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

在此处输入图像描述

第 5 步:
完成第 4 步后
1.test2.git 文件将下载完成
2.您将在 ~/.ssh 中获得新文件(known_hosts)
在此处输入图像描述

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

于 2019-11-15T09:21:05.740 回答
4

吉特101:

git是一个去中心化的版本控制系统。你不需要一个服务器来启动和运行 git。您仍然可能想要这样做,因为它看起来很酷,对吧?(如果您想在多台计算机上处​​理单个项目,这也很有用。)

因此,要让“服务器”运行,您需要运行git init --bare <your_project>.git,因为这将创建一个空存储库,然后您可以将其导入您的机器上,而无需在您的.git目录中的配置文件中乱七八糟。

在此之后,您可以克隆客户端上的存储库,因为它应该可以工作,但我发现某些客户端(即git-gui)将无法克隆完全空的存储库。要解决此问题,您需要运行cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master. (请注意,如果您过去没有为该机器的 git 配置您的用户名和电子邮件,则可能需要配置您的用户名和电子邮件。要运行的实际命令将在您收到的错误消息中,因此我将省略它们。)

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

一些相关链接:
这几乎可以告诉您您需要知道的内容。
这适用于那些了解 git 基本工作原理但有时会忘记确切语法的人。

于 2014-02-27T18:05:59.843 回答
2

我想尝试一个包括 git-flow 和三个“点”或用例、git 中央存储库、本地开发和生产机器的答案。 这没有经过很好的测试

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

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

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

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

svn 用户可以关联为“服务器”的中央存储库配置如下。我有一个文件夹/root/git,用于保存我所有的 git 存储库。我想为我称之为“花”的项目创建一个 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命令看起来就像在开发机器上使用的那样。

于 2013-07-13T07:12:30.250 回答
2

git clone git@server:Example/proyect.git

于 2019-06-10T18:18:47.187 回答
1

首先,我有点缺乏我的 GIT 技能。

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

于 2011-05-29T13:18:04.957 回答
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 的解决方法。

于 2019-01-09T13:18:59.573 回答