Parece que no puedo asimilar las diferentes soluciones que he encontrado y estudié para rastrear el código externo. Y mucho menos entiendo cómo aplicarlos a mi caso de uso ...Código de seguimiento de terceros con Git
¿Podrían ser tan amables de arrojar algo de luz sobre esto y ayudarme con mi caso de uso específico? ¿Cuál sería la mejor solución para el siguiente problema concreto, ? (No voy a intento de generalizar mi problema , ya que podría hacer suposiciones incorrectas sobre las cosas, sobre todo ya que soy tan nuevo con todo esto ...)
Estoy construyendo un sitio web en Django (un marco web en Python). Ahora, , hay muchos complementos de terceros disponibles para usar con Django (Django los llama 'aplicaciones'), que puede incluir en su proyecto. Algunas de estas aplicaciones pueden requerir un poco de modificación para funcionar como I . Pero si comienza a hacer modificaciones en el código de terceros, introduce el problema de actualizar ese código cuando aparecen versiones más nuevas Y al mismo tiempo, conserva sus modificaciones locales.
Por lo tanto, la forma en que lo haría en Subversion es mediante el uso de sucursales de proveedores. Mi entorno del repositorio se vería así:
/trunk
...
/apps
/blog-app
...
/tags
...
/branches
...
/vendor
/django-apps
/blog-app
/1.2
/1.3
/current
/other-app
/3.2
/current
En este caso/trunk/aplicaciones/blog aplicación habría sido SVN copy'd de uno de las etiquetas en/vendor/django-apps/blog- aplicación Digamos que era v1.2. Y que ahora quiero actualizar mi versión en trunk a v1.3. Como puede ver, ya he actualizado/vendor/django-apps/blog-app/current (usando svn_load_dirs) y 'tagged' (svn copy) como /vendor/django-apps/blog-app/1.3 . Ahora puedo actualizar/trunk/apps/blog-app mediante svn fusionando los cambios entre /vendor/django-apps/blog-app/1.2 y /vendor/django-apps/blog-app/1.3 en/trunk/apps/blog-app. Esto hará que guarde mis cambios locales. (por personas desconocidas con este proceso, que se describe en el manual Subversion: http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html)
Ahora quiero hacer todo este proceso en Git. ¿Cómo puedo hacer esto?
Permítanme reiterar los requisitos:
- debo ser capaz de colocar el código externo en una posición arbitraria en el árbol
- que debe ser capaz de modificar el código externo y mantener (commit) estas modificaciones en mis repositorios Git
- debo ser capaz de actualizar fácilmente el código externo, debe ser liberado una nueva versión , manteniendo mis cambios
extra (para puntos de bonificación ;-)):
- Preferiblemente quiero hacer esto sin algo así como svn_load_dirs. Creo que es posible rastrear las aplicaciones y sus actualizaciones directamente desde su repositorio (la mayoría de las aplicaciones de Django de terceros se guardan en Subversion).Me brindó la ventaja adicional de poder ver los mensajes de compromiso individuales entre lanzamientos. Y solucionar los conflictos de combinación más fácilmente ya que puedo manejar un montón de confirmaciones pequeñas en lugar de la única confirmación artificial creada por svn_load_dirs. creo que se podría hacer esto con svn: externos en Subversion, pero tengo nunca se trabajó con eso antes ...
Una solución donde una combinación de ambos métodos se podría utilizar sería aún más preferible, dado que podría haber desarrolladores de aplicaciones que no usan usan el control de fuente o no ponen sus repos disponibles públicamente. (Es decir, tanto el comportamiento svn_load_dirs similar desplazando derecho de un reposity Subversion (u otra Git))
creo que tendría o bien tienen que utilizar subárboles, cartuchos, rebase, ramas, ... o una combinación de los , pero bájame si sé cuál (es) o cómo hacerlo: S
¡Espero con ansias tus respuestas! Sea lo más detallado posible al responder, ya que tuve dificultades para comprender otros ejemplos de que se encuentran en línea.
Gracias de antemano
¿Ya tiene su "aha" mientras tanto? También estoy buscando esto y todavía estoy un poco inseguro de cómo hacerlo. – acme
Bueno, ciertamente he aprendido mucho más sobre Git desde que escribí esta pregunta y también tengo una mejor idea de agregar controles remotos y fusionarme en ramas/etiquetas de esos controles remotos. De hecho, estoy usando algo así como ahora también en el trabajo. Mantén nuestra Drupal instalada al día. – hopla
En lo que concierne a los submódulos: realmente no los he probado aún, pero entiendo su esencia ahora. Sin embargo, parece un sistema muy complicado y propenso a errores. Entonces, ¿cómo hago mis instalaciones de Django ahora? Bueno, también tuve un momento de 'aha' en Django y aprendí muchos métodos legítimos que se pueden usar para extender aplicaciones. Y entonces simplemente instalé aplicaciones externas en virtualenv con pip, que es 'el camino correcto' de todos modos. Así que casi evité el problema y también obtuve una solución mucho mejor en su lugar :) – hopla