将 git 仓库克隆到远程计算机

6
我们如何将位于本地目录中的存储库克隆到远程机器目录?
 machine1:/usr/rep/  -> clone this to machine2:/var/new_repo

这是实际操作命令是什么?

EDIT1 我正在尝试从machine1创建克隆副本。

EDIT2 我还尝试了以下命令: git clone --bare user@anothersite.com/usr/repo /var/repo/ 不确定这是否是正确的方法。

EDIT3 执行EDIT2中的命令后出现了以下错误。

You have no controlling tty and no DISPLAY. Cannot read passphrase. fatal: The remote end hung up unexpectedly 

================================================Initialized empty Git repository
in /var/repo/ DEBUG: remote_exec loop:$stderr: Initialized empty Git repository
in /var/repo/ DEBUG: create_repoX loop: $stdout: DEBUG: create_repoX loop: 
$stderr: Initialized empty Git repository in /var/repo/ DEBUG: create_repoX loop: $exit: 32768 

你会如何提供访问权限?采用推送(服务器远程)还是拉取(服务器本地)? - Reactormonk
@Reactormonk,你听说过sftpserver和它的朋友们吗?许多“服务器”都可以通过SSH连接使用标准I/O重定向来实现这样的功能。唯一真正的前提条件应该是在远程机器上安装了git(以及sshd)。但是,这是Git...简单的事情并不简单,复杂的事情也不总是可能的。 - 0xC0000022L
5个回答

5
我认为有合理的理由将克隆推送到远程机器,而不是在远程机器上运行克隆,这一点我在其他答案中没有看到。实际上,我已经有好几次需要这样做。
我编写了一个脚本来轻松处理此问题:git-pushclone 描述: 该脚本将仓库克隆到远程服务器,并将这个新仓库作为当前仓库的一个远程仓库。使用SSH协议。
这实现了一种推送式的克隆,这对于不想从远程机器进行克隆的情况是必要的。例如:
1. 没有对本地服务器的入站访问: 当在本地机器上进行开发,但不希望授予任何远程访问权限时,但又希望“发布”开发内容到可以让他人访问的服务器上。
2. 共同登录远程服务器: 当没有单独访问远程服务器的权限,而只能以组用户身份登录时:在这种情况下,从远程服务器启动克隆将需要将本地存储库服务器的凭据放置在服务器的组帐户中。

你对 machine1 可以通过 SSH 从 machine2 访问这一点做出了奇怪的假设。 - 0xC0000022L
1
没有这样的假设。事实上,当机器1无法从机器2访问时,这个脚本才是有用的。如果机器1是可访问的,那么可以简单地进行标准克隆。 - Robert Muil
但就我所见,您并没有使用 git push 将克隆的文件上传到新服务器,而是使用 ssh 和 scp。因此这不是一个 push-clone,而是一个 scp-clone... - DaveFX

1
将命令传递给ssh并从machine2克隆存储库。
ssh machine2 'git clone machine1:/path/to/repo /local/path/to/new/repo'

您需要在 machine1 上安装 ssh-server。不过,您甚至可以直接复制整个文件夹,因为在 git 中,存储库只是一个文件夹,因此复制它将复制存储库。

scp -r /path/to/repo machine2:/var/new_repo

2
在第一种选择中,“machine1” 将需要访问“machine2”,但这并不总是可能的。即使从“machine2”可以访问“machine1”。 - Ricky Levi

0
如果您没有访问源Git服务器或目标Git服务器的SSH权限,则应执行以下命令:
  1. 从您现有的git主机检出存储库。使用--mirror参数:

    git clone --mirror <source-git-url> temp-dir
    
  2. 将相应的新存储库添加为本地存储库中的另一个远程存储库:

    cd temp-dir
    git remote add newrepo <target-git-url>
    
  3. 将整个存储库推送到新位置:

    git push --mirror newrepo
    
  4. 删除临时本地存储库:

    cd ..
    rm -rf temp-dir
    

0

git clone ssh://user@anothersite.com/usr/repo /var/repo/

我的意思是 ssh user@host "git clone ssh://user@anothersite.com/usr/repo /var/repo/"


我之前按照指示尝试过了,但是我提到了错误,你有什么想法为什么会出错吗? - Rajeev
在Atlassian网站上写道,我们可以通过http、ssh等方式从本地机器克隆到远程机器,但是我应该在远程机器的命令行上执行这个操作(即gitlab服务器)?还是在我的本地机器上?如果我在本地机器上进行操作,那么它与从远程机器克隆到本地时完全相同的命令。Git如何理解我的意思? - Michelle

-1
你不需要这样做。你可以在远程机器上运行git clone,从machine1克隆。如果这不可行,只需在machine1本地克隆它,然后将整个文件夹复制到machine2即可。

我尝试了以下内容,但似乎不起作用,有什么想法吗?ssh site.com "git clone --bare https://user@anothersite.com/usr/repo/ /var/repo/" - Rajeev
您没有控制终端和显示器。无法读取密码短语。 致命错误:远程终点意外挂断 ================================================在/var/repo/中初始化了一个空的Git存储库。 调试:remote_exec循环:$ stderr:在/var/repo/中初始化了一个空的Git存储库。调试:create_repoX循环:$ stdout: 调试:create_repoX循环:$ stderr:在/var/repo/中初始化了一个空的Git存储库。调试:create_repoX循环:$ exit:32768 - Rajeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接