Mercurial рабочий процесс для обновления с незафиксированными изменениями? - PullRequest
4 голосов
/ 17 июня 2011

Итак, я переключился с CVS на Mercurial для моего сайта.

Самая большая проблема, с которой я столкнулся, заключается в том, что если я работаю с некоторыми файлами, которые не хочу фиксировать, я просто сохраняю их ... У меня есть другие файлы, которые я хочу отправить на сервер, однако, если кто-то else внес изменения в репозиторий, и я опускаю их. Он запрашивает слияние или перебазирование. Любой из этих вариантов приведет к потере локальных изменений, которые я не зафиксировал.

Я прочитал, что я должен клонировать репозиторий для каждого проекта на моем локальном хосте и объединить его с live, когда он будет готов это сделать. Это не только кажется утомительным, но и занимает много времени, так как это большое хранилище.

Есть ли лучшие решения для этого?

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

Любая информация по этому вопросу будет принята с благодарностью. Спасибо!

Кроме того, я использую плагин hg eclipse для работы с моими файлами и push / pull с сервера.

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

hg shelve ваш друг здесь, я думаю.

, который исходит от расширения полки (возможно - см. Ниже)

из обзора:

Расширение shelve предоставляет команду shelve, позволяющую вам выбрать, какие части изменений в рабочем каталоге вы хотите временно отложить, при гранулярности блоков патчей.Позже вы можете восстановить отложенные фрагменты патчей с помощью команды unshelve.

Расширение полки было адаптировано из RecordExtension Mercurial.

или, возможно, расширение на чердаке

Этот модуль имеет дело с набором патчей в папке .hg / attic.В любое время вы можете отложить туда свои текущие изменения рабочей копии или отменить исправление из папки.

кажется, что он имеет тот же синтаксис, что и расширение полки, поэтому я не уверен, какой из нихиспользовал

2 голосов
/ 17 июня 2011

Я второй @ Сэм ответил.Однако, если вы предпочитаете использовать стандартный Mercurial, простой рабочий процесс заключается в

  1. сохранении изменений рабочего каталога во временном файле,
  2. синхронизации вашего рабочего каталога с определенной ревизией, а затем
  3. push, pull, merge ... все, что вы хотите сделать и для чего требуется чистая рабочая копия, и
  4. возвращает ваши изменения из временного файла в рабочий каталог.

Например:

$ hg diff > snapshot.patch # save your uncommited changes
$ hg up -C                 # get a clean working copy
$ hg pull                  # do things ..
$ hg merge                 # .. you need a clean ..
$ hg commit -m "merge"     # .. working copy for
$ hg import snapshot.patch # get back your uncommited work
1 голос
/ 17 июня 2011

Во-первых, вы работаете из командной строки или используете что-то вроде черепахи?

Если вы работаете с командной строкой и выполнили проверку, Mercurial не попросит вас ничего сделать, поскольку он просто обновит ваш локальный репозиторий.

Если вы выполнитеОбновление hg и локальные изменения должны делать то, к чему вы привыкли из CVS.Он обновится до кончика текущей ветви и попытается объединить ваши не внесенные изменения. Есть некоторые предостережения по этому поводу, поэтому обратитесь к официальным документам по адресу http://www.selenic.com/mercurial/hg.1.html#update.

Кроме того, для временного хранения изменений,Я бы порекомендовал MQ на полке.Полка обеспечивает только одну область хранения, тогда как MQ обеспечивает столько, сколько вам нужно.MQ требует некоторого привыкания, но стоит вложений.

...