LINUX.ORG.RU

Git: экспортировать коммиты определённого каталога

 


1

2

Ситуация такая. Был гит-репозиторий xxx с каталогом XXX внутри. Он использовался в составе проекта PROJECT. Т.е. имеется каталог ./PROJECT/XXX, у PROJECT свой гит. Но в процессе разработки в XXX пришлось внести несколько изменений.

Теперь подумалось что неплохо бы XXX опубликовать, т.к. внесённые изменения кому-то могут пригодиться. То есть опубликовать форк xxx. Самый простой способ это просто сделать diff и сделать форк с одним коммитом, но это не эстетично.



Последнее исправление: Gicdillax (всего исправлений: 2)

Самый примитивный вариант :)

for commit in $(git log --pretty=format:'%h' $DIR); do git format-patch $commit -1; done

joy4eg ★★★★★
()
Ответ на: комментарий от joy4eg

Спасибо. Он сгенерировал патчи (почему-то все файлы начинаются на «0001»), а теперь их можно подсунуть гиту другого (оригинального) проекта с помощью git apply *.patch и комментарии к коммитам сохранятся (они содержатся в патчах)?

Gicdillax
() автор топика

Если я правильно понял, что нужно выделить часть дерева исходников со своей историей, то для гита как-то советовали subtree

orm-i-auga ★★★★★
()
Ответ на: комментарий от Gicdillax

А вообще, самый верный способ переноса коммитов это - cherry-pick

joy4eg ★★★★★
()
Ответ на: комментарий от Gicdillax

это потому что format-patch вызывался индивидуально для каждого коммита. таким образом, у тебя не сохранилась последовательность наложения патчей.

если ты заранее выяснишь диапазон коммитов, из которых надо сделать патчи, то можно намного красивее:

git format-patch from..to $DIR

и тогда у тебя каждый патч будет начинаться с индекса и всё будет по порядку.

aol ★★★★★
()

Для этого есть git filter-branch. В его man page как раз описано, как выделять каталог в отдельный репозиторий с сохранением истории.

dmitry_vk ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.