LINUX.ORG.RU

Не понимаю логики hg.


0

0

Почему нельзя сделать так:

wieker@localhost:~/Projects$ mkdir hg
wieker@localhost:~/Projects$ cd hg
wieker@localhost:~/Projects/hg$ hg init
wieker@localhost:~/Projects/hg$ touch 1
wieker@localhost:~/Projects/hg$ hg add
adding 1
wieker@localhost:~/Projects/hg$ hg commit -m "1"
wieker@localhost:~/Projects/hg$ touch 2
wieker@localhost:~/Projects/hg$ hg add
adding 2
wieker@localhost:~/Projects/hg$ hg commit -m  "2"
wieker@localhost:~/Projects/hg$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
wieker@localhost:~/Projects/hg$ touch 3
wieker@localhost:~/Projects/hg$ hg add
adding 3
wieker@localhost:~/Projects/hg$ hg commit -m "3"
created new head
wieker@localhost:~/Projects/hg$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
wieker@localhost:~/Projects/hg$ hg update 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
wieker@localhost:~/Projects/hg$ hg update 2
abort: crosses branches (use 'hg merge' or 'hg update -C')

(получается ошиька), приходится создавать бранчи, ведь это было бы так удодно - стартовать «анонимные бранчи» с любого места. Есть ли системы контроля версий, в которых можно создавать «анонимные бранчи»?

★★

> Почему нельзя сделать так:

можно, но обращайте таки внимание на ртутные хинты >_<'

если вы делаете не совсем стандартный апгрейд (переключаетесь на другой бранч, делаете вот такие извращения) будьте добры добавить «-С»:

$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ ls
1
$ hg update 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ ls
1  2
$ hg update -C 2
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ ls
1  3
$

arsi ★★★★★
()

> это было бы так удодно - стартовать "анонимные бранчи" с любого места. Есть ли системы контроля версий, в которых можно создавать "анонимные бранчи"?

Да. К примеру, Mercurial.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Да. К примеру, Mercurial.

А зачем он тогда просит -C? Как заметил arsi, это не совсем стандартный апгрейд.

wieker ★★
() автор топика
Ответ на: комментарий от wieker

> А зачем он тогда просит -C?

Потому что (ради идеологической совместимости с CVS, IIUC) в Mercurial команда up может выполнять merge. И спрашивает тебя, на самом ли деле ты этого хочешь.

tailgunner ★★★★★
()
Ответ на: комментарий от wieker

> Но я так понимаю, это не совсем правильно "философски", или я ошибаюсь?

последнее ;)

«философия» тут такова: именно апгрейд (и именно чистый апгрейд) между 1↔2 не возможен в принципе, так как это независимые ветки (или параллельные, если вам угодно). почему независимы? ни один из (1, 2) не числится у другого ни в прямых, ни в косвенных родителях. (ну а параллельные потому, что таки имеют общего родителя.) т.о. есть две ветки: 0→1 и 0→2, и между ними (как и между любыми другими связанными версиями, строго прямой или строго обратной связью) возможен «чистый» апгрейд. а переключаться между 1↔2, как и между именованными бранчами, обычным апгрейдом/дегрейдом низя, только полная очистка дерева сорцов (с помощью «-С», он же «--clean») и последующий «апгрейд» (на деле — чекаут) нужной версии. примерно так; вроде нигде не обманул ;)

arsi ★★★★★
()
Ответ на: комментарий от wieker

и да, забыл добавить один нюанс к выше сказанному: вы действительно можете переключиться с «1» на «2» и наоборот без «-С», но не одним «апгрейдом»: с «1» даунгрейд на «0», потом апгрейд на «2». и так же наоборот: с «2» даунгрейд на «0» и апгрейд на «1»:

$ hg parents
changeset:   2:72dc26d6937a
[…]
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg update 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg update 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

arsi ★★★★★
()

>Есть ли системы контроля версий, в которых можно

darcs, похоже.

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.