通过SSH克隆Git

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

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

1053694 次浏览

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

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

您需要在您调用的服务器上运行clone命令。但是我打赌你没有在你的本地客户端上运行ssh服务器,所以不管怎样这都行不通。建议你遵循这个方法(检查手册,因为我是凭记忆这么做的)

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

这可能与问题直接无关;但是我自己犯了一个错误,我在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的主目录)

希望这能帮助到某人 干杯!< / p >

我想尝试一个包括git流程和三个“点”或用例的答案,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流

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命令将看起来像开发机器上使用的命令。

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设置配置文件和密钥。)

< p > 相关链接: < br > 这基本上告诉了你你需要知道的。 < br > 这是为那些知道git的基本工作原理但有时忘记确切语法的人准备的。 < / p >

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

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

通过ssh设置git克隆参见:

免责声明:这只是bobbaluba评论的副本,以便将来的访问者更容易看到。这比其他任何答案都更有用。


git clone为例,必须去掉ssh://前缀

git clone git@github.com:owner/repo.git
我做到了: “/GITREPOSITORIES/RepoA”“ssh://luc@EERSTENASDS119J/volume1/RepoA” 结果:

. fatal: destination path 'ssh://luc@EERSTENASDS119J/volume1/RepoA'已经存在,并且不是空目录

系统在当前路径下创建了一个目录ssh://luc@EERSTENASDS119J/volume1/RepoA。

所以git克隆没有解释URL规范。

.使用Alec的变通方法

git克隆git@server:示例/ proect .git

简单的方法来做这个问题
试试这个。< / p >

步骤1:

ls -al ~/.ssh

enter image description here

步骤2:

ssh-keygen

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

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

Host gitlab.com
HostName gitlab.com
用户git
IdentityFile ~ / . ssh / id_rsa < / p >

步骤4:

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

enter image description here

步骤5:
. 当你完成步骤4
. quot 1.test2。Git文件将下载完成
2.您将在~/. conf文件中获得新文件(known_hosts)。ssh
enter image description here < / p >

PS:我创建了id_rsa和id_rsa。并将其交付到Gitlab服务器。在任何客户端(windows和Linux)使用这两个密钥。