Installazione di più versioni del software con git

1

Sto davvero cercando di capire git , quindi ecco una riformulazione più severa di una domanda precedente che avevo chiesto. Spiegherò uno scenario ipotetico, spiegando cosa penso che succede quando scarichi del codice usando git e lo installi su una macchina, e spero che qualcuno possa dirmi quale parte non sono corretta!

  1. Eseguo git clone git://github.com/foo/foo.git
  2. Questo crea una directory locale foo e scarica il codice sorgente e i dati git
  3. Questo codice sorgente contiene effettivamente tutte le versioni del software: file di origine, file di intestazione e dati git per le diverse versioni
  4. Eseguo git checkout release-1.0
  5. Questo dice al mio sistema che voglio occuparmi della versione 1.0 del software
  6. Eseguo make , che compila il codice per la versione 1.0
  7. Crea una libreria chiamata libfoo.so.1
  8. Eseguo make install , che installa la libreria
  9. Copia oltre libfoo.so.1 nella directory /usr/local/lib
  10. Copia anche il file di intestazione foo.h nella directory /usr/local/include
  11. Questo file di intestazione è la versione di foo.h che corrisponde alla versione 1.0 del software
  12. Ora voglio installare anche la versione 2 del software, quindi eseguo git checkout release-2.0
  13. Questo dice al mio sistema che voglio occuparmi della versione 2.0 del software
  14. Eseguo make , che compila il codice per la versione 2.0
  15. Crea una libreria chiamata libfoo.so.2
  16. Eseguo make install , che installa la libreria
  17. Copia oltre libfoo.so.2 nella directory /usr/local/lib
  18. Copia anche il file di intestazione foo.h nella directory /usr/local/include
  19. Questo file di intestazione è la versione di foo.h che corrisponde alla versione 2.0 del software
  20. Ora provo a creare un progetto che dipende dalla versione 2.0 del software e lo collego a libfoo.so.2 che è a /usr/local/lib , e includo foo.h che è a /usr/local/include
  21. Questo progetto viene compilato ed eseguito bene
  22. Ora provo a creare un progetto che dipende dalla versione 1.0 del software e lo collego a libfoo.so.1 che è a /usr/local/lib , e includo foo.h che è a /usr/local/include
  23. Questo progetto non viene compilato correttamente, perché foo.h è il file di intestazione per la versione 2.0 del software, non la versione 1.0.

Quindi, la cosa su cui sono sconcertato è come si possano avere due versioni di alcuni software installati sul proprio computer. I file di libreria effettivi libfoo.so.1 e libfoo.so.2 sono entrambi creati e possono essere collegati a due progetti diversi, ma sul sistema locale è installata solo una versione di foo.h . Pertanto, solo la versione installata più recente avrà il file di intestazione corretto, poiché le due versioni richiedono versioni diverse di foo.h .

Per favore qualcuno può spiegare dove mi sto confondendo? Grazie!

    
posta Karnivaurus 04.06.2016 - 18:02
fonte

2 risposte

5

Non è affatto un problema. In realtà, non ha nulla a che fare con Git o persino con un programma che stai tentando di installare. È solo un conflitto di versione.

Per risolvere questo tipo di problemi, ci sono molti approcci possibili:

  • Installazione di ciascuna versione in una macchina virtuale separata
  • ... in un contenitore mobile separato
  • Utilizzo di gestori di pacchetti intelligenti come nix che consentono di avere un numero qualsiasi di versioni di uno stesso programma installato
  • probabilmente qualcos'altro ...

In casi come questo, preferisco usare Docker dato che i suoi 'contenitori sono leggeri (rispetto alle macchine virtuali). In questo modo, posso avere qualsiasi tipo di ambiente per costruire ed eseguire qualsiasi programma. Qualsiasi dipendenza viene installata direttamente in un contenitore, quindi quando eseguo la mia build su di esso, tutto è già lì, e la mia macchina host non è inquinata da software random.

Per quanto riguarda il tuo approccio con Git. Lo stai facendo bene, ma funzionerebbe comunque esattamente perché non puoi avere due versioni di uno stesso file di intestazione contemporaneamente. Sembri capire il problema.

    
risposta data 04.06.2016 - 19:52
fonte
0

Per quanto mi riguarda (e correggimi se ho torto - scusa per la ricorsione):

  1. No, solo per il ramo corrente

  2. Seleziona il ramo

Git è di natura simile ad un albero, ma lo scopo principale è tornare al Master, che è il tronco dell'albero.

È probabile che sovrascrivi i file locali durante l'esecuzione di make. Leggi di più qui .

    
risposta data 04.06.2016 - 19:39
fonte

Leggi altre domande sui tag