2010-07-02 2 views
2

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

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

Сейчас я следующее:

  1. Тэг моих изменений с hg tag
  2. Тягового & слияния последний код из URL X
  3. Revert хранилище для последней ревизии URL X

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

ответ

3

Вместо тегов, я бы использовал bookmark. Если вы используете 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.

+0

Спасибо, но закладка только что улучшена, здесь, верно? Я имею в виду, может быть, то, что я искал, это hg update --rev? вместо возврата? – zaharpopov

+0

zaharpopov: О, я прочитал ваш «Revert repository для последней редакции URL X» как значение 'hg update' с последней версией X. Пожалуйста, прочитайте справку для обеих команд - короткая версия - это обновление' hg update' содержимое файла * и * изменяет родительскую версию рабочей копии, тогда как 'hg revert' только обновляет файлы. –