Если у меня есть куча незафиксированных изменений и вы хотите отложить его, работая над чем-то другим, а затем позже (f.i. через несколько дней) вернитесь к нему и приступайте к работе. Каким будет самый простой рабочий процесс для этого? (Пока у меня есть только опыт работы с базовыми функциями Mercurial). Мой обычный метод состоял в том, чтобы создать новую ветку с использованием клона, но могут быть и лучшие способы.
Как я отложил кучу незафиксированных изменений в процессе работы над чем-то еще
Ответ 1
У вас есть несколько вариантов:
-
Shelve. Это сохраняет изменения и удаляет их из рабочего каталога, чтобы ветка продолжалась. Он не создает набор изменений.
hg shelve --all --name "UnfinishedChanges" hg unshelve --name "UnfinishedChanges"
Обновление/Редактирование. Более новые версии меркуриала, возможно, должны будут использовать
hg shelve -n "UnfinishedChanges" hg unshelve "UnfinishedChanges"
Вы по-прежнему можете использовать
--name
в качестве альтернативы-n
, но mercurial больше не похож на--name
. Кроме того,--all
больше не требуется, и ртуть будет на самом деле выходить из-под него. -
Очередь patch с помощью
mq
. В некоторых отношениях это не слишком отличается от постов, но ведет себя по-разному. Конечный результат тот же, изменения удаляются и могут быть дополнительно повторно применены позже. При нажатии, патчи являются логическими наборами изменений, когда они выгружаются, они сохраняются в другом месте и не являются частью истории изменений.hg qnew "UnfinishedWork" hg qrefresh hg qpop hg qpush "UnfinishedWork"
-
Зафиксируйте их локально, обновите предыдущий набор изменений и продолжите работу и используйте анонимные ветки (или несколько головок). Если вы хотите внести изменения, вы можете объединить головки. Если вы не хотите изменений, вы можете strip изменить набор.
hg commit -m"Commiting unfinished work in-line." hg update -r<previous revision> hg strip -r<revision of temporary commit>
-
Перенесите их в указанную ветку. Затем рабочий процесс становится таким же, как вариант 3 - слияние или разделение, когда вы готовы.
hg branch "NewBranch" hg commit -m"Commiting unfinished work to temporary named branch." hg update <previous branch name>
Лично я использую опцию 3 или 4, так как я не против снятия наборов изменений или частичного кода проверки (до тех пор, пока это не будет в конечном итоге нажато). Это можно использовать в сочетании с новым материалом Phase, чтобы скрыть ваши локальные наборы изменений от других пользователей, если это необходимо.
Я также использую команду rebase
для перемещения наборов изменений во избежание слияний, когда слияние ничего не добавит в историю кода. Слияния. Я стараюсь сохранять активность между важными ветвями (например, ветвями выпуска) или активностью из более долговечной ветки функции. Существует также команда histedit
, которую я использую для сжатия наборов изменений, где "chattiness" из них уменьшает значение.
Очереди Patch также являются общим механизмом для этого, но у них есть семантика стека. Вы нажимаете и поглаживаете патчи, но патч, который находится под другим патчем в стеке, требует, чтобы его тоже нажимали.
Предупреждение, как и при всех этих параметрах, если файлы имеют больше изменений с временными изменениями, которые вы отложили/поставили в очередь/разветвленными, будет потребоваться разрешение слияния, когда нестерильные/нажатие/слияние.
Ответ 2
Лично мне не нравится ни один из ответов, опубликованных до сих пор:
- Мне не нравится ветвление клона, потому что мне нравится, что каждый проект имеет только один каталог. Работа над разными каталогами в то же время полностью уничтожает историю последних файлов моих редакторов. Я всегда меняю неправильный файл. Поэтому я больше этого не делаю.
- Я использую
shelve
для быстрых исправлений (просто чтобы переместить мои неуправляемые изменения в другую ветку, если я понимаю, что я ошибаюсь). Вы говорите о днях, никоим образом не откладывайте что-то в течение нескольких дней. - Я думаю, что
mq
слишком сложна для такого обычного sittuation
Я думаю, что лучший способ - просто зафиксировать свои изменения, чем вернуться к набору изменений, прежде чем начинать эти изменения и работать оттуда. Есть некоторые незначительные проблемы, позвольте мне проиллюстрировать:
Скажем, у вас есть набор изменений A. Чем вы начинаете свои изменения. В этот момент вы хотите отложить его на некоторое время. Прежде всего, выполните свою работу:
hg ci -m "Working on new stuff"
Если вы хотите, вы можете добавить закладку, чтобы было легче вернуться позже. Я всегда создаю закладки для своих анонимных ветвей.
hg bookmark new-stuff
Вернитесь к списку изменений перед этими изменениями
hg update A
Здесь вы работаете и генерируете набор изменений C. Теперь у вас есть 2 головы (B и C), вы будете предупреждены при попытке нажать. Вы можете нажать только одну ветвь, указав головку этой ветки:
hg push -r C
Или вы можете сменить фазу ветки new-stuff
на секрет. Секретный набор изменений не будет нажат.
hg phase -r new-stuff --secret --force
Ответ 3
Чтобы сохранить локальные неуправляемые изменения, самый простой способ для меня - просто сохранить их как файл патча.
hg diff > /tmp/`hg id -i`.patch
и когда вам нужно вернуться в предыдущее состояние:
hg up <REV_WHERE_SAVED>
hg patch --no-commit /tmp/<REV_WHERE_SAVED>.patch
Ответ 4
Вы можете просто клонировать свое репо несколько раз. Я имею тенденцию иметь клон корня, а затем несколько детей оттуда. Пример:
- MyProject.Root
- MyProject.BugFix1
- MyProject.BugFix2
- MyProject.FeatureChange1
- MyProject.FeatureChange2
4 ребенка все клонируются из корня и push/pull в/из корня. Корень затем отжимает/тянет от мастер-репо в сети/Интернете где-то. Корень действует как ваша персональная зона постановки.
Итак, в вашем случае вы просто клонируете новое репо и начнете работать. Оставьте свою "отложенную" работу самостоятельно в другом репо. Это просто.
Единственным недостатком является использование дискового пространства, но если это было проблемой, вы бы вообще не использовали DVCS;) О, и это действительно загрязняет список ваших недавних проектов Visual Studio, но что это за эй.
[Изменить следующие комментарии]: -
В заключение тогда... то, что вы делаете, совершенно нормально и нормально. Я бы сказал, что это лучший способ работы, когда выполняются следующие условия: 1) он недолговечен; 2) вам не нужно сотрудничать с другими разработчиками; 3) изменениям не нужно оставлять ПК до фиксации/нажмите время.