Подтвердить что ты не робот

Mercurial говорит: "Прервать: выдающиеся незафиксированные изменения", я не хочу

Сценарий: местное репо, прежде чем покинуть офис

$ hg status

M important/update1
M another/important/update2
M work/in/progress

Я хочу зафиксировать и нажать important/update1 и important/update2, потому что я хочу вытащить эти файлы в свое местное репо, когда вернусь домой. Я не готов выполнить работу/в/ход. На самом деле он даже не разбирается правильно. Этот файл открывается в моей среде IDE, и я просто хочу оставить его как есть.

Теперь я: (поспешно, трамвай уходит через три минуты)

$ hg commit important/update1 another/important/update2
$ hg push

pushing to https://**censored**
searching for changes
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)

Ok. Коллега что-то толкнул... (трамвай уходит через две минуты...)

$ hg pull (really important update!)
$ hg update

abort: outstanding uncommitted changes

Дерьмо. Мне нужно обновление коллег, но я не собираюсь совершать работу/в/ход, а тем более нажимать на нее! И я просто пропустил свой трамвай...

Как вы справляетесь с этим?

4b9b3361

Ответ 1

Используйте расширение

Ответ 2

Если вы не хотите использовать полку, вы можете сделать это всего за 3 команды:

hg diff > mylocalchanges.txt

hg revert -a

# Do your merge here, once you are done, import back your local mods

hg import --no-commit mylocalchanges.txt

Ответ 3

Обычно я использую расширение TortoiseHg, которое вы также можете активировать для использования в вашей cmdline:

[extensions]
tortoisehg.util.hgshelve =

Теперь вы можете использовать команды:

$ hg shelve

Если вы знаете, что обновление не будет мешать нашей работе, вы также можете заставить pull/update (hg pull -f).

Ответ 4

Рабочий процесс для людей, разрабатывающих несколько функций/исправлений ошибок:

Одной из возможностей было бы клонировать столько репозиториев, сколько функций, которые вы разрабатываете. Но это может быть дорогостоящим на диске, времени, а также запутанным. Другая возможность заключается в том, чтобы работать по разному предмету в одном и том же локальном репозитории (позвоните на Main), но используйте только вторую, чтобы выборочно зафиксировать одну или несколько желаемых функций в центральном репозитории.

Это очень хорошо объяснено и подробно описано в этой статье:

https://blogs.oracle.com/tor/entry/mercurial_tip_checking_in_regularly

Если вы столкнулись со следующими сообщениями об ошибке:

  • "abort: push создает новые удаленные головки!" (потенциальные множественные головки)
  • "abort: пересекает ветки (используйте 'hg merge' или 'hg update -C')" (рабочий каталог в другой ветке, чем выталкиваемые изменения) или
  • "abort: выдающиеся незафиксированные изменения" (невозможно объединить из-за локальных изменений)

то статья выше объясняет, почему все это происходит, и предлагает рабочий процесс, чтобы избежать этих проблем. Примечание. Также возможно использовать механизм исправления mqueues для изменения ваших изменений (см. Комментарий № 1 к статье).

Надеюсь, что это поможет.

Ответ 5

Если вы нажимаете только для того, чтобы выставлять код в сеть, чтобы вы могли тянуть и продолжать работать дома, я не знаю, что ваш коллега должен настаивать на том же репо. Вы можете использовать репозиторий для разработчиков: репо для вашего личного использования (либо с помощью разрешений, либо просто по принуждению/вежливости).

Некоторые программы (такие как FogCreek Kiln SW) предоставляют эту возможность, но даже если вы просто храните репозитории на сетевом/общем диске, вы должен иметь возможность создать личное репо там.

Если это не так (то есть: у вас нет разрешений на сервер), вы также можете рассмотреть использование именованной ветки. В этом случае вы просто передадите свою именованную ветку и переместите эту ветвь на сервер. Предположительно, ваш коллега оставил бы ваши названные ветки в покое, и не было бы ничего нового, чтобы тянуть и сливаться. Что касается "отраслевого беспорядка", да, они присутствуют на протяжении всего периода репо, но закрытие именованной ветки непосредственно перед слиянием удалит их из виду и устранит некоторые проблемы.

> hg update <branch name>
> hg commit --close-branch -m 'closing branch <branch name>'

В конце дня я не считаю, что беспорядок ветки является серьезной проблемой, если вы (а) не обладаете гигантской командой или (б) не закрываете свои ветки.