1

我已经看到了以下git clone语法的用法

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

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

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

4

3 回答 3

1

你从里到外......但你可以远程执行普通的 git clone 命令:

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

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

但要回答你的问题,不,你不能使用你想做的语法来做你想做的事情。

于 2013-05-08T14:12:30.163 回答
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
    
于 2013-05-08T14:08:03.997 回答
1

我不是 C 人,但在clone.c 的 cmd_clone 函数中闲逛,似乎并非如此。各种帮助消息都使用短语 like git clone <repo> [<dir>],暗示一个简单的目录名称作为目标,并且目标端的所有操作似乎都是标准文件操作,如递归readdirmkdir操作,而 repo 的内容则包含在对transport.c,尤其是here,它调用transport_get,这都是关于 URL(文件/git/ssh/etc)的。

您可以设置指向服务器(或Dropbox 文件夹)的 NFS 共享,但这可能不是您想要的。

于 2013-05-08T04:58:28.110 回答