LINUX.ORG.RU

[Mercurial] Вместо update предлагает смержиться, чё ему надо ваще?

 


0

2

Доброго времени суток. История такова: была единая ветка(default), в которую я потихоньку делал комиты. Тут решил поработать над некоторой фичей в отдельной ветке. Сделал новую ветку:

hg branch feature
// затем сразу закомитил
hg commit -m "Initial commit of feature"
Теперь у меня появилось две ветки: default и feature. Я возвращаюсь в ветку default(hg update default), затем вношу некоторые изменения в код и делаю комит. Всё отлично, закомитил. И тут я думаю дайка я переключусь на свою ветку feature и поработаю над ней, делаю hg update feature на что mercurial начал ругаться, мол неплохо бы сделать merge или откатить изменения типа hg update -C(точно вывод не помню, не у компа). Чё ему надо ваще, чё он хочет? У меня же две ветки, просто хочу переключиться с одной на другую, потом, когда вторую ветку допилю - буду мержить, сейчас нафига?

★★★★★
Ответ на: комментарий от one_more_hokum

думаю что нет, а как проверить? Потому как после того как внёс изменения, всегда комитил.

xterro ★★★★★
() автор топика

Тебе же сказали - если не хочешь мержить, сделай update -C. А спрашивает он потому, что по историческим причинам hg up иногда выполнял merge.

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

Один раз у коллеги такое тоже произошло. Не знаю, как он этого добился, но в рабочем каталоге с дочерней ревизией бранча X был установлен бранч default, хотя бранч default находился на самом деле в другом месте. Вылечилось командой branch X.

Sorcerer ★★★★★
()

покажи вывод hg parent, hg heads и hg state -mardC на голове ветки default. скорей всего есть незафиксированные изменения, может ты файл какой добавил или удалил или еще что. потому что если изменений нет, то мержить ничего, очевидно, не надо.

$ hg init test
$ cd test
$ touch file1
$ hg add 
adding file1
$ echo commit1 >>file1
$ hg com -m "default commit1"
$ hg branch feature
marked working directory as branch feature
$ hg branch
feature
$ echo commit2 >>file1
$ hg com -m "feauture commit1"
$ hg parent
changeset:   1:b25f67622022
branch:      feature
tag:         tip
user:        Alexander Sauta <demosito@gmail.com>
date:        Fri Feb 03 10:24:34 2012 +0400
summary:     feauture commit1

$ hg up default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo commit3 >>file1
$ hg com -m "default commit2"
$ hg up feature
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

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

Хм... у вас тут всё прошло нормально, а у меня попросил закомитить

$ hg branch feature
marked working directory as branch feature
$ hg branch
feature
У меня после того как я сделал hg branch feature, не смог переключитьс яна неё, сказал мол надо закомитить.

Репа лежит тут, можно вытянуть посмотреть, кода не много. https://bitbucket.org/xterro/gtksheetx/overview

либо:

hg clone https://bitbucket.org/xterro/gtksheetx

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

во-первых, удали немедленно нахер каталог CMakefiles и файлы Makefile и CMakeCache.txt. Во-вторых УМВР:

$ hg clone https://bitbucket.org/xterro/gtksheetx
destination directory: gtksheetx
requesting all changes
adding changesets
adding manifests
adding file changes
added 13 changesets with 129 changes to 37 files (+1 heads)
updating to branch default
37 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd gtksheetx
$ hg parent
changeset:   12:c09799ee9233
tag:         tip
parent:      10:2639cb5c5a99
user:        Olifiro Kirill <olkir@bk.ru>
date:        Thu Feb 02 23:15:02 2012 +0600
summary:     Draw header arrow
$ hg branch
default
$ echo "buggy commit" >> src/gtksxview.c
$ hg st
M src/gtksxview.c
$ hg com -m "buggy commit on default"
$ hg up scrollbars
7 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg up default
7 files updated, 0 files merged, 0 files removed, 0 files unresolved

у тебя точно были незакоммиченные изменения, возможно что от работы cmake.

gaga
()
Ответ на: комментарий от xterro

xterro

У меня после того как я сделал hg branch feature, не смог переключитьс яна неё, сказал мол надо закомитить.

hg branch feature:

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

А по теме, если hg st ничего не показывает, то хз...

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

В смысле, после того как я сделал hg branch scrollbars(в моём случае). Я запросил список ветвей hg branches, показало только одну - default

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

Я запросил список ветвей hg branches, показало только одну - default

Потому что ты ничего не закомитил в новую ветку, вот он и показывает, что ее нет. hg branch feature говорит, что следующий комит должен помечаться как комит на ветку feature. Если ты ничего не закомитил, а сразу обновился на ветку default (hg up default), то и ветвь feature создана не будет, т.к. на ней нет комитов. Это написано в первой строчке мана по branch.

Ветка в ртути - это дополнительное поле в каждом комите, т.е. она не существует без комитов, и множество комитов с этим одинаковым полем образуют одну ветку. Ты, видимо, хотел создать «легковесную» ветку а-ля гит, для этого надо использовать hg bookmark или просто обновиться на одну ревизию назад и закомитить.

gaga
()
Ответ на: комментарий от xterro

Это временные файлы cmake, они должны быть разными на разных машинах. Они генерируются автоматически при заупуске cmake. В репах их быть не должно. Если другой человек запустит сборку на своей машине с твоими каталогами, у него нихрена не заработает.

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

у тебя точно были незакоммиченные изменения, возможно что от работы cmake.

Интересно, откуда им было взяться, ведь по графику видно, что новую ветку я сделал после коммита в default. Чёта трудно мне этиветки даются, надо было комитить в default, «идти по линейке» и проблем не знать )))

P.S. Спасибо за ссылки

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

надо было комитить в default, «идти по линейке» и проблем не знать

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

$ hg init test
$ cd test
$ echo "default commit1" >>file1
$ hg add
adding file1
$ hg com -m "default commit1"
$ hg tag def1
$ echo "feature commit1" >>file1
$ hg com -m "feature commit1"
$ echo "feature commit2" >>file1
$ hg com -m "feature commit2"
$ hg up def1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo "default commit2" >>file1
$ hg com -m "default commit2"
created new head
$ hg glog
@  changeset:   4:4a32b03b3ac2
|  tag:         tip
|  parent:      0:d23fc588d1af
|  user:        Alexander Sauta <demosito@gmail.com>
|  date:        Fri Feb 03 13:15:48 2012 +0400
|  summary:     default commit2
|
| o  changeset:   3:28ca8891d9d6
| |  user:        Alexander Sauta <demosito@gmail.com>
| |  date:        Fri Feb 03 13:15:28 2012 +0400
| |  summary:     feature commit2
| |
| o  changeset:   2:2bd10cc68fe2
| |  user:        Alexander Sauta <demosito@gmail.com>
| |  date:        Fri Feb 03 13:15:17 2012 +0400
| |  summary:     feature commit1
| |
| o  changeset:   1:a4cced5b87dc
|/   user:        Alexander Sauta <demosito@gmail.com>
|    date:        Fri Feb 03 13:14:54 2012 +0400
|    summary:     Added tag def1 for changeset d23fc588d1af
|
o  changeset:   0:d23fc588d1af
   tag:         def1
   user:        Alexander Sauta <demosito@gmail.com>
   date:        Fri Feb 03 13:14:48 2012 +0400
   summary:     default commit1

Так ветки получаются автоматически, ничего делать даже не надо. Можно при необходимости пометить нужную ревизию закладкой, чтобы обновляться на нее по имени. Это будет так же, как в гите. И именно это тебе и нужно, потому что ветки, которые создаются командой branch - долгоживущие, они остаются в истории навсегда (правда, их можно закрыть и не показывать).

Их как правило используют для двух непрерывно существующих линий разработки. Например, сам mercurial использует две именованных ветки: default и satble. В первой ведется вся разработка, она сливается во вторую как только ревизия оказывается достаточно безопасной и оттестированной.

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

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

Думаю надо так же сделать. мне теперь можно вернуться к комиту с которго я начал ветвление и удалить всё что было «выше», т.е удалить коммит в новой ветке scrollbars и удалить коммит в ветке default, т.е вернуться к состоянию, будто я никаких веток и не делал?

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

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

gaga
()
Ответ на: комментарий от xterro

Думаю надо так же сделать. мне теперь можно вернуться к комиту с которго я начал ветвление и удалить всё что было «выше», т.е удалить коммит в новой ветке scrollbars и удалить коммит в ветке default, т.е вернуться к состоянию, будто я никаких веток и не делал?

Если ты хочешь удалять, то освой hg mq. Это чем-то похоже по задаче на гитовские лёгкие ветки, которые ты удаляешь после мерджа. Хотя работает немного не так.

anonymous
()
Ответ на: комментарий от gaga

Кстати, вот что мне выдаёт HG:

kirill@nx6110:~/REPOSITORIES/gtksheetx$ hg branch
default
kirill@nx6110:~/REPOSITORIES/gtksheetx$ hg branches
default                       12:c09799ee9233
scrollbars                    11:6f05cbed48a0
kirill@nx6110:~/REPOSITORIES/gtksheetx$ hg update scrollbars
abort: crosses branches (merge branches or use --clean to discard changes)

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

Сделал hg update --clear scrollbars, всё стало нормально )

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

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

gaga
()

укажи версию mercurial (я не нашел, с телефона тут)

пользуся tortoiseHg и забудь о этих странных проблемах навсегда

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft
kirill@nx6110:~$ hg -v
Mercurial Distributed SCM (version 1.7.5)
(see http://mercurial.selenic.com for more information)
xterro ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.