Вариант использования для личных изменений - PullRequest
2 голосов
/ 02 июля 2010

Предположим, у меня следующий сценарий: я клонировал какой-то проект с открытым исходным кодом, скажем, с URL X. Теперь у меня есть его локальный клон. Я внес некоторые изменения в локальный клон, чтобы опробовать вещи, и зафиксировал их локально. Теперь я хочу следующее:

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

На данный момент я сделал следующее:

  1. Пометить мои изменения на hg tag
  2. Извлечение и объединение последнего кода с URL X
  3. Возврат хранилища к последней версии URL X

Но я чувствую, что это нехорошо, и это окольный путь. Я думаю, что есть лучший способ. Не могли бы вы предложить?

1 Ответ

3 голосов
/ 02 июля 2010

Вместо тегов я бы использовал закладку .Если вы используете Mercurial 1.8 или новее, у вас уже есть встроенная функция закладок.В противном случае вы сначала должны включить расширение, добавив в файл ~/.hgrc следующее:

[extensions]
bookmarks =

[bookmarks]
track.current = True

Теперь получите клон вашего проекта:

hg clone http://bitbucket.org/user/X
cd X

и взломайте:

# edit, edit, edit...
hg commit -m 'Great new feature!'

Теперь добавьте закладку в этот набор изменений

hg bookmark mywork

Это похоже на тег, но преимущество закладки заключается в том, что она перемещается, когда вы делаете новые коммиты.Это так же, как когда вы читаете книгу и перемещаете закладку вместе с вами.Когда закладка создана, вы можете сделать

hg update mywork

, чтобы вернуться к закладке изменений.

Когда в вышестоящем репозитории были сделаны изменения, вы извлекаете их и объединяете вВаша собственная ветка:

hg update mywork # if necessary
hg pull
hg merge
hg commit -m 'Merged new upstream changes.'    

Закладка переместится вперед и теперь указывает на созданный вами набор изменений слияния.Если вы хотите обновить версию до X, тогда

hg update --rev -2

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

...