Lezione 4 · Fondazioni
Crea il repository del tuo corso, quindi distingui clona e apri
Crea funzionalità GitTree dalla schermata Nuova scheda di GitTree e verifica che non ci siano ancora commit. Quindi crea un clone locale separato per capire perché l'apertura di una cartella, l'inizializzazione della cronologia e la copia di un repository sono azioni diverse.
- Livello: Principiante
- 15 minuti di lettura
- 6 minuti di video
- Aggiornato
- Prima di questa lezione: Installa Git e visualizza in anteprima un'identità di commit sicura, Prevedi cosa conterrà il tuo prossimo commit
Avanzamenti salvati in questo browser.
La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).
Cosa imparerai
- Inizializza il primo repository del corso all'interno di GitTree con un nome di ramo esplicito.
- Riconoscere un ramo non ancora nato senza inventare un primo commit.
- Salva l'identità fittizia solo nel repository del corso.
- Clona lo stesso repository vuoto in una cartella separata e controlla la sua origine.
- Riapri l'originale senza creare o copiare un altro repository.
Prima di iniziare
Inizia dove finiscono le lezioni 2 e 3: Git è disponibile e non esiste un repository del corso. La lezione 2 ha mostrato in anteprima la demo GitTree; non ha salvato la configurazione globale. È necessaria una cartella principale esistente e scrivibile riservata al lavoro del corso. Il elemento secondario gittree-features deve essere nuovo o vuoto, al di fuori dei checkout di origine esistenti. Non inizializzare all'interno di questo repository web o di un progetto personale.
Utilizza Git che soddisfa il GitTree minimo 2.39.0 ispezionato. I comandi e le schermate nel video sono stati registrati con Git 2.52.0 e GitTree 2.0 su Ubuntu 24.04, in una cartella home privata, e i controlli in questo articolo sono stati eseguiti rispetto ai repository creati dalla registrazione. Non sono stati eseguiti su macOS o Windows. Le scorciatoie predefinite utilizzano Comando su macOS e Ctrl su Windows e Linux; il selettore di cartelle nativo appare diverso su ogni sistema e non è stato filmato.
Una volta effettuato l'accesso a GitTree, questi flussi di lavoro locali non richiedono l'integrazione del fornitore, Pro o prova: sono coperti dal piano gratuito. Il clone utilizza un URL file:// sulla stessa macchina, non le credenziali GitLab ospitate o Claude.
Concetto
Init crea i metadati del repository Git per una directory scelta. Non crea un commit semplicemente perché è presente un nome di ramo. Un nuovo repository ordinario ha una directory dell'albero di lavoro e un indice inizialmente vuoto. HEAD può simbolicamente nominare refs/heads/main prima che quel ramo abbia un commit a cui puntare: un unborn branch.
Clone crea un repository diverso da un'origine. Normalmente copia la cronologia accessibile ed effettua il check-out del ramo di origine selezionato, mentre registra un telecomando chiamato origin. Qui la fonte è volutamente vuota, quindi non c'è storia o contenuto funzionante da copiare. Si tratta di un caso limite valido, non di un caricamento non riuscito.
Open seleziona un repository esistente per l'ispezione in GitTree. Aprire una scheda non significa clonare i suoi file, creare un commit o aggiungere un servizio di hosting. L'app può aggiornare lo stato dei suoi recenti/area di lavoro ed eseguire controlli di attendibilità separatamente.
I tre verbi sono come creare un nuovo taccuino, farne una copia separata e posizionare un taccuino esistente sulla scrivania. Non estendere l'analogia ai permessi: le impostazioni o gli hook di un repository possono eseguire programmi, quindi GitTree ne esamina l'attendibilità anziché trattare "open" come permesso di esecuzione incondizionato.
| Azione in questa lezione | Albero/indice di lavoro | Riferimenti locali | Riferimenti/configurazione remoti |
|---|---|---|---|
| Inizializza l'originale con main | Nuovo albero di lavoro ordinario; nessun file di progetto o voci indicizzate | La TESTA simbolica nomina il principale non nato; nessun suggerimento per il commit | Nessun telecomando configurato |
| Salva l'identità demo locale | Nessuna modifica al contenuto di file/indice/cronologia | Nessun cambiamento di rif | Scrive solo nomeutente/nomeutente.email nella configurazione del repository originale |
| Clona l'originale in una cartella separata | Nuovo albero di lavoro/indice vuoto nella copia | Ancora nessun impegno | La copia ha l'origine che punta all'originale; non esiste ancora alcun suggerimento per il ramo di tracciamento remoto |
| Riapri originale | Seleziona l'originale esistente; nessuna duplicazione | Nessuna creazione di commit/rif | L'originale rimane senza telecomando |
Un repository semplice è l'archiviazione della cronologia senza file di lavoro ordinari. È utile negli esercizi successivi del server, ma è la scelta sbagliata per creare questa pagina di destinazione. I modelli .gitignore/licence facoltativi creerebbero file non salvati; rifiutarli per preservare questo checkpoint.
Per la semantica nativa, vedere git-init e git-clone. I controlli della destinazione vuota/nuova dell'app sono più severi della capacità di Git nativo di reinizializzare un repository esistente. Non utilizzare il terminale per eludere il rifiuto di un'app senza capire cosa protegge.
In GitTree: la prima inizializzazione canonica
Le actual current-source labels sono la scheda Nuova scheda Init, finestra di dialogo Initialize a repository, invia Initialize. "Inizia un repository" nel piano precedente era descrittivo, non il testo del pulsante corrente.
- Scegli New Tab (
tab.new), Command+T / Ctrl+T. Aspettatevi le carte Open, Clone e Init. - Fare clic su Init. Previsto Initialize a repository, senza modifiche salvate prima dell'invio. Alternativa: Command Palette… con Command+Shift+P / Ctrl+Shift+P → Initialize Repository… (
repo.init). Per Init non viene dichiarata alcuna scorciatoia predefinita diretta. - In Location, digita il percorso completo della tua nuova directory
gittree-featuressotto il genitore esistente riservato. Puoi utilizzare Browse…, quindi il selettore nativo Choose where to create the repository; i pulsanti di selezione del sistema operativo nativo non sono stati inventati qui. Ricontrolla la posizione completa finale dopo la navigazione. - Imposta Initial branch su
main. Mantieni Bare repository (history only, no working files) off. - Imposta .gitignore template e Licence su None quando vengono caricati i controlli del modello. Le loro impostazioni predefinite non sono una selezione; se i controlli sono assenti, non aggiungere file silenziosamente altrove. Mantieni Open after creating on.
- Posizione revisione, principale, disattivata, modelli Nessuno e aperta dopo attiva. Scegli Initialize una volta. È previsto che il repository venga creato e aperto, possibilmente tramite il normale flusso di lavoro relativo all'attendibilità. Non premere ripetutamente durante la sospensione.
- Se viene visualizzato Trust this repository?, esamina il percorso effettivo e i risultati. Cancel lo lascia non aperto; Open in Restricted Mode limita le operazioni; Trust and Open consente le normali impostazioni/hook del repository. Per questo sandbox creato autonomamente, scegli Trust e Open solo dopo aver compreso i risultati. Nella registrazione non è apparsa alcuna richiesta di attendibilità per la nuova cartella; non aspettarti che ogni nuovo repository mostri questa finestra di dialogo.
- Conferma che la scheda sia l'originale
gittree-features, non quella principale o una copia con nome simile. Il suo grafico non ha ancora alcun commit. Non creare un commit iniziale di "pulizia" per rimuovere lo stato vuoto.
Salvare l'identità fittizia locale del repository
- Con l'originale attivo, apri Preferences (
app.preferences.open), Command+, / Ctrl+,. - Nella sezione di navigazione specifica del repository, scegli gittree-features. Questo è il nome del repository dinamico, non una pagina Profili globale. A larghezze ridotte la sua etichetta di selezione pagina è Repo-Specific: gittree-features.
- Trova Name for commits (impostazione
repo.userName, chiave Git di supportouser.name). Sotto Writes to, seleziona o verifica Local (this repository). Non scegliere Global (every repository). - Inserisci
GitTree Demoe scegli il Apply della riga. In alternativa, premi Enter in quel campo. Attendi Saved prima di continuare. - Per Email for commits (
repo.userEmail, di supportouser.email), verifica lo stesso target locale, inseriscidemo@example.com, quindi Apply o Invio. Attendi il salvataggio. - Scegli Exit Preferences. Aspettatevi che il repository originale sia ancora attivo e la sua cronologia ancora vuota. La configurazione locale è cambiata, non i file di lavoro o il grafico.
La sola digitazione lascia una bozza. Escape in un campo sporco annulla prima quella bozza; non è una scorciatoia garantita “lascia tutto”. Il target Applica/locale esplicito è il motivo per cui questo passaggio differisce dall'anteprima annullata della lezione 2.
Nel terminale: verifica il risultato dell'app
Sostituisci <course-parent> con il tuo percorso principale assoluto riservato, mantenendo i percorsi tra virgolette. Esegui queste operazioni dopo l'inizializzazione dell'app, non nel checkout web:
cd "<course-parent>/gittree-features"
git rev-parse --is-inside-work-tree
git rev-parse --is-bare-repository
git symbolic-ref --short HEADRisultati della query osservati, in ordine:
true
false
mainDimostra che non esiste alcun commit:
git rev-parse --verify --quiet HEADOsservato: no stdout or stderr; exit status 1. Questo è il risultato atteso del ramo non ancora nato, non una diagnosi di corruzione. HEAD simbolico e verifica della revisione rispondono a domande diverse.
Ispeziona file, indici e nomi remoti:
git status --short
git ls-files
git remoteOgni comando ha prodotto no output and exited 0 nel dispositivo. Queste query da sole non dimostrano che ogni file ignorato sia assente. Nel tuo file manager, controlla la cartella riservata con gli elementi nascosti visibili: dovrebbe contenere i metadati del repository .git, ma ancora nessun file di progetto. Non modificare nulla all'interno di .git.
Leggi solo i due campi di identità locale espliciti:
git config --local --get user.name
git config --local --get user.emailOsservato:
GitTree Demo
demo@example.comNon è necessario alcun dump della configurazione personale/globale.
Alternativa all'inizializzazione nativa: non un secondo avvio canonico
L'equivalente nativo per un separate disposable comparison copy, o qualcuno che studia Git senza l'app, è:
cd "<course-parent>"
git init --quiet --initial-branch=main --template= gittree-featuresNon ha stampato alcun output ed è uscito da 0 nell'apparecchiatura isolata. Do not rerun it on the original already created in GitTree. L'opzione del modello nativo vuoto controlla la directory dei modelli di Git; non è il selettore .gitignore/licence opzionale dell'app. Su una macchina normale, i modelli/impostazioni ereditati devono comunque essere rivisti.
Se imposti l'identità tramite il percorso nativo anziché la riga dell'app, seleziona prima il nuovo repository e scrivi deliberatamente solo la configurazione locale:
cd "<course-parent>/gittree-features"
git config --local user.name "GitTree Demo"
git config --local user.email demo@example.comEntrambe le scritture erano operazioni silenziose riuscite nella copia di verifica isolata. Sono alternative alle scritture dell'app, non una scusa per saltare la verifica della presa dell'app.
Clonare una copia locale separata
Questo piccolo esercizio laterale utilizza lo stesso progetto, non una seconda applicazione demo. Il original stays the course checkpoint e deve essere nuovamente attivo prima della lezione 5. Non è un telecomando aggiunto all'originale.
Tra GitTree
- Apri Nuova scheda, quindi Clone. Tavolozza alternativa: Clone Repository… (
repo.clone). Aspettatevi Clone a repository. - Scegli Clone with URL. In Repository URL, inserisci l'URL locale assoluto dell'originale, ad esempio
file:///absolute/course-parent/gittree-features, sostituendo quell'esempio con il tuo percorso riservato effettivo. Il parser URL dell'app accetta URL di file assoluti; un percorso locale non elaborato non è l'input supportato. Utilizza un semplice percorso sandbox senza spazi per questo primo esercizio; La codifica dell'URL e la sintassi dell'unità Windows necessitano di un ricontrollo della propria piattaforma. - In Parent folder, scegli lo stesso corso principale esistente. In Folder name, inserisci esplicitamente
gittree-features-copy. Il segno di spunta Clones into punta alla copia, not the original. - Lascia vuoto Depth per la cronologia completa; mantieni Also clone submodules, Sparse checkout: only the top-level files at first, then the folders you choose e Download file contents only when they are needed (blobless) spenti. Tieni Open after cloning acceso.
- Scegli Clone una volta. Aspettatevi l'effettivo progresso della clonazione o un rapido completamento per questa origine locale vuota, quindi la copia verrà aperta tramite l'eventuale revisione dell'attendibilità richiesta. Non insistere sul fatto che ogni fase di progresso sia visibile per un'operazione così piccola.
- Ispeziona il grafico vuoto della copia e utilizza i controlli del terminale di seguito. Il suo
originappartiene a the copy e punta all'originale. Un'origine configurata non è una filiale di monitoraggio remoto esistente o un provider ospitato. - Per tornare, scegli Open da Nuova scheda o Open Repository… (
repo.open), Command+O / Ctrl+O, seleziona la cartellagittree-featuresoriginale ed esamina qualsiasi richiesta di attendibilità richiesta. La registrazione utilizzava invece il pulsante Open sulla riga dell'originale in Recent in Nuova Scheda, che la apriva allo stesso modo; il selettore di sistema non è stato filmato. In alternativa, rilascia la cartella originale sulla superficie di rilascio della cartella della Nuova scheda (non filmata). Aspettatevi l'originale selezionato/aperto; non promettere se la build corrente riutilizza una scheda o ne crea un'altra. - Conservare intatta la copia supplementare. Non è necessario eliminarlo per continuare. Conferma che l'originale non ha ancora il telecomando e l'identità demo locale prima della lezione 5.
Confronto nativo e risultato
Dal genitore prenotato, in un separate take where the destination does not exist:
git clone --quiet "file://<absolute-source-path>" gittree-features-copyQui <absolute-source-path> inizia con / nella registrazione macOS, creando un URL con tre barre dopo file:. Sostituisci il segnaposto; non digitare le parentesi angolari. L'esatto osservato stderr, nonostante un'uscita riuscita 0:
warning: You appear to have cloned an empty repository.Ora interroga la copia:
cd "<course-parent>/gittree-features-copy"
git remote
git symbolic-ref --short HEAD
git config --local --get user.namePrimi due risultati osservati:
origin
mainL'ultima query non stampa nulla ed esce 1: la clonazione non ha copiato la configurazione user.name locale dell'originale. Un'impostazione globale esterna può comunque fornire un'identità effettiva sulla tua macchina reale; la query local risponde deliberatamente solo a ciò che contiene questo clone. Non leggere tutta la configurazione globale sulla fotocamera. Non ci impegniamo all'interno della copia.
Risultato
Alla fine di questa lezione, l'originale è un normale repository con un main simbolico non ancora nato, nessun commit, nessun file di progetto, un indice logico vuoto, nessun remoto e identità locale GitTree Demo / demo@example.com. Il clone supplementare opzionale ha origine ma non storia; è al di fuori del punto di controllo del progetto continuo.
Il grafico rimane vuoto per impostazione predefinita. La lezione 5 crea README.md e index.html ed effettua il primo commit deliberato.
Errori comuni
- Choosing the parent instead of the new child: verifica la posizione e la scheda attiva prima di qualsiasi scrittura di configurazione.
- Choosing bare mode: un repository semplice non fornisce i normali file di lavoro della pagina di destinazione.
- Adding templates: introducono file non tracciati che non appartengono a questo checkpoint vuoto.
- Treating unborn HEAD as corrupt: main simbolico senza commit è normale immediatamente dopo l'inizializzazione.
- La destinazione Cloning onto the original: deve essere una cartella nuova/vuota separata.
- Assuming clone copies local identity: copia la cronologia del repository, non il nome utente/e-mail utente locale dell'originale.
- Continuing in the copy: la sua origine rende il suo stato diverso dall'originale canonico.
Se qualcosa va storto
Un rifiuto di destinazione non vuoto significa che GitTree ha protetto una cartella esistente. Scegli un nuovo bambino vuoto; non cancellarne il contenuto per silenziare l'errore. “La cartella che dovrebbe contenerlo non esiste” significa che è necessario creare/selezionare deliberatamente il genitore riservato prima di riprovare.
Se esiste già un repository, open it e ispezionalo; non reinizializzarlo per far apparire il corso nuovo. Se si tratta di un lavoro non correlato, lascialo invariato e scegli una cartella del corso separata.
Se il clone fallisce, leggi l'errore effettivo e il risultato della pulizia. GitTree distingue una cartella di proprietà del clone rimossa, una cartella preesistente conservata, contenuti extra imprevisti e errori di pulizia. Cancel Clone richiede l'annullamento; non è una prova che ogni byte sia scomparso. Ispezionare il contenuto conservato prima di rimuovere qualsiasi cosa. L'avviso di sorgente vuota da solo non è un fallimento.
Se i risultati dell'attendibilità non sono familiari, scegli Annulla o modalità limitata. Non fidarti completamente di un repository arbitrario per portare a termine una lezione. La modalità limitata disabilita le operazioni di rete e può limitare le azioni dell'albero di lavoro.
Controlla la tua comprensione
Rispondi a ciascuna domanda, quindi leggi il motivo. Le domande contrassegnate come "Obbligatorio" contano ai fini del completamento della lezione.
0 di 6 corretto
Rispondi correttamente alle domande richieste per completare la lezione.
Controllato in questo browser.
Pratica
Riapri l'originale tramite Open Repository… o rilasciando la cartella. Esegui le tre query di stato, verifica il commit HEAD mancante, le query di stato/indice/remote vuote e i due valori di identità locale. Spiega perché main è visibile senza commit e perché la copia supplementare, se creata, ha origine ma l'originale no.
Changed-input prediction: se una nuova inizializzazione separata utilizza Initial branch = trunk, prevedere git symbolic-ref --short HEAD. Stampa trunk; non crea ancora alcun commit. Ciò è stato verificato in un altro dispositivo nativo isolato. Non rinominare il ramo principale del corso continuativo per eseguire la previsione.
La tua conferma: il sito non può vedere il tuo computer.
Per completare la lezione rispondere correttamente alle domande richieste e confermare l'esercizio pratico.
Riepilogo
- Init crea i metadati del repository; clone crea una copia separata; open seleziona i dati esistenti.
- Può nascere un nuovo main: non è implicito alcun primo commit.
- Mantieni l'identità locale e lo stato del clone supplementare separati dalle impostazioni globali e dal progetto canonico.
Relativo
Termini del glossario introdotti
Inizializza — تهيئة; clone: استنساخ; deposito: مستودع; ramo: فرع; remoto: بعيد; albero funzionante — مجلد العمل; area di sosta — منطقة التجهيز. "Ramo non nato" indica il nome di un ramo senza un primo commit; HEAD e origin rimangono identificatori letterali.
Trascrizione video
La narrazione del video, spunto per spunto.
Mostra la trascrizione
- Crea quindi il repository del corso clonazione separata dall'apertura.
- Utilizza una cartella principale riservata all'esterno repository di sorgenti esistenti.
- Inizializza la nuova cronologia, clona una separata repository o aprirne uno esistente.
- Inizia all'interno di GitTree nella schermata Nuova scheda.
- Scegli Inizia. Esaminare la finestra di dialogo prima di creare qualsiasi cosa.
- Inserisci il percorso completo del file nuova cartella gittree-features.
- Il selettore di cartelle nativo è un file alternativa; ricontrollare la posizione finale.
- Scegli invece main in modo esplicito di fare affidamento su un'impostazione predefinita della macchina.
- Mantieni disattivata la modalità bare perché this il progetto necessita di file di lavoro.
- Rifiuta entrambi i modelli opzionali per preservare il checkpoint vuoto.
- Mantieni aperto dopo la creazione abilitato, quindi rivedere ogni scelta.
- Inizializza una volta e attendi il risultato effettivo del repository.
- Se viene visualizzata la revisione dell'attendibilità, leggere il risultati prima di concedere la fiducia.
- L'originale esiste, ma il suo primo commit no.
- HEAD può nominare main prima main ha un commit a cui puntare.
- Apri le Preferenze di questo repository pagina, non la pagina Profili globale.
- Controllare prima la destinazione di scrittura digitando l'identità fittizia.
- Applica la demo GitTree come questa nome di commit del repository.
- Applica l'e-mail fittizia nello stesso ambito locale.
- Anche Invio può applicare un campo. Esci solo dopo che entrambe le scritture hanno avuto esito positivo.
- Controlla di essere dentro l'albero di lavoro originale.
- Il controllo del repository nudo deve essere falso.
- Il ramo simbolico il controllo dovrebbe stampare main.
- Nessun commit è stato ancora risolto. Silenzioso qui è prevista l'uscita uno.
- Queste tre ispezioni non dovrebbe produrre alcun output.
- Leggi solo le due identità locali valori, non impostazioni globali private.
- Anche Git nativo può essere inizializzato, ma non lo fa reinizializzare l'originale creato dall'app.
- Ora copia questo stesso repository vuoto in una cartella locale separata.
- Apri Clone e utilizza il percorso URL piuttosto che un elenco di account del fornitore.
- Utilizza un URL di file assoluto per il file originale, non un percorso locale grezzo.
- Assegnare un nome esplicito alla destinazione e confermare che non è l'originale.
- Mantieni le impostazioni predefinite della cronologia completa e lasciare disattivate le opzioni di clonazione avanzate.
- Esegui il clone e lascia che fine dell'avanzamento effettivo.
- Una fonte vuota produce una copia senza commette; che può ancora avere successo.
- L'avviso di repository vuoto non è un fallimento di per sé.
- La copia ha origine e un nascituro main, non una pipeline ospitata.
- La clonazione non ha copiato l'originale impostazione del nome commit locale.
- L'origine appartiene alla copia. Il l'originale non ha ottenuto un telecomando.
- Apri di nuovo l'originale prima di continuare il corso.
- Eliminare la cartella esistente è un altro modo per aprirlo, non clonarlo.
- Controlla di nuovo l'originale: nessun telecomando, nessun commit e l'identità demo locale.
- Un'inizializzazione separata con trunk riporta il trunk, ancora senza commit.
- Un rifiuto di destinazione protegge contenuto esistente. Scegli una nuova cartella.
- Se un clone fallisce o viene annullato, leggere cosa la pulizia ha effettivamente mantenuto.
- L'annullamento e il reflog non prevedono il rollback per l'inizializzazione o le impostazioni dell'identità.
- Init crea metadati, clone crea un file copia e apri seleziona i dati esistenti.
- Verifica lo stato dell'originale prima di aggiungere i primi file.
- Quindi, crea l'eroe e crea il primo impegno deliberato.