Mercurial: Как отправить набор изменений с закладкой, который создает новую удаленную головку, как если бы я отправлял новую ветку?

Общий вопрос.

Я пытаюсь использовать закладки вместо веток в mercurial. Причина этого в том, что я не хочу иметь много ненужных постоянных элементов с фиксированными именами в ветках.

Проблема возникает, когда я использую отдельную закладку для разработки новой функции и хочу отправить ее в репозиторий out. Ну, hgне позволяет мне нажать, если создаст «новую удаленную головку». Что я должен сделать, чтобы иметь возможность сделать такой толчок, как если бы я создавал новую ветку?

Пример (способ воспроизведения проблемы).

Алиса создает репозиторий:

C:\TestHg>mkdir Alice
C:\TestHg>cd Alice
C:\TestHg\Alice>hg init
C:\TestHg\Alice>echo line1>>file.txt
C:\TestHg\Alice>hg addremove
adding file.txt
C:\TestHg\Alice>hg commit -m "Initial commit."

Боб клонирует репозиторий Алисы:

C:\TestHg\Alice>cd ..
C:\TestHg>hg clone Alice Bob
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Алиса вносит некоторые изменения в код проекта:

C:\TestHg>cd Alice
C:\TestHg\Alice>echo line2 by Alice>>file.txt
C:\TestHg\Alice>hg commit -m "Alice continues her work on the project."

Боб начинает свою работу над New Cool Feature, используя отдельную закладку для идентификации своей независимой «ветки». ' работы:

C:\TestHg\Alice>cd ..\Bob
C:\TestHg\Bob>hg bookmarks
no bookmarks set
C:\TestHg\Bob>hg bookmark NewCoolFeature
C:\TestHg\Bob>hg bookmarks
 * NewCoolFeature            0:792db6cfc262
C:\TestHg\Bob>echo line2 by Bob (as a part of New Cool Feature implementation)>>file.txt
C:\TestHg\Bob>hg commit -m "Bob starts his work on New Cool Feature"

Боб пытается отправить свои изменения в каталог Алисы:

C:\TestHg\Bob>hg push -B NewCoolFeature
pushing to C:\TestHg\Alice
searching for changes
abort: push creates new remote head 38506e28a438!
(you should pull and merge or use push -f to force)

Хорошо, сначала Боб должен загрузить изменения Алисы в свой собственный репозиторий:

C:\TestHg\Bob>hg pull
pulling from C:\TestHg\Alice
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)

Ну, теперь у Боба две головы в его репозитории, и это нормально .

C:\TestHg\Bob>hg glog
o  changeset:   2:66beef200ba4
|  tag:         tip
|  parent:      0:792db6cfc262
|  user:        Alice
|  date:        Sun May 20 13:10:04 2012 +0400
|  summary:     Alice continues her work on the project.
|
| @  changeset:   1:38506e28a438
|/   bookmark:    NewCoolFeature
|    user:        Bob
|    date:        Sun May 20 13:12:26 2012 +0400
|    summary:     Bob starts his work on New Cool Feature
|
o  changeset:   0:792db6cfc262
   user:        Alice
   date:        Sun May 20 13:08:39 2012 +0400
   summary:     Initial commit.

После попытки сделать еще один толчок Боб получает запрос на слияние. Боб не хочет проводить слияние, потому что результаты его работы над New Cool Feature еще не готовы для слияния.

C:\TestHg\Bob>hg push -B NewCoolFeature
pushing to C:\TestHg\Alice
searching for changes
abort: push creates new remote head 38506e28a438!
(did you forget to merge? use push -f to force)

Пример связанного вопроса.

Что должен сделать Боб, чтобы иметь возможность отправить свои изменения в репозиторий Алисы, как будто его изменения находятся в отдельной ветке?

Обновления

UPD1: В реальной жизни репозиторий Алисы используется как центральная точка синхронизации для всех членов команды разработчиков.

8
задан Igor Soloydenko 20 May 2012 в 15:49
поделиться