Я пытаюсь использовать закладки вместо веток в 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: В реальной жизни репозиторий Алисы используется как центральная точка синхронизации для всех членов команды разработчиков.