Sto lavorando su un sito web utilizzando Sharelatex (GitHub), ma contiene altri repository che vengono utilizzati per costruire il progetto principale. [...] Mi sono imbattuto in sottomoduli in git ma dal momento che il progetto principale non contiene alcun tipo di sottomodulo non sono in grado di usarlo.
In realtà, si dispone di un sottomodulo. Questo è ciò che un repository nidificato è, e (io sono serio su questo) per quanto riguarda ciò che è necessario capire per ingannare i sottomoduli, quello è tutti i c'è per i sottomoduli. Per capire i sottomoduli, immagina di avere un repository nidificato (fai) e pensa ai requisiti amministrativi, cosa deve essere fatto per supportare tale impostazione in un dvcs.
Per i principianti, quando le persone clonano un progetto che utilizza i sottomoduli di alcuni repository che hai deciso contiene commit pubblicati, quel clone ovviamente non avrà anche il repository del sottoprogetto (certamente non dovrebbe ottenere il tuo privato e sa-cosa-hai-fatto-per-versione). Quindi devono anche ottenere il repository del sottoprogetto da alcuni dei propri repository pubblicati.
Come si fa a dire alla gente che recupera i propri commit dove si impegna il sottoprogetto necessario?Chiaramente, devi rilasciare una nota da qualche parte in un file impegnato dicendo "ecco un repository che dovrebbe avere qualsiasi sottoprogetto $ necessario". git submodule
si è stabilito su .gitmodules
come luogo convenzionale in cui memorizzare note come questa.
Successivo: quali sono gli altri da fare se l'URL che hai consegnato va offline? Avranno chiaramente bisogno di usare un altro repository. Quindi, .gitmodules
è solo un suggerimento, il comando git submodule
utilizza i valori correnti nel tuo .git/config
, che è stato popolato da git submodule init
da quelli suggeriti in .gitmodules`.
git submodule
le operazioni sono tutte come questo. Dimenticalo. Non preoccuparti nemmeno di guardare il comando finché non hai bisogno di un po 'di assistenza per fare ciò che hai già trovato. Partendo dalla conoscenza, il semplice fatto, che un sottomodulo non è altro che un repository annidato, e il progetto che lo utilizza non impegna nient'altro che un ID commit che dovrebbe essere da qualche parte in quel repository annidato. Questo è tutto. È tutto un sottomodulo.
Mentre svolgi compiti noiosi che devono essere eseguiti, cerca un sottocomando git submodule
che li faccia per te. Non è necessario utilizzare il sottocomando. Tutto ciò che sta facendo il sottocomando è l'automazione di compiti semplici che altrimenti sarebbero laboriosi. È un kit di strumenti per fare qualsiasi cosa tu debba fare, e non c'è verso che possa o debba imporre un'arbitraria e sufficiente (< - quella è la parte difficile) all'astrazione di tutti nel mondo. Quindi è un cesto.
Detto questo, c'è un importante gioco di sicurezza git submodule update
e git submodule add
eseguito per te quando fanno il git clone
per te. I repository hanno convenzionalmente il contenuto effettivo del repository sotto il progetto [sub] toplevel .git
, ma se si controlla un ramo che non ha quel sottoprogetto o altrimenti necessita o desidera che quel sottoprogetto non sia andato, anche il suo .git
andrà via - non cosa vuoi quando non contiene solo il tuo contenuto estratto ma l'intero repository effettivo. Quindi, quando git submodule update
fa il suo clone iniziale, solleva la directory .git
del sottomodulo in un pratico (e arbitrario) piccolo angolo nel repository del progetto contenente e sostituisce la directory .git
appena spostata dal sottomodulo con un file .git
contenente il percorso relativo a la directory spostata.
Per ottenere il sollevamento iniziale eseguito sul repository attualmente disponibile, spostarlo fuori dal repository corrente, aggiungere e aggiornare da qualsiasi posizione, quindi correggere gli URL a monte in .gitmodules
per comodità di altri.
Lì. Ora sai assolutamente tutto ciò che devi sapere per capire i sottomodelli git e acquisire in modo incrementale i dettagli solo quando trovi che ne hai bisogno, per capire cosa sta facendo il comando git submodule
per te e perché non devi preoccuparti di capire ogni piccolo cosa sulla sua manpage in anticipo. Almeno credo.
Se ho perso qualcosa di importante, sarei molto contento di (gentile o schietto, non mi interessa) le correzioni nei commenti.