Не можете разветвить один файл с Mercurial? - PullRequest
1 голос
/ 06 мая 2010

возможно ли это с Mercurial? и какая система контроля версий может сделать это, кроме Clearcase?

Ответы [ 3 ]

4 голосов
/ 06 мая 2010

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

В результате это очень распространенный способ обработки конфигураций для каждого клиента. Храните крошечное изменение для них в ветке и переходите от основной, где происходила разработка, к этой ветке, всякий раз, когда вы хотите обновить их развертывание.

1 голос
/ 06 мая 2010

Как вы могли бы использовать MQ:

$ hg qnew -m "Changes for client0" client0
... change the file ...
$ hg qref # update the client0 patch with the changes
$ hg qpop # pop the changes off the queue stack
... develop like normal ...
... client0 asks for a build ...
$ hg qpu # apply client0's patch
$ make release
$ hg qpop

Было бы немного придирчиво, если бы вам приходилось иметь дело с большим количеством клиентов ... Но, возможно, стоит подумать.

Другая вещь, которую вы могли бы сделать, конечно, просто зафиксировать несколько файлов .diff:

... make changes for client 0 ...
$ hg diff > client0.diff
$ hg revert --all
$ hg add client0.diff
$ hg ci -m "Adding client0 changes"
... develop ...
... client0 asks for a build ...
$ patch -p1 < client0.diff
$ make release
$ hg revert --all
1 голос
/ 06 мая 2010

Нет, это невозможно. Ветвь в Mercurial - это снимок всего состояния хранилища.

Вы можете сделать это с CVS, так как CVS отслеживает изменения для каждого файла отдельно:)

...