2016-06-22 7 views
0

У меня возникла проблема переместить фиксацию из двух проектов, детали: - Проект 1: У вас есть один git, который перегруппирует много каталогов. - Project 2: Have одни и те же каталоги проекта 1, но для каждого каталога есть разделенный git. Вопрос заключается в: у меня есть обязательство в проекте один, что трогать файлы в 2-х каталогов и плюс, и я хочу забрать вишни, которые совершают и переместить все изменения каждого файла и фиксации их проекта 2.Захват Cherry-pick от одного git до нескольких git

Спасибо впереди

ответ

0

Вишневый захват захватывает всю фиксацию и применяет всю фиксацию к вашей текущей ветке. Насколько я понимаю ваш вопрос, вы хотите принять коммиты, которые вносят изменения в несколько каталогов, а вишня выбирает только изменения одного каталога в каждой фиксации в отдельный репозиторий git, который включает только этот каталог.

Поскольку вишневый кирк, как я уже сказал, захватывает все совершение, он не будет работать так, как он сам.

Однако для достижения этой цели необходимо использовать вишневый подборщик вместе с фильтрующей ветвью.

Первое, что нужно сделать, это проверить новую рабочую ветвь в проекте 1, чтобы не испортить ни одну из существующих ветвей. Ваша рабочая ветка будет пылающим крушением, к концу этого, и в этот момент вы можете спокойно избавиться от него; никакого вреда, не фола.

В новой рабочей ветке используйте git filter-branch --tree-filter, чтобы переписать фиксации, удалив все в дереве, за исключением одного из рассматриваемых каталогов (вам нужно будет начать переписывать родителя коммита/для миграции, а не для фиксации/фиксации).

На этом этапе переписанные коммиты будут касаться только файлов в одном каталоге в проекте 1 (вы также получите все остальные каталоги, полностью сдутые, в вашей рабочей ветке, но кому это интересно). Родительский коммит включает удаление всех других каталогов в рабочей ветке, и все последующие коммиты ограничены изменениями в оставшейся директории. На этом этапе вы сможете черви-забрать эти коммиты в соответствующий репозиторий git для Project 2.

Намочите, промойте и повторите для каждого такого каталога, который вы пытаетесь перенести.

+0

Спасибо Сэм за ваш ответ, я тестирую его, но я никогда не работал с фильтром-веткой git -tree-фильтра, у меня есть пример и скажу ваше решение: - В проекте 1: у меня есть фиксация b0cefe4de84, что вносить изменения в: - Структуры/базы/LockPatternUtils.java - пакеты/приложений/Настройки/security_finger_picker.xml - пакеты/приложения/Mms/SecuritySettings.java - В проекте 2: у меня есть тезисы мерзавец: - (frameworks-base) frameworks/base - (пакеты-приложения-настройки) пакеты/приложения/настройки/ - (пакеты-приложения-Mms) пакеты/приложения/Mms – Optimmus

+0

Ну, теперь у вас есть возможность узнать, как фильтровать ветви , Вы должны найти много информации в документации git и поиске Google. Stackoverflow не является учебным сайтом, даже если это так, для каждого учебника недостаточно 400-символьного комментария. –

+0

Спасибо за ваш ответ, эффективно вы правы, я уже искал более глубокую информацию в git, и я сделал эту командную строку: git filter-branch --tree-filter 'rm -r! (Frameworks/base)' b0cefe4de84^..HEAD , где будет храниться фреймворк/база и удалять остальные файлы в фиксации, но вы хотите, чтобы у меня была ошибка git-filter-branch: 1: eval: Синтаксическая ошибка: «(« неожиданно, во всяком случае, почему вы хотите »запустить перепишите из родителя коммитов/коммитов, которые вы хотите перенести, а не commit/commit). " ? – Optimmus

 Смежные вопросы

  • Нет связанных вопросов^_^