'bzr update' уничтожил все мои локальные коммиты.Помогите! - PullRequest
3 голосов
/ 11 декабря 2010

Я думаю, что-то плохое могло случиться с моими ревизиями.

Для справки: раньше я использовал git, hg и svn с общим успехом. Мое понимание bzr менее полное.

Вот что у меня было (Windows XP):

1) Папка, созданная с помощью bzr svn checkout. Назовите это стабильным
2) Папка разветвленная от той, которую я использовал для разработки. Назовите это развитием

Я планировал использовать commit --local в ветке разработки, чтобы отслеживать изменения, и это работало безупречно.

Затем я включил 'bzr update' (потому что жаловался, когда пытался нажать). В то время в стабильной версии была гораздо более старая копия кода. Ну, теперь у разработки есть та же самая старая копия. 'bzr log' не показывает никаких доказательств моих локальных коммитов!

Может кто-нибудь объяснить мне, что случилось, и что я могу сделать, чтобы восстановить мой старый код?

Ответы [ 2 ]

5 голосов
/ 11 декабря 2010

Я, честно говоря, не могу сказать, как это могло произойти - честно говоря, похоже, что это будет поведение (звучит довольно катастрофически), если вы не сделали что-то вроде bzr pull --overwrite или не сделали bzr revert после bzr pullкоторые имели конфликты.

Перво-наперво, посмотрим, сможете ли вы надежно воспроизвести эту проблему.Возможно ли это, однако, подать отчет об ошибке в bzr , чтобы эту проблему можно было отследить.Кроме того, прежде чем делать ЧТО-ТО ВСЕГО , сделайте резервную копию данных, которые у вас есть в этих ветвях.Если вы работали в общем хранилище, сделайте резервную копию всего этого.Таким образом, он доступен для судебного восстановления, если такие решительные усилия необходимы.Однако для получения дополнительной помощи вам придется поработать с разработчиками Bazaar.Может быть полезно потусоваться в комнате #bzr в IRC-сети FreeNode, чтобы попросить о помощи.Как обычно для поиска поддержки в IRC, терпение является ключевым, даже если ситуация, в которой вы находитесь, довольно срочна.Они могут дать вам некоторый код Python или инструкции о том, как выкапывать эти коммиты, а также могут рассказать вам, как узнать, что произошло.

Тем не менее, что я обычно делаю, когдазанимаюсь разработкой, как это, если у меня есть несвязанная ветвь «вверх по течению», и затем в любой ветке, в которой я работаю. Когда я закончу со своими изменениями, я вытяну из ветки вверх по течению, сливаю свою ветку в получившееся дерево и затемрезервное копирование.Например:

$ bzr init-repo project; cd project
$ bzr branch bzr+ssh://example.org/srv/bzr/project/trunk trunk
$ bzr branch trunk my-feature-branch
$ cd my-feature-branch
 ... work, commit; work, commit; ...
$ cd ../trunk
$ bzr pull
$ bzr merge ../my-feature-branch
 ... resolve any merge conflicts here, if any ...
$ bzr ci -m 'Merge in my-feature-branch'
$ bzr push :parent

Делая это таким образом, вы также отделяете свою работу от ветви upsteam до тех пор, пока вы не будете готовы слить и протолкнуть ее.И это гарантирует, что ваш местный филиал никогда не будет перезаписан.

5 голосов
/ 11 декабря 2010

Хорошо, я нашел это.После неистового поиска я обнаружил секретное кодовое слово «мертвая голова» после просмотра этого другого вопроса stackoverflow: Некоторый код был потерян после выполнения bzr commit --local, bzr pull, bzr commit

Однако предложенное ими решение не сработало для меня.То, что сработало, было найдено по адресу http://chrismarinos.com/don-t-loose-your-head-with-bazaar/

. Окончательный ответ состоял в том, чтобы найти идентификатор ревизии с помощьюheads --all, а затем с помощью pull get получить все ревизии:

bzr heads --all
bzr pull --overwrite -r revid:<revision-id>

Весь мой код вернулся, и теперь выполняется резервное копирование 3 или 4 раза.

...