通过ssh实现git克隆

通过ssh实现git克隆,git,git-clone,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存储库:

$ 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@服务器:/GitRepos/myproject.git'已存在,并且不是空目录

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

首先,我有点缺乏GIT技能

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

cd /home/kinjal/Sites
git clone root@example.net:/root/git/flowers.git
git add .
git commit -am 'initial'
git push

您是否可以添加对您的意图的描述,以便具有更多GIT技能的人能够提供帮助?您真正想做的是什么而不是计划如何做?

您需要在您调用的服务器上运行clone命令。但我敢打赌,您没有在本地客户端上运行ssh服务器,因此无论如何都无法运行。建议您遵循此方法(查看手册,因为我是凭记忆完成此操作的)

  • 登录到服务器计算机
  • 使用git init--bare创建一个裸回购
  • 在客户机上,您可以将repo推送到服务器<代码>git远程添加源ssh://user@服务器:/GitRepos/myproject.git后跟
    git推送原始主机

  • 这可能与问题没有直接关系;但是我刚才犯的一个错误,我在OP中看到,是URL规范
    ssh://user@server:/GitRepos/myproject.git
    ——也就是说,在表示绝对路径的后面有一个冒号
    ,还有一个正斜杠
    /

    然后我发现(因为这是我在git的
    1.7.9.5版上遇到的错误),注意到:

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

    。。。这也是我的问题!因此,基本上在
    git
    ssh
    中,您可以使用

    • ssh://username@host.xz/absolute/path/to/repo.git/
      ——服务器上绝对路径的正斜杠
    • username@host.xz:relative/path/to/repo.git/
      -只有一个冒号(它不能有服务器上相对路径的
      ssh://
      (相对于服务器计算机上
      用户名的主目录)
    希望这对某人有所帮助,

    干杯!

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

    我给出了非常具体的命令。我不会说
    ,而是说
    /root/git
    。我更改原始命令的唯一地方是将我的特定服务器名称替换为
    example.com
    。我将解释文件夹的用途,以便您可以相应地进行调整。如果有任何混淆,请告诉我我会更新答案

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

    开发机器上的git版本是1.8.1.1。这是MacOSX10.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 add .
    git commit -am 'initial'
    git push
    
    这让我可以开始向它添加东西

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

    cd /home/kinjal/Sites
    git clone root@example.net:/root/git/flowers.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
    
    请注意,我在发布开始和发布完成之间没有做任何事情。当我完成发布完成时,系统会提示我编辑两个文件。这将开发分支推到master

    在与我的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.git
    ,因为这将创建一个空的存储库,然后您可以将其导入到您的机器上,而不必在
    .git
    目录中的配置文件中乱动

    在此之后,您可以按照预期的方式在客户端上克隆repo,但我发现一些客户端(即
    git gui
    )将无法克隆完全为空的repo。要解决此问题,您需要运行
    cd.git&&touch&&git add&&git commit&&git push origin master
    。(请注意,如果您过去没有为该计算机的git配置用户名和电子邮件,则可能需要这样做。要运行的实际命令将出现在您收到的错误消息中,因此我将省略它们。)

    因此,此时您可以简单地将存储库克隆到任何机器上
    vim /c/Users/Willie/.ssh/config
    
    git clone git@gitlab.com:<username>/test2.git