git克隆通过ssh

dls*_*lsa 208 git git-clone

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

$ cd myproject  
$ git init  
$ git add .  
$ git commit  
Run Code Online (Sandbox Code Playgroud)

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

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  
Run Code Online (Sandbox Code Playgroud)

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

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git
Run Code Online (Sandbox Code Playgroud)

这一次答案是:

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

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

sda*_*aau 200

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

然后我找到了Git克隆,ssh:无法解析主机名 - git,开发 - 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服务器机器上的主目录)

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

  • 这不起作用.如果要使用ssh指定相对路径,则必须丢失`ssh://`前缀.我花了20分钟试图解决这个问题.`git clone username@host.xz:relative/path/to/repo.git /`应该可行. (82认同)
  • 由于您的评论@bobbaluba(以及更新的答案),我也不必花费20分钟.谢谢! (5认同)
  • 在Debian 8上用git 2.1.4尝试了它.任何一种sugestions都不起作用.在第一次尝试时没有在/ GitRepos下创建目录,并且在第二次尝试时抱怨该路径已经存在.就像报道的原始问题一样 (2认同)

小智 125

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

git clone ssh://git@github.com/<user>/<repository name>.git
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*eek 43

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

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

  • "git init --bare"不会创建.git目录.它将文件直接放在文件夹中.添加远程源时,我得到:""致命:不是git存储库(或任何父级到挂载点/ home)停止在文件系统边界(未设置GIT_DISCOVERY_ACROSS_FILESYSTEM). (2认同)

Wil*_*eng 19

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

第1步:

ls -al ~/.ssh
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

第2步:

ssh-keygen 
Run Code Online (Sandbox Code Playgroud)

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

vim /c/Users/Willie/.ssh/config
Run Code Online (Sandbox Code Playgroud)

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

第四步:

git clone git@gitlab.com:<username>/test2.git
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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


Wol*_*fer 5

Git 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基本功能但有时忘记确切语法的人的。


Pzt*_*tar 5

免责声明:这只是bobbaluba发表的评论的副本,使以后的访问者更容易看到。它对我的帮助比其他任何答案都大。


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

git clone git@github.com:owner/repo.git
Run Code Online (Sandbox Code Playgroud)


And*_*ell 1

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

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