我可以将本地正常存储库作为裸存储库直接克隆到远程主机上吗?

时间:2013-05-08 02:46:13

标签: git

我见过使用以下git clone语法

git clone --bare /path/to/repo /path/to/bare/repo.git

但是,当目标位于远程主机上时,这似乎不起作用。我已经为目标尝试了多种格式 - 例如使用ssh://user@作为前缀 - 但我的所有尝试都产生了在本地创建的文件夹。

显然,我找到了其他方法(https://stackoverflow.com/a/1402783/741970),但是有没有办法使用上面的语法?

3 个答案:

答案 0 :(得分:1)

我不是C家伙,但在clone.c's cmd_clone function中徘徊,似乎并非如此。各种帮助消息都使用git clone <repo> [<dir>]之类的短语,暗示一个简单的目录名称作为目标,目标端的所有操作似乎都是标准文件操作,如递归readdir和{{3操作,而repo的东西是在对transport.c的调用,特别是mkdir,调用here,这是关于URL(文件/ git / ssh / etc)。

您可以设置指向服务器(或transport_get)的NFS共享,但这可能不是您所追求的。

答案 1 :(得分:1)

那是不可能的。 Git尚未在其协议中“在远程主机上创建此存储库,然后使用此历史记录填充它”。我已经看到在主要的Git列表中讨论了这个问题,但结果是不确定的(有点“可行,但无论如何都没有人需要这样做,所以没有人愿意实施”)。

我应该补充一点,你所链接的答案中提出的方法非常呃......很奇怪,尤其是首先进行本地裸克隆的想法。

你应该做的是:

  1. 通过SSH登录远程主机。
  2. 使用git init --bare创建远程目录。确保它具有适当的访问权限等。
  3. 退出。
  4. 从那里推送本地存储库所需的内容。通常这等于运行

    git push <that_repo> +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*
    

    如果您打算从本地存储库进一步与该存储库进行通信,您可以考虑首先将其添加为命名远程,例如

    git remote add quux ssh://user@server/path/to/the/repo.git
    

答案 2 :(得分:1)

你在里面...但你可以远程执行正常的git clone命令:

ssh user@remote.server git clone --bare user@local:/path/to/repo /remote/path/to/bare/repo

当然,根据您的设置,NAT和权限可能会使这个变得不可能......

但要回答你的问题,不,你不能使用你想做的事情来做你希望它做的事情。