Как я могу применить патч к слиянию git поддерева? - PullRequest
2 голосов
/ 16 февраля 2012

Я добавил подпроект в репозиторий git, выполнив слияние поддерева.Теперь мне нужно применить патч к подпроекту, но выполнение «git apply -v patch_name.patch» ничего не возвращает.Там нет сообщения об ошибке, и ни один из файлов также не изменяется.

Я попытался клонировать подпроект отдельно (т.е. в подкаталог / tmp) и сравнить его с тем, что находится в каталоге подпроекта в основном проекте;каталоги одинаковы.

Когда я запускаю патч для клона в / tmp, он применяется как положено.Кажется, что проблема связана с тем фактом, что каталог подпроекта является результатом слияния поддерева.

Я думаю, я мог бы исправить файлы в новом клоне, а затем скопировать их в то, что находится в каталоге подпроекта вмой главный проект.Кажется, мне не следовало этого делать.Есть ли лучший способ обойти это?

1 Ответ

2 голосов
/ 16 февраля 2012

Цитирование из руководства git apply:

Если патч содержит какие-либо изменения в подмодулях, то git apply Treats эти изменения следующим образом.

Если --index указан (явно или неявно), то фиксации подмодуля должны точно соответствовать индексу, чтобы патч был применен. Если какой-либо из подмодулей извлечен, то эти проверки полностью игнорируются, т. е. они не обязаны быть актуальными или чистыми и не обновляются.

Если --index не указан, то фиксации подмодуля в патче игнорируются и только отсутствие или присутствие соответствующий подкаталог проверен и (если возможно) обновлен.

Другими словами, вы должны предоставить --index для git apply, чтобы обратить внимание на подмодули.

Если вы хотите «форсировать» изменения, вы можете рассмотреть возможность использования обычной команды patch, хотя она не будет получать изменения разрешений и т.п., или использования git checkout rev /path/to/dir на поддереве (или в руководстве копия, которую вы предлагаете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...