我见过使用以下git clone
语法
git clone --bare /path/to/repo /path/to/bare/repo.git
但是,当目标位于远程主机上时,这似乎不起作用。我已经为目标尝试了多种格式 - 例如使用ssh://
或user@
作为前缀 - 但我的所有尝试都产生了在本地创建的文件夹。
显然,我找到了其他方法(https://stackoverflow.com/a/1402783/741970),但是有没有办法使用上面的语法?
答案 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列表中讨论了这个问题,但结果是不确定的(有点“可行,但无论如何都没有人需要这样做,所以没有人愿意实施”)。
我应该补充一点,你所链接的答案中提出的方法非常呃......很奇怪,尤其是首先进行本地裸克隆的想法。
你应该做的是:
git init --bare
创建远程目录。确保它具有适当的访问权限等。从那里推送本地存储库所需的内容。通常这等于运行
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和权限可能会使这个变得不可能......
但要回答你的问题,不,你不能使用你想做的事情来做你希望它做的事情。