Присоединяйтесь к истории развития вилки с ее оригиналом - PullRequest
1 голос
/ 13 марта 2012
  • У меня есть два проекта. Одна оригинальная и одна вилка .
  • Исходное состояние fork является более старым состоянием original .
  • Были внесены изменения в fork , которые не были внесены в оригинал. (Весь источник в src / )
  • (некоторые из этих изменений являются тяжелыми позволяет- (перемещать / удалять) -слоты-файлов виды изменений)
  • (Эти изменения были сделаны для данных не источника)
  • (Эти серьезные изменения могут быть отброшены. Я могу восстановить все данные, но я бы не хотел этого делать)
Изменения оригинала были применены к fork вручную в некоторые моменты истории fork .

Теперь я хочу объединить обе истории развития так, чтобы репо fork получило чистую историю с обоими:
Изменения от оригинала и вилки в правильном хронологическом порядке.


Графический:

(Помните: связь между этими историями - svn-слияния вручную)


         (I)--J--(K)--L--(M)--N---O <b>fork</b>
         /       /       /
    A---B---C---D---E---F---H <b>original</b>

Должен быть превращен в:


    A---B---C---J---D---E---L---F---H--N---O <b>fork</b>
    |   |   |
    A---B---C---D---E---F---H <b>original</b>


Справочная информация:

Оба проекта были разработаны с использованием SVN, оба проекта были преобразованы в GIT и загружены в Github.
Вилка основана только на оформлении заказа. Каждая синхронизация с
оригинал была выполнена с использованием 2 оформлений, diff / patch и текстового редактора;)

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Я вручную добавил все коммиты вилки и оригинала с помощью cherry-pick.Также я сбрасываю состояние в конце и после каждого вишневого пика с оригиналом в состояние после того, как руководство объединяет svn и фиксирует это состояние.
Это не совсем хорошее решение (перемещенные файлы - огромная проблема,решение для автоматических слияний грязное), но этого достаточно для просмотра и поиска в истории

0 голосов
/ 13 марта 2012

Если я вас правильно понимаю, вы в основном хотите оригинальное репо как есть, но с удаленными / перемещенными файлами, соответствующими ветке (поскольку все изменения, сделанные в оригинале, уже находятся в вилке).Поскольку форк на самом деле не является форком (на основе проверки), я бы, вероятно, попытался воспроизвести операции удаления / перемещения, выполненные в форке, в origin.

С помощью git log вы можете использовать --diffАргумент -filter, чтобы узнать, какие файлы были удалены и / или перемещены.Должна быть возможность проанализировать выходные данные этой команды и выполнить «git rm» (и «git mv» соответственно) на этих выходных данных.

Чтобы увидеть, какие файлы были удалены, вы можете сделать что-то вроде:

git log --diff-filter=D --date-order --reverse --name-status | grep -E '^D[[:blank:]]+'

, что в одном из моих репозиториев дает:

D       dwgdirect/lib_340/vc10/dbg/td_gi.pdb
D       dwgdirect/lib_340/vc10/dbg/td_gs.pdb
D       dwgdirect/lib_340/vc10/dbg/td_spatialindex.pdb
D       kernel/custom/dwgdirect/namespace.h
D       std/res/hdracking/db/editablesettings.db
D       std/res/hdracking/db/settings.db
D       std/res/hdracking/om.res

Сделайте то же самое, что и выше, но замените D на M в --diff-filter и в grep regexp, чтобы получить перемещенные файлыНапример,

git log --diff-filter=M --date-order --reverse --name-status | grep -E '^M[[:blank:]]+'

Передайте выходные данные в awk, чтобы разобрать точные имена файлов и избавиться от букв D и M (я не смог заставить awk работать с моим cygwin, поэтому вы должны попробовать это длясам).Оберните все это в скрипт, который выполняет "git rm" и "git mv" в каждой строке каждого цикла.

...