Qualcuno sta usando la nuova funzione git super/subproject nei progetti reali? Quanto bene funziona? Per esempio, capisco che se spingo a un sottoprogetto devo chiamare manualmente i ganci di superprogetti (magari usando l'hook dei sottoprogetti, ma comunque)?Qualcuno sta davvero usando git super/sottoprogetti?
risposta
Utilizzando modulo, si definisce nello spazio di lavoro Git (cioè il repository Git "super-progetto") una configurazione.
Per "configurazione", intendo "l'elenco di tag o nodo SHA-1 necessario per lavorare nel proprio spazio di lavoro".
(e per lavoro, intendo qualsiasi "sforzo di sviluppo" che si sta facendo all'interno del proprio spazio di lavoro: compilazione classica, patch o fusione, distribuzione o ...).
Questo è il caso in cui il vostro sono la clonazione di un super-progetto e "git update
" i tuoi sottomoduli: si sta checkouting l'esatto SHA1 pronti contro termine che sono stati precedentemente impegnati nel super-progetto (registrato come gitlink in the index).
L'altra modalità è quando si sta lavorando sul progetto di super-e su uno o più moduli.
Ciò significa che per un determinato sottomodulo è stato estratto un ramo specifico (non si utilizza più un HEAD distaccato per il contenuto di tali sottomoduli, ma piuttosto un puntatore alla punta di un ramo).
Quindi, "premere un sottomodulo" significa aggiornare un repository distante contenente quel sottomodulo (e solo quello).
Il trucco effettivo in quest'ultimo scenario (che potrebbe meritare un aggancio di quello che vuoi) è quando stai spingendo il super-progetto: devi essere sicuro di aver spinto prima tutti i tuoi sotto-moduli.
Dal submodule tutorial:
pubblicare sempre il cambio modulo prima di pubblicare la modifica alla SuperProject che fa riferimento a esso. Se si dimentica di pubblicare il cambio modulo, gli altri non saranno in grado di clonare il repository (del super-progetto)
Non dimenticate che can configure a submodule to follow a branch.
Sembra una versione alfa di sottomoduli, troppe complicazioni ...: S – inf3rno
Se si intende sottomoduli, allora certamente.
I sottomoduli non devono e non devono sapere ovunque vengano utilizzati. Ad esempio, ho un sottomodulo che viene utilizzato in diversi progetti che conosco (e probabilmente diversi che non lo sono).
La spinta a un sottomodulo non influisce in alcun modo sulla versione del codice utilizzata dal progetto contenente il sottomodulo, quindi non sono sicuro di cosa si vorrebbe fare un hook in ogni caso.
Se, ad esempio, il sottomodulo è solo una parte di un sw più grande, potrei voler compilare l'intero pacchetto quando qualcuno fa una push. – Makis
Ti mancano entrambi i punti. 1) La modifica del sottomodulo non cambia alcun progetto che lo contiene. Affatto. Una nuova build sarebbe identica alla build precedente. 2) Un determinato sottomodulo può essere utilizzato da migliaia di applicazioni e non può sapere quali sono tutti. – Dustin
Ovviamente il modulo potrebbe essere utilizzato da diverse applicazioni, ma ovviamente il progetto principale avrebbe lo script di build che include il modulo. Non capisco questa cosa "affatto" - se ho un progetto con due sottomoduli e qualcuno spinge le loro modifiche su uno dei sottomoduli come mai il sottomodulo non cambia? Se cambia e ho uno script di build che include quel sottomodulo, ovviamente la build è diversa. – Makis
FWIW, stiamo cercando di fare il salto a git, e il nostro progetto (bitweaver, un sistema di gestione dei contenuti) è un sistema altamente modulare, con nearly 160 repositories). Una "build" generalmente contiene due dozzine o più sotto-repository. Abbiamo usato "moduli virtuali" in CVS, e questo ha funzionato in modo fantastico per noi, tuttavia CVS ha i propri limiti per la messa in scena di commit.
I sottomoduli Git presentano alcune limitazioni gravi e si consiglia di valutare l'implementazione di Mercurial in quanto è sicuramente più amichevole e flessibile per progetti esterni/modulari (ovvero supporta altri sistemi VCS, anche HgGit).
Qui ci sono le sfide più grandi:
Ogni modulo è difficile legata ad un particolare commettere quando si "git modulo aggiunge" nel super-respository. Questo è dal progetto e cercato come vantaggio dai manutentori di git , quindi non mi aspetto che cambi presto. Ciò è doloroso in un sistema come il nostro in cui sono sempre attivi i commit nei sottomoduli . È necessario aggiornare il super progetto per tenere il passo o aggiornare i repository secondari da gestire dopo l'aggiornamento del sottomodulo iniziale . (vedi sotto il dominio per la nostra soluzione).
Non è possibile eseguire facilmente il commit e premere su tutti i repository secondari dalla radice. Anche questo è molto fastidioso, vedi il sottomenu qui sotto.
Vari gotchas che può essere insopportabile, in particolare le cose che "silenziosamente sovrascrivere i cambiamenti".
supergit
Abbiamo scritto una shell script call supergit che gestisce alcuni dei dolore. Fa il clone, il sottomodulo init, update e checkout master tutti in un colpo solo. Eseguirà anche comandi git su tutte le directory nel super-repo singolarmente (elaborazione di tipi git di massa).
HTH, buona fortuna.
+1 questa è una buona panoramica dei pro e dei contro. Cordiali saluti, per i commit hard-coded, questo dovrebbe essere utile nei casi in cui i sottomoduli sono raramente (o manualmente) aggiornati alle versioni conosciute, buone (ad esempio i tag di produzione) - quindi funziona molto bene in quel caso. – ashes999
- 1. Qualcuno sta usando Kanban?
- 2. Qualcuno sta usando netlink per IPC?
- 3. Formato binario universale di Erlang? Qualcuno lo sta usando?
- 4. L'armatura a strisce è morta? Qualcuno lo sta usando?
- 5. Quaere - Qualcuno lo sta ancora usando? (LINQ to Objects per Java)
- 6. Qualcuno sta usando il server tc SpringSource come sostituto di Tomcat?
- 7. qualcuno là fuori usando Chicago Boss?
- 8. Il sottomodulo Git sta tornando in bianco?
- 9. Git sta ignorando le directory .git nelle sottodirectory
- 10. sta usando namespace..come male?
- 11. Qualcuno sta usando felicemente Google Analytics con grandi siti web? (milioni + pagine, milioni + visitatori mensili)
- 12. Thread EventMachine e Ruby - cosa sta succedendo davvero qui?
- 13. Qualcuno sta facendo il debugging visivo con Jint?
- 14. Qualcuno può spiegare, perché "git status" tocca la directory .git?
- 15. Sta usando jQuery 508 compatibile?
- 16. Qualcuno scrive app desktop usando .NET?
- 17. Cosa guadagno usando git lfs?
- 18. Come posso rimuovere TUTTI i contributi di qualcuno a un progetto usando git?
- 19. qualcuno sta facendo qualcosa sul bug time_t 2038?
- 20. Scala + Android: qualcuno sta creando e debuggando correttamente in Eclipse?
- 21. Qualcuno può spiegarmi cosa sta facendo il metodo GetCardinality?
- 22. Qualcuno sta implementando un'interfaccia per Eureqa in R?
- 23. Qualcuno può spiegare cosa sta succedendo dietro le quinte?
- 24. Qualcuno sta cercando di entrare nel mio server?
- 25. Android - rilascio memoria allocata AnimationDrawable sta usando
- 26. Heroku sta cancellando file su git push?
- 27. Posso vedere quali comandi sta eseguendo git-gui?
- 28. RW Accedi al repository git usando svn (git-svnserver)?
- 29. Sta usando le buone pratiche cfsqltype?
- 30. Verifica se il ricciolo sta usando TLS
È un sottoprogetto uguale a un sottomodulo? Li ho usati – Apreche