Могу ли я объединить историю двух файлов в Mercurial?

Мне нужно объединить функциональность двух классов в одну, но мне интересно, могу ли я объединить их историю изменений?

Оба класса содержат много предыдущих изменений, поэтому я хочу сохранить историю изменений в одном месте для справки. Я могу сделать комментарий в комбинированном классе, но в среде IDE нелегко получить историю удалённого файла.

Ответ 1

Для этого вам необходимо записать слияние файлов в виде сменного набора.

Произнести changeet 0 - ваша текущая глава с файлами A и B, которые вы хотите объединить в файл C. Для этого переименуйте свой файл A в C и зафиксируйте в качестве набора изменений 1, затем обновите обратно до набора изменений 0, переименуйте файл B на C и зафиксировать это как набор изменений 2. Затем вы объедините эти два набора изменений, объединив их содержимое и удалив оставшиеся файлы A и B. Это заставляет историю файлов C регистрироваться как нисходящие из A и B. Наконец, вы можете переименуйте файл C обратно в A.

Полученное дерево выглядит следующим образом:

0 [A, B] --- 1 [A, C] \
          \            \
           \ 2 [C, B] --- 3 [C] --- 4 [A] 

Пример командной строки:

$ hg init
$ echo a > a
$ echo b > b
$ hg add a b
$ hg commit -m "add files a and b"
$ hg mv a c
$ hg commit -m "rename a to c"
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg mv b c
$ hg commit -m "rename b to c"
created new head
$ hg merge
merging c
warning: conflicts during merge.
merging c incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 1 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
$ ls
c      c.orig
$ cat c
<<<<<<< local
b
=======
a
>>>>>>> other
$ echo ab > c
$ hg resolve --mark c
$ hg commit -m "merge a and b into c"
$ hg mv c a
$ hg commit -m "rename c back to a"

И если вы сейчас наберете hg log -f a, вы увидите, что отображается история обоих файлов.