Я не могу представить, какие различные решения я нашел и изучил для отслеживания внешнего кода. Не говоря уже о том, как применять их к мой прецедент...
Вы, ребята, так любезны пролить свет на это и помочь мне с мой конкретный вариант использования? Каким будет наилучшее решение для следующая, конкретная проблема? (Я не собираюсь обобщать мои проблема, поскольку я могу ошибаться в предположениях о материалах, особенно так как я так новичок в этом...)
Я создаю сайт в Django (веб-фреймворк на Python). Теперь, есть много сторонних плагинов, доступных для использования с Django (Django называет их "приложениями" ), которые вы можете добавить в свой проект. Некоторые из эти приложения могут потребовать немного модификации, чтобы работать, как я хочу их. Но если вы начнете вносить изменения в сторонний код, вы ввести проблему обновления этого кода при появлении более новых версий И в то же время сохраняя ваши локальные модификации.
Итак, способ, которым я мог бы это сделать в Subversion, - использовать ветки поставщика. Мой макет хранилища будет выглядеть следующим образом:
/trunk
...
/apps
/blog-app
...
/tags
...
/branches
...
/vendor
/django-apps
/blog-app
/1.2
/1.3
/current
/other-app
/3.2
/current
В этом случае /trunk/apps/blog -app было бы svn copy'd одного из теги в /vendor/django -apps/blog-app. Скажем, что это был v1.2. А также что я теперь хочу обновить мою версию в trunk до v1.3. Как вы можете см., я уже обновил /vendor/django -apps/blog-app/current (используя svn_load_dirs) и 'tagged' (svn copy) это как /vendor/django -apps/blog-app/1.3. Теперь я могу обновить /trunk/apps/blog -app с помощью svn merge'ing изменений между /vendor/django -apps/blog-app/1.2 и /vendor/django -apps/blog-app/1.3 on/trunk/apps/blog-app. Это будет сохраните мои локальные изменения. (для людей, неизвестных этому процессу, это описано в Справочник по Subversion: http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html)
Теперь я хочу сделать весь этот процесс в Git. Как я могу это сделать?
Позвольте мне повторить итерацию требований:
- Я должен уметь размещать внешний код в произвольной позиции в дереве
- Я должен иметь возможность изменять внешний код и сохранять (фиксировать) эти изменения в моих репозиториях Git
- Я должен быть в состоянии легко обновить внешний код, если новый версия будет выпущена, сохраняя мои изменения.
Экстра (для бонусных очков;-)):
- Предпочтительно, я хочу сделать это без чего-то вроде svn_load_dirs. я подумайте, что должно быть возможно отслеживать приложения и их обновления прямо из своего репозитория (большинство сторонних приложений Django хранятся в Subversion). Предоставление мне дополнительного преимущества для возможности просмотра отдельные сообщения совершать сообщения между релизами. И фиксация слияния конфликтов легче, так как я могу иметь дело с большим количеством мелких коммитов вместо одного искусственного коммита, созданного svn_load_dirs. Я думаю, что можно было бы сделать это с помощью svn: externals в Subversion, но у меня есть никогда не работал с этим раньше...
Решение, в котором может использоваться комбинация обоих методов, еще более предпочтительным, поскольку могут быть разработчики приложений, которые не использовать источник управления или не публиковать свои репозиции. (Значение как svn_load_dirs-like поведения, так и отслеживания прямо из Репозиция субверсии (или другая Git))
Я думаю, что мне придется либо использовать поддеревья, подмодули, переадресацию, ветки,... или их комбинацию, но, если я знаю, какой из них или как это сделать: S
Я с нетерпением жду ваших ответов! Пожалуйста, будьте максимально подробными когда я отвечаю, так как мне уже было трудно понять другие примеры, найденные в Интернете.
Заранее спасибо