Non riesco a trovare le soluzioni diverse che ho trovato e studiato per il codice esterno di rilevamento . Per non parlare di come applicarli a il mio caso d'uso ...Tracciamento del codice di terze parti con Git
Vorresti essere così gentile da far luce su questo e aiutarmi con il mio caso d'uso specifico ? Quale sarebbe la migliore soluzione per il seguente problema concreto ? (Non ho intenzione di tentativo di generalizzare la mia problema, dal momento che potrei fare ipotesi errate circa roba, soprattutto dato che sono così nuovo con tutto questo ...)
Sto costruendo un sito web in Django (un framework web in Python). Ora, , ci sono molti plugin di terze parti disponibili per l'uso con Django (Django li chiama "app"), che puoi inserire nel tuo progetto. Alcune delle queste app potrebbero richiedere un po 'di modifica per funzionare come mi piace I . Ma se inizi a modificare il codice di terze parti, il tuo problema è quando le versioni più recenti appaiono E allo stesso tempo mantieni le tue modifiche locali.
Quindi, il modo in cui lo farei in Subversion è utilizzando i rami del fornitore. mio layout repository sarebbe simile a questa:
/trunk
...
/apps
/blog-app
...
/tags
...
/branches
...
/vendor
/django-apps
/blog-app
/1.2
/1.3
/current
/other-app
/3.2
/current
In questo caso/trunk/apps/blog-app sarebbero stati SVN copy'd di uno dei i tag nella/vendor/django-apps/blog- app. Dì che era v1.2. E che ora voglio aggiornare la mia versione in trunk alla v1.3. Come puoi vedere vedi, ho già aggiornato/vendor/django-apps/blog-app/corrente (usando svn_load_dirs) e 'taggato' (svn copy) come /vendor/django-apps/blog-app/1.3 . Ora posso aggiornare/trunk/apps/blog-app svn inserendo le modifiche tra /vendor/django-apps/blog-app/1.2 e /vendor/django-apps/blog-app/1.3 on/trunk/apps/blog-app. Questo sarà mantenere le mie modifiche locali. (per le persone sconosciute con questo processo, è descritto nel manuale Subversion: http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html)
Ora voglio fare tutto questo processo in Git. Come posso fare questo?
Permettetemi di ribadire i requisiti:
- devo essere in grado di inserire il codice esterno in una posizione arbitraria nell'albero
- devo essere in grado di modificare il codice esterno e mantenere (impegnarsi) questi modifiche nei miei pronti contro termine Git
- devo essere in grado di aggiornare facilmente il codice esterno, dovrebbe essere rilasciata una nuova versione , pur mantenendo le mie modifiche
extra (per i punti bonus ;-)):
- Preferibilmente voglio fare questo senza qualcosa di simile svn_load_dirs. I penso che sia possibile tenere traccia delle app e dei loro aggiornamenti direttamente dal loro repository (la maggior parte delle app di Django di terze parti sono conservate in Subversion).Dandomi l'ulteriore vantaggio di essere in grado di visualizzare i singoli messaggi di commit tra le versioni. E il fixing combina più facilmente i conflitti poiché posso gestire un sacco di piccoli commit invece di un commit artificiale creato da svn_load_dirs. Credo che si potrebbe fare questo con svn: gli esterni in Subversion, ma non ho mai lavorato con che prima ...
Una soluzione in cui una combinazione di entrambi i metodi potrebbero essere utilizzati sarebbe ancora più preferibile, poiché potrebbero esserci sviluppatori di app che non usano il controllo del codice sorgente o che non rendono pubblici i loro repository. (Significato sia il comportamento svn_load_dirs-like e il monitoraggio direttamente da un reposity Subversion (o un altro Git))
penso che avrei neanche dovuto usare le sottostrutture, sottomoduli, rebase, rami, ... o una combinazione di questi , ma schiaffeggiami se so quale (i) o come farlo: S
Aspetto con impazienza le tue risposte! Si prega di essere il più dettagliato possibile durante la risposta, poiché ho già avuto difficoltà a comprendere altri esempi trovati online.
Grazie in anticipo
Hai il tuo "aha" -momente nel frattempo? Sto anche cercando questo e sono ancora un po 'insicuro su come farlo. – acme
Beh, ho sicuramente imparato molto di più su Git da quando ho scritto questa domanda e ho anche una migliore comprensione dell'aggiunta di telecomandi e fusione in rami/tag da quei telecomandi. In effetti sto usando qualcosa di simile ora sul posto di lavoro per mantenere aggiornata la nostra installazione Drupal. – hopla
Per quanto riguarda i sottomoduli: non li ho ancora provati, ma ne ho subito il succo. Tuttavia, sembra ancora un sistema molto complicato e soggetto a errori. Allora, come faccio a installare Django ora? Bene, ho avuto anche un po 'di aha in Django e ho imparato molti metodi validi che possono essere usati per estendere le app. Quindi installo app esterne in virtualenv con pip, che è "la strada giusta da fare" comunque. Quindi ho evitato il problema e ho trovato anche una soluzione molto migliore :) – hopla