Vai al contenuto
GitTree

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.

Avanzamenti salvati in questo browser.

La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).

Narrazione in inglese · English and Arabic didascalie

Apri la pagina del videoGuarda su YouTube

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 lezioneAlbero/indice di lavoroRiferimenti localiRiferimenti/configurazione remoti
Inizializza l'originale con mainNuovo albero di lavoro ordinario; nessun file di progetto o voci indicizzateLa TESTA simbolica nomina il principale non nato; nessun suggerimento per il commitNessun telecomando configurato
Salva l'identità demo localeNessuna modifica al contenuto di file/indice/cronologiaNessun cambiamento di rifScrive solo nomeutente/nomeutente.email nella configurazione del repository originale
Clona l'originale in una cartella separataNuovo albero di lavoro/indice vuoto nella copiaAncora nessun impegnoLa copia ha l'origine che punta all'originale; non esiste ancora alcun suggerimento per il ramo di tracciamento remoto
Riapri originaleSeleziona l'originale esistente; nessuna duplicazioneNessuna creazione di commit/rifL'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.

  1. Scegli New Tab (tab.new), Command+T / Ctrl+T. Aspettatevi le carte Open, Clone e Init.
  2. 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.
  3. In Location, digita il percorso completo della tua nuova directory gittree-features sotto 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.
  4. Imposta Initial branch su main. Mantieni Bare repository (history only, no working files) off.
  5. 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.
  6. 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.
  7. 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.
  8. 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

  1. Con l'originale attivo, apri Preferences (app.preferences.open), Command+, / Ctrl+,.
  2. 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.
  3. Trova Name for commits (impostazione repo.userName, chiave Git di supporto user.name). Sotto Writes to, seleziona o verifica Local (this repository). Non scegliere Global (every repository).
  4. Inserisci GitTree Demo e scegli il Apply della riga. In alternativa, premi Enter in quel campo. Attendi Saved prima di continuare.
  5. Per Email for commits (repo.userEmail, di supporto user.email), verifica lo stesso target locale, inserisci demo@example.com, quindi Apply o Invio. Attendi il salvataggio.
  6. 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:

Command · bash
cd "<course-parent>/gittree-features"
git rev-parse --is-inside-work-tree
git rev-parse --is-bare-repository
git symbolic-ref --short HEAD

Risultati della query osservati, in ordine:

Uscita
true
false
main

Dimostra che non esiste alcun commit:

Command · bash
git rev-parse --verify --quiet HEAD

Osservato: 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:

Command · bash
git status --short
git ls-files
git remote

Ogni 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:

Command · bash
git config --local --get user.name
git config --local --get user.email

Osservato:

Uscita
GitTree Demo
demo@example.com

Non è 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, è:

Command · bash
cd "<course-parent>"
git init --quiet --initial-branch=main --template= gittree-features

Non 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:

Command · bash
cd "<course-parent>/gittree-features"
git config --local user.name "GitTree Demo"
git config --local user.email demo@example.com

Entrambe 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

  1. Apri Nuova scheda, quindi Clone. Tavolozza alternativa: Clone Repository… (repo.clone). Aspettatevi Clone a repository.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Ispeziona il grafico vuoto della copia e utilizza i controlli del terminale di seguito. Il suo origin appartiene a the copy e punta all'originale. Un'origine configurata non è una filiale di monitoraggio remoto esistente o un provider ospitato.
  7. Per tornare, scegli Open da Nuova scheda o Open Repository… (repo.open), Command+O / Ctrl+O, seleziona la cartella gittree-features originale 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.
  8. 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:

Command · bash
git clone --quiet "file://<absolute-source-path>" gittree-features-copy

Qui <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:

Uscita
warning: You appear to have cloned an empty repository.

Ora interroga la copia:

Command · bash
cd "<course-parent>/gittree-features-copy"
git remote
git symbolic-ref --short HEAD
git config --local --get user.name

Primi due risultati osservati:

Uscita
origin
main

L'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.

  1. Domanda 1 di 6

    Il repository del corso esiste già su disco. Quale azione lo visualizza senza copiarlo?

    Scegli una risposta.

  2. Domanda 2 di 6

    Quali scelte preservano il checkpoint originale previsto?

    Scegli ogni risposta applicabile.

  3. Domanda 3 di 6
    Obbligatorio

    Il riferimento simbolico stampa main; verificare --quiet HEAD esce silenziosamente da 1 dopo l'inizializzazione. Che cosa significa?

    Scegli una risposta.

  4. Domanda 4 di 6
    Obbligatorio

    In una nuova inizializzazione separata, scegli trunk anziché main senza eseguire il commit. Cosa stampa simbolico-ref --short HEAD?

    Scegli una risposta.

  5. Domanda 5 di 6

    La clonazione dell'originale vuoto ha esito positivo con un avviso di origine vuota. Quali affermazioni sono corrette?

    Scegli ogni risposta applicabile.

  6. Domanda 6 di 6
    Obbligatorio

    tornare all'originale e ispezionare solo le query denominate. Quali prove devono concordare?

    Scegli ogni risposta applicabile.

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.

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
  1. Crea quindi il repository del corso clonazione separata dall'apertura.
  2. Utilizza una cartella principale riservata all'esterno repository di sorgenti esistenti.
  3. Inizializza la nuova cronologia, clona una separata repository o aprirne uno esistente.
  4. Inizia all'interno di GitTree nella schermata Nuova scheda.
  5. Scegli Inizia. Esaminare la finestra di dialogo prima di creare qualsiasi cosa.
  6. Inserisci il percorso completo del file nuova cartella gittree-features.
  7. Il selettore di cartelle nativo è un file alternativa; ricontrollare la posizione finale.
  8. Scegli invece main in modo esplicito di fare affidamento su un'impostazione predefinita della macchina.
  9. Mantieni disattivata la modalità bare perché this il progetto necessita di file di lavoro.
  10. Rifiuta entrambi i modelli opzionali per preservare il checkpoint vuoto.
  11. Mantieni aperto dopo la creazione abilitato, quindi rivedere ogni scelta.
  12. Inizializza una volta e attendi il risultato effettivo del repository.
  13. Se viene visualizzata la revisione dell'attendibilità, leggere il risultati prima di concedere la fiducia.
  14. L'originale esiste, ma il suo primo commit no.
  15. HEAD può nominare main prima main ha un commit a cui puntare.
  16. Apri le Preferenze di questo repository pagina, non la pagina Profili globale.
  17. Controllare prima la destinazione di scrittura digitando l'identità fittizia.
  18. Applica la demo GitTree come questa nome di commit del repository.
  19. Applica l'e-mail fittizia nello stesso ambito locale.
  20. Anche Invio può applicare un campo. Esci solo dopo che entrambe le scritture hanno avuto esito positivo.
  21. Controlla di essere dentro l'albero di lavoro originale.
  22. Il controllo del repository nudo deve essere falso.
  23. Il ramo simbolico il controllo dovrebbe stampare main.
  24. Nessun commit è stato ancora risolto. Silenzioso qui è prevista l'uscita uno.
  25. Queste tre ispezioni non dovrebbe produrre alcun output.
  26. Leggi solo le due identità locali valori, non impostazioni globali private.
  27. Anche Git nativo può essere inizializzato, ma non lo fa reinizializzare l'originale creato dall'app.
  28. Ora copia questo stesso repository vuoto in una cartella locale separata.
  29. Apri Clone e utilizza il percorso URL piuttosto che un elenco di account del fornitore.
  30. Utilizza un URL di file assoluto per il file originale, non un percorso locale grezzo.
  31. Assegnare un nome esplicito alla destinazione e confermare che non è l'originale.
  32. Mantieni le impostazioni predefinite della cronologia completa e lasciare disattivate le opzioni di clonazione avanzate.
  33. Esegui il clone e lascia che fine dell'avanzamento effettivo.
  34. Una fonte vuota produce una copia senza commette; che può ancora avere successo.
  35. L'avviso di repository vuoto non è un fallimento di per sé.
  36. La copia ha origine e un nascituro main, non una pipeline ospitata.
  37. La clonazione non ha copiato l'originale impostazione del nome commit locale.
  38. L'origine appartiene alla copia. Il l'originale non ha ottenuto un telecomando.
  39. Apri di nuovo l'originale prima di continuare il corso.
  40. Eliminare la cartella esistente è un altro modo per aprirlo, non clonarlo.
  41. Controlla di nuovo l'originale: nessun telecomando, nessun commit e l'identità demo locale.
  42. Un'inizializzazione separata con trunk riporta il trunk, ancora senza commit.
  43. Un rifiuto di destinazione protegge contenuto esistente. Scegli una nuova cartella.
  44. Se un clone fallisce o viene annullato, leggere cosa la pulizia ha effettivamente mantenuto.
  45. L'annullamento e il reflog non prevedono il rollback per l'inizializzazione o le impostazioni dell'identità.
  46. Init crea metadati, clone crea un file copia e apri seleziona i dati esistenti.
  47. Verifica lo stato dell'originale prima di aggiungere i primi file.
  48. Quindi, crea l'eroe e crea il primo impegno deliberato.