Как сохранить незафиксированные изменения в локальном ртутном репозитории, продолжая толкать / тянуть? - PullRequest
6 голосов
/ 18 июня 2011

Если я работаю над некоторыми файлами, которые не хочу фиксировать, я просто сохраняю их.Затем у меня есть другие файлы, которые я хочу отправить на сервер, однако, если кто-то еще внес изменения в репозиторий, и я опускаю их, он просит меня объединить или перебазировать .. , но любой из этих вариантов вызовет у меняпотерять свои локальные изменения, которые я не совершил .

Что другие люди делают, чтобы обойти это?Мне трудно найти документацию для расширения стеллажей.

Примечание: я использую Mercurial Eclipse для загрузки и извлечения файлов на сервер и с него.

Любое объяснение этого будет с благодарностью!Спасибо!


Пример:

Я работаю над своим сайтом в Mercurial Eclipse.У меня есть новая папка и новые файлы, которые я пока не хочу фиксировать на сервере.Я также изменил некоторые существующие файлы и пока не хочу делать эти изменения живыми.

Тогда что-то на моем сайте ломается, и мне нужно это исправить, оно не позволит мне исправить это без перебазирования или слияния с последним наконечником репо, и это приведет к тому, что я потеряю все свои незафиксированные изменения,

Что мне делать с моей новой папкой и файлами, которые я отредактировал, если я не хочу ее потерять?Повторное клонирование кажется утомительным.Копирование файлов в новую папку также кажется утомительным.Я уверен, что Shelving или MQ сделают то, что я хочу, я просто пока не знаю, как это сделать.

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Со ссылкой на ваш пример ситуации, вот что я бы сделал (следуя стратегии Ry4an, чтобы просто зафиксировать то, над чем вы сейчас работаете, но не хотите уже публиковать):

Предполагается, что вы начинаете работать в таком репозитории:

$ hg status -A
C f1
C f2
$ hg glog
@  changeset:   1:7f3c6c86a92f
|  tag:         tip
|  summary:     add f2
|
o  changeset:   0:03ca1e6d5b86
   summary:     initial

То есть есть 2 файла и 2 фиксации / изменения. Вы делаете некоторую работу, скажем, добавляете новую функцию, и тогда ваша рабочая копия может выглядеть так:

$ hg status
M f2
? f3
? f4

Есть 2 новых и 1 измененный файл. Теперь вам нужно исправить ошибку, для которой вам также понадобятся любые новые изменения в удаленном хранилище. Сделайте снимок текущей работы, зафиксировав ее, и извлеките удаленные изменения (в каком порядке это не имеет значения, извлечение по умолчанию не затрагивает состояние вашей рабочей копии):

$ hg commit -A -m "snapshot feature work"
$ hg pull

Это может привести к истории, подобной этой:

o  changeset:   3:2284ba62de07            <-- just pulled in
|  tag:         tip
|  parent:      1:7f3c6c86a92f
|  summary:     edit f1
|
| @  changeset:   2:4a19d371a04f          <-- your interrupted work
|/   summary:     snapshot feature work
|
o  changeset:   1:7f3c6c86a92f
|  summary:     add f2
|
o  changeset:   0:03ca1e6d5b86
   summary:     initial

Теперь вы можете обновить версию 3 до проверки и начать исправлять ошибки:

$ hg update 3
.. fix the bug ..
$ hg commit -m "fix a bug"
$ hg glog --limit 3
@  changeset:   4:5d3d947fb4af
|  tag:         tip
|  summary:     fix a bug
|
o  changeset:   3:2284ba62de07
|  parent:      1:7f3c6c86a92f
|  summary:     edit f1
|
| o  changeset:   2:4a19d371a04f
|/   summary:     snapshot feature work
:

Выглядит хорошо, давайте исправим ваше исправление, то есть сделаем его живым, не публикуя промежуточную работу:

$ hg push -r 4

Это подталкивает все изменения, ведущие к редакции 4, к вашему исправлению, но нет других веток в вашем локальном репозитории. Вы также можете использовать -r ., который ссылается на родительскую ревизию вашей рабочей копии, то есть ревизию, которую вы только что совершили.

Наконец, вы можете вернуться к своей работе над функциями и продолжить работу:

$ hg update 2
.. work, commit, work, commit ..
.. finally merge with the other branch, e.g. revision 4

Эти шаги выполняются в командной строке, но я думаю, что нетрудно адаптировать общую концепцию к соответствующим щелчкам в плагине Eclipse Mercurial.

Некоторые дополнительные заметки:

  • Возможно, вы захотите добавить в закладки вашу фиксацию моментального снимка, поэтому вам не нужно работать с идентификаторами или номерами ревизий.
  • Если вы хотите опубликовать свою функциональность позже в одном коммите, используйте расширение collapse , как только закончите.
2 голосов
/ 18 июня 2011

Я уверен, что кто-то поможет вам найти плохой обходной путь, но лучший способ - изменить ваши цели - просто совершить коммит.Код, который не был зафиксирован, не был написан.Если вы не можете терпеть частые коммиты в своей истории, используйте Mercurial Queues с хранилищем очередей и зафиксируйте это.Затем вы можете вытолкнуть наборы изменений, нажать / вытащить / объединить и снова включить их, и вся ваша ценная работа будет зафиксирована в очереди исправлений.

...