Mercurial: множественные изменения устанавливаются одновременно? - PullRequest
2 голосов
/ 14 января 2011

Раньше, когда я использовал перформанс, я мог работать с несколькими ошибками одновременно, если код не влиял на одни и те же файлы, открыв несколько наборов изменений одновременно.

Changeset 1:


  • a.txt
  • b.txt
  • C.txt

Changeset 2:


  • D.txt
  • E.txt
  • F.txt

Я мог бы отправить набор изменений 2 в хранилище, не отправляя набор изменений 1 (поскольку он все еще выполняется)

Возможно ли это с Mercurial? кроме как делать каждый файл как отдельный коммит?

Ответы [ 5 ]

3 голосов
/ 14 января 2011

Вы всегда можете просто сделать: hg commit D.txt E.txt F.txt, чтобы зафиксировать только те файлы, которые не повлияют на A.txt, B.txt и C.txt. Использование опции -I для фиксации позволяет вам делать это с шаблонами, если они находятся, например, в общем каталоге: hg commit -I 'dir1/**'

2 голосов
/ 14 января 2011

Вы фактически не держите ревизии "открытыми" в Mercurial.

Либо вы зафиксировали свои изменения, либо нет.

Однако вы можете иметь несколько файлов с незафиксированными изменениями и зафиксировать только несколько из них. Можно даже зафиксировать части файлов, куски, а не весь файл.

Если бы я делал то, что вы просите, я бы просто сделал еще один локальный клон из моего первого, и работал бы над двумя разными исправлениями в двух разных рабочих папках. Тогда у меня есть все, что мне нужно, чтобы объединить их (локально сдвинуть / сдвинуть), перенести на сервер и т. Д.

2 голосов
/ 14 января 2011

Вы можете иметь две отдельные ветви (рабочие копии) и вносить одно изменение, а другое - в другое. Это один из способов.

Другой вариант - использовать Mercurial Queues . Вы можете использовать qpush --move для изменения порядка наборов изменений, если они не зависят друг от друга, поэтому вы можете затем использовать qfinish для «фиксации» первого набора изменений, который готов.

0 голосов
/ 17 января 2011

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

Чтобы активировать расширение записи, поместите его в раздел [extensions] вашего .hgrc:

[extensions]
hgext.record=

Затем для подтверждения замените hg commit на hg record.Давайте предположим, что ваш пример наборов изменений содержит файл G.txt, в котором есть изменения для обоих наборов изменений.Зафиксируйте с помощью:

hg record D.txt E.txt F.txt G.txt

Ответьте на вопросы, например:

2 hunks, 6 lines changed
examine changes to 'D.txt'? [Ynsfdaq?] f     # f for full file (help with ?)
... skipped file E and F
6 hunks, 35 lines changed
examine changes to 'G.txt'? [Ynsfdaq?] y
@@ ... (patch hunk here)
record change 6/16 to 'G.txt'? [Ynsfdaq?] y   # y to include the hunk, n to skip
0 голосов
/ 15 января 2011

В Mercurial клонирование - это дешевая операция, когда она выполняется локально. Просто клонируйте репозиторий для каждой вещи, над которой вы работаете. Вернитесь к основному хранилищу, когда все будет готово:

hg clone http://project project
hg clone project project-bugfix   // uses hardlinks and is inexpensive.
hg clone project project-feature
<edit bugfix and feature as needed>

Но помните, что по умолчанию push-адресом является клонированный проект, поэтому вам нужно либо отредактировать стандартный push-путь .hg \ hgrc для клонов "project", либо обязательно hg push <a href="http://project" rel="nofollow">http://project</a> from "project-bugfix "и" Project-Feature ", когда завершено.

...