В гите есть встроенные средства для создания и накладывания патчей. Но по умолчанию git не сохраняет сообщения коммитов "как есть" и изменяет время коммитов на время, когда были наложены патчи. Из-за этого меняются хэши коммитов. Что особенно неприятно если у вас есть два репозитория и один является субмодулем (git submodule) другого (т.к. основной репозиторий проверяет актуальность субмодуля именно по хэшу, который в данном случае не будет совпадать).

Чтобы сохранить комментарии и время коммитов патч нужно формировать командой:
git format-patch -k --stdout $HASH > ./patch_file
Где $HASH — хэш коммита, начиная с которого изменения необходимо сохранить в патче.
Накладывать полученный патч следует командой (одной строкой):
GIT_COMMITTER_NAME='Paul' GIT_COMMITTER_EMAIL='paul@example.com' git am -k --committer-date-is-author-date < patch_file
Где Paul — имя автора коммитов из патча, paul@example.com — адрес его почты (как указано в конфиге гита).

UPD:  если использование патчей не является обязательным условием, а нужен механизм синхронизации репозиториев как таковой, то возможно вам стоит копнуть в сторону git bundle.


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.