Как использовать Mercurial для объединения изменений, внесенных вне репозитория? - PullRequest
1 голос
/ 27 июля 2010

Я присоединился к команде с новым кодом. Когда я присоединился, у них не было общего хранилища, и они прислали мне по электронной почте тарболл с его последней версией. (да, я знаю ...) Я работал над этим tarball, внося изменения и добавляя файлы. Теперь у команды есть репозиторий Mercurial (ура!), И он заполнен тем же кодом, содержащим более свежие изменения других людей. Другими словами, у меня есть оригинальный tarballed код в каталоге, мои изменения в другом каталоге и hg clone в третьем каталоге, где исходный tarballed код является общим предком.

Какой хороший способ объединить мои изменения в хранилище Mercurial? У Mercurial нет истории общего предка. Я новичок в Mercurial. Мой опыт работы с VCS связан с CVS, Perforce и некоторыми SVN. Могу ли я создать еще два локальных клона hg и переписать один с исходным кодом, другой - с измененным кодом и использовать Mercurial для их объединения? (и если да, то как?) Или я должен рассмотреть возможность использования независимого инструмента слияния, а затем скопировать объединенную версию в каталог моего клона? Или что-то еще?

Это все на RHE Linux.

Спасибо.

1 Ответ

1 голос
/ 27 июля 2010

Один из вариантов - что-то вроде этого:

diff -urN your-original-tarball your-current-code > mychanges.patch
hg clone their-current-repo your-local-clone
cd your-local-clone
hg update -r 0 # go to their oldest item in history
hg import --no-commit ../mychanges.patch
# check it out, test, fix any rejected changes, etc.
hg commit -m 'my changes'  # <-- you'll be warned this creates new heads
hg merge # merge your changes with their changes since they started using mercurial
hg commit -m 'merged my solo work with yours'

Это берет всю вашу работу на сегодняшний день, импортирует ее как новый набор изменений на основе самой старой из имеющихся у них ревизий, а затем объединяет эту работу со своей работой в Mercurial с тех пор, как они начали ее использовать.

В идеале, их r0 - это тарбол, который они вам дали, но есть надежда, что он не слишком отличается.

...