git克隆通过SSH

我有一个项目,我创build了一个git仓库:

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

我希望在另一台机器上创build一个裸露的克隆:

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

我执行克隆,但没有打印任何答案。 我login到服务器机器,并试图看到如何存储文件。 path/ GitRepos是空的,所以我决定再次进行克隆:

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

这一次的答案是:

致命的:目的地path'ssh:// user @ server:/GitRepos/myproject.git'已经存在,不是一个空目录。

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

这可能与问题直接无关; 但是我只是犯了一个错误,我在OP中看到的是URL规范ssh://user@server:/GitRepos/myproject.git – 也就是说,你有一个冒号ssh://user@server:/GitRepos/myproject.git和一个正斜杠/表示一条绝对path。

然后我发现Git clone,ssh:无法parsing主机名 – git,development – Nicolas Kuttler (因为那是我得到的错误,在git 1.7.9.5版上),注意到:

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

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

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

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

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

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

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

  • 生成SSH密钥并在帐户设置 – > SSH密钥中添加您生成的密钥

  • 用SSH进行克隆

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

  1. login到服务器机器。
  2. 使用git init --bare创build一个裸回购
  3. 在客户端机器上,您可以将您的repo推送到服务器。 git remote add origin ssh://user@server:/GitRepos/myproject.git然后是git push origin master

Git 101:

git是一个分散的版本控制系统。 你不需要一个服务器来启动和运行git。 尽pipe如此,你也许会想这样做,对吗? (如果您想从多台计算机上处​​理单个项目,这也很有用。)

所以为了让一个“服务器”运行,你需要运行git init --bare <your_project>.git因为这会创build一个空的仓库,然后你可以在你的机器上导入,而不必在你的.gitconfiguration文件中DIR。

在这之后,你可以克隆你的客户的回购,因为它应该工作,但是我发现有些客户(即git-gui )将无法克隆完全空的回购。 要解决这个问题,你需要运行cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master 。 (请注意,如果您以前没有这样做,您可能需要为该计算机的gitconfiguration您的用户名和电子邮件地址。要运行的实际命令将出现在您收到的错误消息中,因此我将忽略它们。

所以现在你可以通过运行git clone <user>@<server>:<relative_path><your_project>.git来将版本库克隆到任何机器上。 (正如其他人已经指出,如果你使用绝对path,你可能需要用ssh://作为前缀。)这假设你已经可以从你的客户端login到服务器。 (如果您打算将大量内容推送到远程服务器,您还将获得设置configuration文件和ssh密钥的奖励积分。)

一些相关的链接:
这几乎告诉你你需要知道什么。
这对于那些了解git基本工作原理的人来说,有时会忘记确切的语法。

最初,我的GIT技能有点欠缺。

这将克隆你的机器上的裸仓库,它只包含隐藏目录.git中的文件夹。 执行ls -al ,你应该在你的仓库里看到.gitcd .git

你可以添加一个你的意图的描述,以便有更多GIT技能的人可以帮忙吗? 你真的想要做什么,而不是你计划如何做?

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

我正在给予令人难以置信的具体命令。 而不是说<your folder> ,我会说/root/git 。 我改变原始命令的唯一地方是用example.comreplace我的特定服务器名称。 我将解释文件夹的目的是让你可以相应地调整它。 请让我知道任何困惑,我会更新答案。

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

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

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

svn用户可以关联的中央资料库作为“服务器”configuration如下。 我有一个文件夹/root/git ,我保留所有的git仓库。 我想创build一个名为“花朵”的项目的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. 

完全不用担心。

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

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

这让我可以开始添加东西的地步。 我首先设置了gitstream

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