2009-12-21 5 views
8

я сделал что-то вроде следующее:как восстановить случайно удаленный удаленный репозиторий из локального хранилища

(1) клонировать удаленный репозиторий для локального хоста

местных # git clone http://www.foo.com foo

(2) добавить еще один проект на SSH хоста (бар) в качестве второго удаленного хранилища

местного # git remote add bar ssh://bar/home/project

местный # git fetch bar

(3) сделал что-то глупое на SSH хоста (бар):

бар # rm -rf /home/project

Не могли бы вы сказать мне, как я могу восстановить проект по SSH хоста (бар) из моей локальной копии, поэтому другой разработчик на хосте ssh может продолжить свою работу, и я могу запустить «git fetch bar», чтобы получить их фиксацию, точно так же, как я не сделал ничего плохого для своего ssh-хоста, то есть отменил все, что я сделал в баре. большое спасибо.

UPDATE:

бар # 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

Если вы решили проблему, поместите команды в новый ответ. –

ответ

7

Вы можете настроить удаленный хост как новый репозиторий 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.В разделе Примеров особенно полезен для понимания более продвинутого respecs

+0

спасибо, но я не могу заставить его работать: местный # SSH-бар «MkDir -p/дома/Проект && кд/дом/проект && мерзавец INIT --bare» местный # мерзавец толкатель нет рефов в общий и ни один не указан; ничего не делать. Возможно, вы должны указать ветку, такую ​​как «мастер». fatal: удаленный конец неожиданно повредил ошибку: не удалось нажать некоторые ссылки на «ssh: // bar/home/project» – yoda

+0

, поэтому я ссылался на блог, который пошел гораздо глубже и использовал слово «по существу». Я сделаю свой пример кода более явным, чтобы закончить ответ. –

1
ответ

Следуй Марк Кэри, я particaly восстановить удаленный репозиторий следующим образом:

бар # 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

UPDATE:

How to back up private branches in git

+0

«Следуйте за ответом Марка Кэри» ... если бы мой ответ был «правильным», тогда было бы нецелесообразно присуждать ему статус «Ответ». –

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», где у большинства людей было бы «происхождение» - замените имя вашего пульта.

Смежные вопросы