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!
- Eseguo
git clone git://github.com/foo/foo.git - Questo crea una directory locale
fooe scarica il codice sorgente e i dati git - Questo codice sorgente contiene effettivamente tutte le versioni del software: file di origine, file di intestazione e dati git per le diverse versioni
- Eseguo
git checkout release-1.0 - Questo dice al mio sistema che voglio occuparmi della versione 1.0 del software
- Eseguo
make, che compila il codice per la versione 1.0 - Crea una libreria chiamata
libfoo.so.1 - Eseguo
make install, che installa la libreria - Copia oltre
libfoo.so.1nella directory/usr/local/lib - Copia anche il file di intestazione
foo.hnella directory/usr/local/include - Questo file di intestazione è la versione di
foo.hche corrisponde alla versione 1.0 del software - Ora voglio installare anche la versione 2 del software, quindi eseguo
git checkout release-2.0 - Questo dice al mio sistema che voglio occuparmi della versione 2.0 del software
- Eseguo
make, che compila il codice per la versione 2.0 - Crea una libreria chiamata
libfoo.so.2 - Eseguo
make install, che installa la libreria - Copia oltre
libfoo.so.2nella directory/usr/local/lib - Copia anche il file di intestazione
foo.hnella directory/usr/local/include - Questo file di intestazione è la versione di
foo.hche corrisponde alla versione 2.0 del software - Ora provo a creare un progetto che dipende dalla versione 2.0 del software e lo collego a
libfoo.so.2che è a/usr/local/lib, e includofoo.hche è a/usr/local/include - Questo progetto viene compilato ed eseguito bene
- Ora provo a creare un progetto che dipende dalla versione 1.0 del software e lo collego a
libfoo.so.1che è a/usr/local/lib, e includofoo.hche è a/usr/local/include - 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!