我做过类似的事情:
(1)将远程git存储库克隆到本地主机
本地#git clone http://www.foo.com foo
(2)在ssh主机(bar)上添加另一个项目作为第二个远程存储库
本地#git remote add bar ssh://bar/home/project
本地#git fetch bar
(3)在ssh主机(bar)上做了一些愚蠢的事情:
吧#rm -rf /home/project
请问您能告诉我如何从本地副本恢复ssh主机(bar)上的项目,因此ssh主机上的其他开发人员可以继续他们的工作,我可以运行'git fetch bar'来获取他们的提交就像我没有对他们的ssh主机做任何错误,即撤消我所做的所有主持吧。非常感谢。
更新:
吧#mkdir -p /home/project && cd /home/project && git init --bare
本地#git branch remote show bar
本地#git push bar bar/master:refs/heads/master
本地#git push bar bar/branch1:refs/heads/branch1
本地#git push bar bar/branch2:refs/heads/branch2
答案 0 :(得分:8)
您可以将远程主机设置为新的git存储库,然后推送到它。
这篇博客讨论了如何做到这一点:
Toolman Tim - Setting up a new remote git repository
假设您仍然将栏设置为远程存储库,基本上是:
ssh bar "mkdir -p /home/project && cd /home/project && git --init bare"
git push bar refspec
refspec 通常只是本地存储库中分支的简单名称,因此:
git push bar master
请参阅git push manpage以获取有关refspec的资格的详细处理。 EXAMPLES部分特别有助于理解更高级的respecs
答案 1 :(得分:3)
而不是其中之一:
$ git push bar bar/branchX:refs/heads/branchX
为本地的每个ref'd分支。试试这个
$ git push bar refs/remotes/bar/*:refs/heads/*
上面的命令应该将您在本地缓存的所有远程引用推送回远程并将它们放在正确的位置。
请注意,您还需要推送您可能拥有的任何标签:
$ git push --tags bar
此外,在实际推动之前,了解将会发生什么是有帮助的:
$ git push --dry-run ...(rest of push cmd)
注意:我使用'bar',其中大多数人都有'原产地' - 用遥控器的名称替换。
答案 2 :(得分:1)
按照Mark Carey的回答,我特意将已删除的存储库恢复如下:
吧#mkdir -p /home/project && cd /home/project && git init --bare
本地#git branch remote show bar
本地#git push bar bar/master:refs/heads/master
本地#git push bar bar/branch1:refs/heads/branch1
本地#git push bar bar/branch2:refs/heads/branch2
<强>更新强>