Vai al contenuto
GitTree

Lezione 10 · Lavoro quotidiano

Collega un telecomando senza confonderlo con un upstream

Aggiungi un'origine nuda locale, recupera il suo ramo principale e scegli deliberatamente quali tracce principali locali. Dimostrare che un nome remoto, un riferimento di tracciamento remoto e un'impostazione upstream sono tre cose 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

  • Distinguere origine, origine/principale e configurazione a monte del principale.
  • Spiegare cosa comporta l'aggiunta di un telecomando, il recupero e la selezione di un upstream per ogni modifica.
  • Connetti GitTree a un vero repository locale senza credenziali del provider.
  • Dimostrare che il ramo della funzionalità rimane locale e non pubblicato.

Prima di iniziare

Inizia da dove è terminata la lezione 9, nell'originale gittree-features: check-out feature/pricing-cards ha il suo commit della scheda del flusso di lavoro F1; main ha cinque commit attraverso il documento storico H5. Entrambi sono puliti, non esiste alcun telecomando e dist rimane ignorato. Questi sono riferimenti demo, mai istruzioni per modificare il ramo di questo sito Web.

Il video è stato registrato con Git 2.52.0 e GitTree 2.0 su Ubuntu 24.04: il documento, il remote, il fetch e l'upstream sono stati eseguiti nell'app; la destinazione nuda, lo stato di sola aggiunta e i controlli sono stati eseguiti nel terminale. Non è stato eseguito nulla su macOS o Windows e Ubuntu è l'unico sistema Linux registrato; gli accordi dei tasti Comando riportati di seguito provengono dalla mappatura dei tasti dell'app. Il Git floor ispezionato di GitTree è 2.39.0. Una volta effettuato l'accesso, il trasporto Git locale e la configurazione upstream rientrano nel piano gratuito; l'integrazione del fornitore è una funzionalità diversa.

Prenota una destinazione gemella vuota gittree-features-origin.git fuori da ogni pagamento di origine. Non sostituire una directory esistente. Il repository nudo verrà seminato dal repository principale di questo progetto; non è un'installazione GitLab, un repository GitHub, un servizio di backup o un CI runner. Se la destinazione del clone esiste, arrestala e identificala anziché eliminarla.

Per la previsione di sola aggiunta, il recupero in background deve essere disattivato in questo repository di registrazione. Apri Preferences con Comando+, (Ctrl+, su Ubuntu), scegli la pagina gittree-features sotto il nome del repository e in Auto-fetch interval inserisci 0, quindi Apply, attendi Saved e Exit Preferences. L'app lo memorizza nelle proprie impostazioni per repository, non nella configurazione di Git. Annotare il valore precedente per ripristinarlo in seguito; non modificare l'intervallo a livello di app o un altro repository.

Concetto

Un remote è una configurazione locale del repository che nomina un indirizzo di trasporto e regole di recupero. l’origine è una convenzione, non un’autorità centrale incorporata. Aggiungendolo si scrive la configurazione di questa demo; non contatta l'indirizzo, non crea la destinazione né carica un ramo.

Un remote-tracking ref come refs/remotes/origin/main è un record locale aggiornato tramite recupero. Non è il ramo del server refs/heads/main stesso. Immediatamente dopo aver aggiunto origine, qui non c'è origine/principale. Fetch ottiene gli oggetti/riferimenti ma non cambia HEAD, unisce, ribasa o sostituisce la pagina di lavoro.

Un upstream è una relazione archiviata per un ramo locale. Qui branch.main.remote = origin e branch.main.merge = refs/heads/main. Selezionandolo si indica ai comandi successivi quali tracce principali del ramo sono state recuperate. Non crea un commit, non recupera la cronologia mancante né pubblica funzionalità/schede prezzi.

L'analogia è una voce della rubrica, l'ultimo messaggio che hai raccolto e la scelta di quale conversazione seguire. Sono correlati, ma il salvataggio di un indirizzo non equivale alla ricezione o all'invio di un messaggio.

Effetti dello stato

AzioneAlbero di lavoro/indiceRiferimenti/configurazione localeServer
Passa a principaleSeleziona i file registrati di H5La TESTA si collega al principaleInvariato
Impegna il documentoIndice/opera concorda con H6principali avanzamenti a H6Invariato
Preparare la copia nudaOriginale invariatoL'originale non ha ancora origineLa rete principale locale separata inizia da H6
Aggiungi telecomando...InvariatoSolo URL di origine/configurazione di recuperoInvariato
Recupera tuttoInvariatoorigine/principale diventa H6; oggetti ottenutiLetto, non modificato
Imposta a monte...Invariatoset di configurazione remota/unifica principaleInvariato

La F1 rimane sulla funzionalità locale. Il grafico principale/funzionalità ora ha un commit distinto su ciascun lato di H5: documentazione sulle schede principali e del flusso di lavoro sulla funzionalità. E nemmeno una fusione.

Modifica totale del progetto

Passa alla before principale creando questo file. Crea docs/remotes.md con il corpo UTF-8/LF completo e il ritorno a capo finale:

Estratto del file · markdown
# GitTree Features remotes

origin names a separate local bare repository used only for this course.
Its file:// URL is a transport address, not a GitLab project or a login.
main tracks origin/main after an explicit fetch and upstream selection.
origin/main is a local record of the last fetched remote main.
Adding a remote does not fetch, push or publish any branch.
feature/pricing-cards remains local and has no upstream in this checkpoint.
No credentials or machine-specific absolute paths are stored in this document.

Oggetto del commit: docs: record remotes-and-upstreams practice. Autore/committente: GitTree Demo <demo@example.com>. Nessun secondo taccuino di esercitazione o commit aggiuntivo appartiene a questo checkpoint.

Tra GitTree

  1. Nella scheda originale, fai clic con il pulsante destro del mouse su main locale → Checkout main. Aspettatevi la pagina dell'era del documento storico, nessuna sezione del flusso di lavoro e uno stato pulito. Se viene visualizzata una finestra di dialogo con un interruttore sporco, Cancel e controlla il lavoro imprevisto.
  2. Apri la tavolozza con Command+Shift+P (Ctrl+Shift+P su Ubuntu). Scegli New File…. In Path from the project folder, digita docs/remotes.md, quindi Create. Incolla l'intero corpo sopra e Save / Comando+S. Attendi il completamento del salvataggio su disco.
  3. Scegli Back to Graph, quindi la tavolozza Show Working Changes. Controlla docs/remotes.md e attiva Stage File. Inserisci l'oggetto esatto in Summary, lascia la Descrizione vuota e i comportamenti opzionali ordinari disattivati. Fai clic su Commit Changes to 1 File una volta o, in alternativa, Comando+Invio. Verificare l'effettivo sesto commit principale.
  4. Preparare il repository nudo separato utilizzando il segmento terminale T1 di seguito. Questo è un passaggio native preparation esplicitamente etichettato: non è stato inventato alcun pulsante GitTree "crea progetto di hosting".
  5. Esegui T2 per ottenere l'URL file:// effettivo. Il parser URL GitTree ispezionato accetta gli URL dei file, non un semplice percorso del filesystem anche se Git nativo può accettarne uno. Utilizza l'URL generato, con eventuali spazi codificati in percentuale. Non incollare mai un comando shell nel campo dell'URL remoto.
  6. La tavolozza Add Remote… si apre Add a remote. Inserisci Name = origine e URL = l'URL del file misurato. Scegli Add Remote. Il modulo di aggiunta non ha un campo URL push separato; che appartiene a Edit Remote…. È prevista un'origine configurata, ma nessuna origine/principale ancora recuperata.
  7. Recupera dalla tavolozza con Fetch All (Comando+Maiusc+F, Ctrl+Maiusc+F su Ubuntu). Prima di questo primo recupero, il gruppo Remoto del pannello laterale non elenca affatto l'origine, quindi non c'è alcuna riga su cui fare clic con il pulsante destro del mouse; con esattamente un telecomando, Fetch All lo recupera. Attendi il risultato effettivo. Aspettatevi origin/main allo stesso SHA reale di main; HEAD e i file restano al loro posto.
  8. Fai clic con il pulsante destro del mouse su main locale, apri il sottomenu Upstream e scegli Set Upstream…. In What should main track?, seleziona Upstream branch = origine/principale, quindi Track. Questa azione di riferimento con nome non è un comando di tavolozza generico. Cancel lascia la relazione invariata; non scegliere Track Nothing.
  9. Verificare con T3 e T4. Lasciare il principale estratto, le schede funzionalità/prezzi presenti ma non pubblicate e nessuna operazione in corso. Non premere Push, Pull, Force Push... o un comando di eliminazione remota per "completare" la connessione.

Ordinary options off significa Modifica commit precedente deselezionato; Salta hook, Aggiungi firma, Autore diverso, Push dopo il commit e Consenti commit vuoto disattivato; nessun coautore. Attendi il completamento confermato anziché fare clic due volte.

Nel terminale

Esegui tutti i comandi all'interno dell'isolato gittree-features, non in un checkout di origine. Le mutazioni dell'app/nativa sono alternative, non passaggi da ripetere dopo il successo dell'app.

T1: registrare il documento e preparare solo i principali sull'origine locale

Dopo aver salvato l'intero documento su main:

Command · bash
git switch --quiet main
git add -- docs/remotes.md
git commit --quiet -m "docs: record remotes-and-upstreams practice"
git clone --quiet --bare --single-branch --branch main --no-local . ../gittree-features-origin.git

Tutti i comandi sono riusciti silenziosamente nel dispositivo nativo. Il clone crea un new repository nudo separato solo da quello principale; non configura l'origine nell'originale. --no-local evita un collegamento diretto alla copia dell'oggetto locale. Non vi è alcuna spinta in questa trascrizione di preparazione.

Se l'app ha già eseguito il commit del documento, ometti i primi tre comandi. Non eseguire mai il commit dello stesso documento due volte.

T2: aggiungi, quindi recupera, quindi seleziona upstream

Genera un URL reale con codifica percentuale e corretto per la piattaforma:

Command · bash
ORIGIN_URL="$(node --input-type=module -e "import path from 'node:path'; import {pathToFileURL} from 'node:url'; console.log(pathToFileURL(path.resolve('../gittree-features-origin.git')).href);")"
printf '%s\n' "$ORIGIN_URL"

L'output effettivo è un URL di file specifico del computer che termina con /gittree-features-origin.git. La sua radice varia; file://<lab-root>/gittree-features-origin.git è una notazione esplicativa, non un output del terminale fabbricato o un URL letterale da incollare. ORIGIN_URL è una variabile di shell, non una credenziale.

Command · bash
git remote add origin "$ORIGIN_URL"
git config --get remote.origin.fetch
git for-each-ref --format='%(refname)' refs/remotes/origin

L'aggiunta è silenziosa. La query di configurazione stampa:

Uscita
+refs/heads/*:refs/remotes/origin/*

Il finale for-each-ref non stampa nulla: l'aggiunta di un telecomando non ne ha recuperato uno.

Command · bash
git fetch --quiet origin
git branch --set-upstream-to=origin/main main

Il recupero è riuscito in silenzio. Uscita effettiva a monte:

Uscita
branch 'main' set up to track 'origin/main'.

T3: dimostra lo stato finale dell'originale

Command · bash
git symbolic-ref --short HEAD
git rev-parse --abbrev-ref 'main@{upstream}'
git rev-list --left-right --count main...origin/main
git log -1 --format=%s origin/main
git rev-list --count main
git status --short

Risultati delle prime cinque query, in ordine:

Uscita
main
origin/main
0	0
docs: record remotes-and-upstreams practice
6

Lo stato short finale è vuoto, exit 0. La tab tra i due zeri separa i commit raggiungibili solo da main e solo da origin/main; i suggerimenti corrispondenti non sono la prova che i recuperi futuri non siano necessari.

T4: distingue il repository nudo effettivo dal suo riferimento di tracciamento locale

Command · bash
git --git-dir=../gittree-features-origin.git rev-parse --is-bare-repository
git --git-dir=../gittree-features-origin.git for-each-ref --format='%(refname)' refs/heads
git ls-remote --heads origin refs/heads/feature/pricing-cards
git config --get branch.feature/pricing-cards.remote

La prima query viene stampata come vera; il secondo stampa ref/heads/main. Il terzo è silenzioso, uscita 0: feature/pricing-cards was not published. Il quarto è silenzioso, uscita 1: non esiste alcuna impostazione di funzionalità a monte. Quella assenza attesa non è un recupero fallito.

Risolvi in modo indipendente i tre suggerimenti:

Command · bash
git rev-parse refs/heads/main
git rev-parse refs/remotes/origin/main
git --git-dir=../gittree-features-origin.git rev-parse refs/heads/main

Tutti e tre gli SHA effettivi sono d'accordo. Non sostituire mai H6 con il loro vero output SHA.

Risultato

Where you end: main controllato ha sei commit, incluso solo il nuovo docs/remotes.md. Un'origine nuda locale separata ha principale nello stesso H6. L'originale ha l'origine configurata e refs/remotes/origin/main recuperati; tracce principali origine/principale. Indice/lavoro pulito; dist ignorato potrebbe rimanere. Le funzionalità/carte dei prezzi locali puntano ancora a F1 e non hanno rami upstream o server. Non si è verificata alcuna unione, pull, progetto ospitato, accesso o esecuzione CI.

Errori comuni

  • Trattare Origin come un server speciale: è un nome locale scelto.
  • Mi aspetto che Aggiungi remoto crei un server o recuperi i suoi rami.
  • Incollare un percorso semplice nel campo URL di GitTree: genera invece l'URL del file.
  • Scegliere il telecomando di un'azienda reale, utilizzare un URL contenente token o riutilizzare una directory nuda esistente.
  • Creare il documento mentre si è ancora sulla funzione: registrerebbe la cronologia del ramo sbagliato.

Se qualcosa va storto

Prima del recupero, la selezione upstream nativa fallisce perché origin/main non esiste. Il replay isolato dell'input modificato in realtà è stato eseguito:

Command · bash
git -c advice.setUpstreamFailure=false branch --set-upstream-to=origin/main main

Stderr osservato, uscita 128:

Uscita
fatal: the requested upstream branch 'origin/main' does not exist

La punta del ramo e il lavoro rimangono invariati. Secondo la fonte dell'app (non filmata), il modulo upstream invece non ha opzioni recuperate e il suo controllo Track non è disponibile con There are no remote-tracking branches yet. Fetch first. Non disegnare il messaggio fatale nativo come finestra di dialogo dell'app. Recupera il telecomando desiderato, quindi seleziona deliberatamente origine/principale. In questa lezione che è Fetch All.

Una directory locale mancante, un URL errato o un errore nelle autorizzazioni non vengono risolti forzando un push o disabilitando la sicurezza. Annulla, esamina Edit Remote…, verifica la destinazione effettiva e riprova solo il recupero previsto. Se esiste già un'origine, ispezionala; non sovrascriverlo o rimuoverlo alla cieca. La rimozione di un telecomando modifica la configurazione/il tracciamento locale, non il server stesso, e non è necessaria per la lezione canonica.

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

    Hai appena aggiunto l'origine. Cos'è l'origine?

    Scegli una risposta.

  2. Domanda 2 di 6

    Quali affermazioni sono vere per questa lezione?

    Scegli ogni risposta applicabile.

  3. Domanda 3 di 6
    Obbligatorio

    Dopo aver aggiunto origin, recuperi e imposti l'upstream principale. La pagina non ha una sezione del flusso di lavoro su main. Cosa dovrebbe accadergli?

    Scegli una risposta.

  4. Domanda 4 di 6
    Obbligatorio

    Modifica l'input: aggiungi origine ma salta il recupero. Prova a selezionare origin/main come upstream. Che succede?

    Scegli una risposta.

  5. Domanda 5 di 6

    Esiste una cartella semplice, ma GitTree rifiuta il percorso semplice incollato nell'URL. Qual è il passaggio successivo corretto?

    Scegli una risposta.

  6. Domanda 6 di 6
    Obbligatorio

    Quali prove sono richieste insieme?

    Scegli ogni risposta applicabile.

0 di 6 corretto

Rispondi correttamente alle domande richieste per completare la lezione.

Controllato in questo browser.

Pratica

Spiega perché origin/main è assente immediatamente dopo Aggiungi remoto. In una riproduzione separata dello stesso progetto, prova a selezionarlo prima di recuperarlo, quindi recuperalo e selezionalo correttamente. Verificare che l'SHA principale e i byte completi di index.html non siano cambiati durante nessuna delle azioni di configurazione. Nell'originale, dimostra che main/origin/main concorda e la funzionalità è ancora assente dal server nudo.

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

  • Un telecomando configura un indirizzo; fetch ottiene i suoi riferimenti; un upstream sceglie una relazione di ramo.
  • origin/main è la conoscenza recuperata locale, non il ramo del server stesso.
  • Il collegamento principale non ha pubblicato la funzionalità né modificato la relativa pagina di lavoro.

Termini del glossario introdotti

Remoto — مستودع بعيد; riferimento del tracciamento remoto — مرجع تتبُّع بعيد; a monte: الفرع المتتبَّع; repository nudo — مستودع مجرد; prendere: جلب; trasporti — وسيلة نقل.

Trascrizione video

La narrazione del video, spunto per spunto.

Mostra la trascrizione
  1. Collega un telecomando, quindi scegli un monte deliberatamente.
  2. La funzionalità esiste localmente; non è stato pubblicato.
  3. Disabilita solo il recupero in background in questo archivio di registrazione.
  4. Passa a main prima di scrivere il documento di trasporto.
  5. Salvare il documento completo senza percorsi o credenziali specifici del computer.
  6. Preparare il documento di trasporto su main, non sulla funzionalità.
  7. Il documento aggiunge il sesto commit su main.
  8. Preparare una copia nuda separata principale per il trasporto locale.
  9. Questa destinazione ha principali, ma nessun ramo di funzionalità.
  10. La destinazione originaria e spoglia sono repository separati.
  11. Genera un URL di file per il file destinazione locale prevista.
  12. Il salvataggio dell'indirizzo non viene recuperato rami o caricare la funzione.
  13. Apri la finestra di dialogo remota in il deposito originale.
  14. Chiamalo origine e verifica la destinazione completa.
  15. Il telecomando è configurato; suo il ramo non è stato recuperato.
  16. La regola di recupero esiste mentre il file la query tracking-ref è vuota.
  17. Selezione di un upstream mancante fallisce senza spostare l'alimentazione principale.
  18. Sceglie un upstream sostituire il recupero? Non è così.
  19. Prendi il comando principale del telecomando senza cambiando la tua filiale attuale.
  20. La barra di origine principale è tua record recuperato locale.
  21. Il recupero non sta unendo, ribasare o sostituire la pagina.
  22. Scegli la relazione per la filiale principale locale denominata.
  23. Selezionare solo l'opzione lo è non la relazione confermata.
  24. Conferma che la rete principale è a monte senza spostare il suo commit.
  25. Verifica che main, sia a monte, suggerimenti corrispondenti e lavoro pulito.
  26. Una query sulla funzionalità del server vuota lo fa non significa che la caratteristica locale sia andata perduta.
  27. Indirizzo, record recuperato e upstream l'impostazione rimangono cose diverse.
  28. Correggere una scelta a monte senza azzerare la cronologia.
  29. Verificare l'originale e il server separatamente prima di continuare.
  30. Spiegare perché il rif. mancante richiedeva un recupero, non una spinta.
  31. Un telecomando nudo locale non è un file progetto ospitato o una pipeline.
  32. Successivamente, recupera l'aggiornamento di un compagno di squadra mentre mantenendo i tuoi file invariati.