как восстановить случайно удаленный удаленный репозиторий git из локального репозитория - PullRequest
9 голосов
/ 21 декабря 2009

Я сделал что-то вроде следующего:

(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):

bar # rm -rf /home/project

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

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

Ответы [ 3 ]

8 голосов
/ 21 декабря 2009

Вы можете настроить удаленный хост как новый репозиторий git и затем нажать на него.

В этом блоге рассказывается, как это сделать:

Toolman Tim - Настройка нового удаленного хранилища git

при условии, что у вас все еще есть настройка панели в качестве удаленного хранилища, по сути:

ssh bar "mkdir -p /home/project && cd /home/project && git --init bare"
git push bar refspec

refspec часто представляет собой простое имя ветви в локальном репозитории, поэтому:

git push bar master

Подробную информацию о том, что соответствует refspec, см. На git push manpage . Раздел ПРИМЕРЫ особенно полезен для понимания более сложных вопросов

3 голосов
/ 17 февраля 2010

Вместо одного из них:

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

1 голос
/ 22 декабря 2009

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

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

Как сделать резервную копию частных веток в git

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...