2010-10-22 5 views
4

У меня есть проект с ведущей ветвью и устойчивой ветвью - ветви расходятся давно. Теперь у меня есть пара фиксаций на стабильной ветке, которую я также хочу иметь на главной ветке (исправление ошибки). Я не могу слиться, так как ветви расходятся, и есть множество несвязанных изменений - я просто хочу 4 коммитов.Применяя те же изменения к разрозненным ветвям GIT

Так что я попробовал вишневый подбор. Однако это терпит неудачу, поскольку имена модулей верхнего уровня изменились с схемы «проект-модуль» на «модуль». При наборе вишни, GIT создает новые файлы в старых каталогах (как на старой ветке): переименование не обнаружено. Это возможно потому, что я получаю это предупреждение:

warning: too many files (created: 278 deleted: 5364), skipping inexact rename detection 

Я пытался мерзавец формат-патч + GIT утра, но это опять-таки создает файлы в старых каталогах.

Как я могу применить фиксации к основной ветке?

Спасибо, Адам

ответ

3

Я подозреваю, что вы могли бы сделать его работу (но займет много времени), изменив значение merge.renameLimit:

merge.renameLimit

Количество файлов, учитывать при выполнении определения переименования во время слияния; если не указано, значение по умолчанию равно diff.renameLimit.

Я уверен, что вишневый выбор будет уважать эту ценность. Если это не так, вы можете найти общего предка двух ветвей, применить там коммиты, а затем объединить их в обе ветви, чтобы убедиться, что он использует механизм слияния. (Обратите внимание, что это на самом деле то, что я бы рекомендовал делать в первую очередь. Слияния очень предпочтительны для вишневых заготовок, потому что они не создают повторяющихся коммитов, и они сохраняют поток истории.)

+0

Я остановился получив ошибку, но cherry-pick по-прежнему создает каталог, как и в старой ветке, вместо того, чтобы патчировать файлы в новой ветке. Я думаю, мне нужен способ применить некоторые коммиты, делая какой-то перевод пути ... любым другим способом, чем git format-patch + старый патч UNIX -n? Спасибо за подсказку с общим предком, я попробую в следующий раз. Хотя здесь я объединил запрос на pull, поэтому у меня не было большого контроля над тем, что было родителем ... – adamw

+0

Хммм, да, я могу вернуться к редактированию патчей «manual» (т. Е. 'Sed'). Вы все равно должны использовать 'git apply', но вместо' patch'. Он поддерживает все небольшие расширения, которые git делает в формате патча. – Cascabel

+0

@adamw: Я только что заметил фиксацию в git.git: [merge-recursive: опция для указания порога переименования] (http://git.kernel.org/?p=git/git.git;a=commit; h = 10ae7526beb505ddddba01f76ec97d5f7b5e0e5) - возможно, ваши файлы не совсем в пределах порога, и вы можете заставить его работать так, как вы хотите, сделав его более мягким. (Предполагая, что вы еще не сделали это вручную). – Cascabel