Passer au contenu
GitTree

Leçon 10 · Travail quotidien

Connectez une télécommande sans la confondre avec une amont

Ajoutez une origine locale nue, récupérez sa branche principale et choisissez délibérément les pistes principales locales. Prouvez qu'un nom distant, une référence de suivi à distance et un paramètre en amont sont trois choses différentes.

Progression enregistrée dans ce navigateur.

La lecture charge la vidéo depuis YouTube (mode de confidentialité amélioré).

Narration en anglais · English and Arabic légendes

Ouvrez la page vidéoRegarder sur YouTube

Ce que vous apprendrez

  • Distinguer l'origine, l'origine/principal et la configuration en amont du principal.
  • Expliquez ce qu'est l'ajout d'une télécommande, la récupération et la sélection d'une télécommande en amont à chaque changement.
  • Connectez GitTree à un véritable référentiel nu local sans informations d'identification du fournisseur.
  • Prouver que la branche de fonctionnalité reste locale et non publiée.

Avant de commencer

Commencez là où la leçon 9 s'est terminée, dans le gittree-features d'origine : les cartes de fonctionnalité/prix extraites ont leur validation de carte de workflow F1 ; main a cinq commits à travers le document historique H5. Les deux sont propres, aucune télécommande n'existe et dist reste ignorée. Ce sont des références de démonstration, jamais d'instructions pour changer la branche de ce site Web.

La vidéo a été enregistrée avec Git 2.52.0 et GitTree 2.0 sur Ubuntu 24.04 : le document, la télécommande, la récupération et l'amont ont été effectués dans l'application ; la destination nue, l'état complémentaire et les vérifications ont été exécutées dans le terminal. Rien n'a été exécuté sur macOS ou Windows, et Ubuntu est le seul système Linux enregistré ; les accords de touche de commande ci-dessous proviennent du plan de clavier de l'application. L'étage Git inspecté de GitTree est 2.39.0. Une fois connecté, le transport Git local et la configuration en amont sont sur le plan gratuit ; l'intégration du fournisseur est une fonctionnalité fermée différente.

Réservez une destination frère vide gittree-features-origin.git en dehors de chaque extraction de source. Ne remplacez pas un répertoire existant. Le référentiel nu sera amorcé à partir du principal de ce projet ; il ne s'agit pas d'une installation GitLab, d'un référentiel GitHub, d'un service de sauvegarde ou d'un exécuteur CI. Si la destination du clonage existe, arrêtez-la et identifiez-la plutôt que de la supprimer.

Pour la prédiction complémentaire, la récupération en arrière-plan doit être désactivée dans ce référentiel d'enregistrement. Ouvrez Preferences avec Commande+, (Ctrl+, sur Ubuntu), choisissez la page gittree-features sous le nom du référentiel, et dans Auto-fetch interval saisissez 0, puis Apply, attendez Saved et Exit Preferences. L'application stocke cela dans ses propres paramètres par référentiel, pas dans la configuration de Git. Notez la valeur précédente pour la restaurer plus tard ; ne modifiez pas l'intervalle à l'échelle de l'application ou un autre référentiel.

Concept

Un remote est une configuration locale du référentiel nommant une adresse de transport et récupérant des règles. l’origine est une convention et non une autorité centrale intégrée. L'ajouter écrit la configuration de cette démo ; il ne contacte pas l'adresse, ne crée pas la destination et ne télécharge pas de succursale.

Un remote-tracking ref tel que refs/remotes/origin/main est un enregistrement local mis à jour par récupération. Ce n'est pas la branche du serveur refs/heads/main elle-même. Immédiatement après avoir ajouté origin, il n'y a pas d'origine/main ici. Fetch obtient les objets/références mais ne change pas de HEAD, ne fusionne pas, ne rebase pas et ne remplace pas la page de travail.

Un upstream est une relation stockée pour une branche locale. Ici branch.main.remote = origin et branch.main.merge = refs/heads/main. Le sélectionner indique aux commandes ultérieures qui ont récupéré les pistes principales de branche. Il ne crée pas de validation, ne récupère pas l'historique manquant et ne publie pas de fiches de fonctionnalités/tarifications.

L'analogie est une entrée dans le carnet d'adresses, le dernier message que vous avez collecté et le choix de la conversation à suivre. Ils sont liés, mais enregistrer une adresse ne signifie pas recevoir ou envoyer un message.

Effets d'état

ActionArbre / index de travailRéférences/configuration localesServeur
Passer au principalSélectionnez les fichiers enregistrés de H5HEAD se fixe au principalInchangé
Valider le documentIndex/ouvrage d'accord avec H6principales avancées du H6Inchangé
Préparer la copie nueOriginal inchangéL'original n'a pas encore d'origineDémarrage principal local séparé à H6
Ajouter une télécommande…InchangéURL d'origine/récupérer la configuration uniquementInchangé
Récupérer toutInchangéorigine/principal devient H6 ; objets obtenusLu, non modifié
Définir en amont…Inchangéensemble de configuration distant/fusion principalInchangé

La F1 reste sur la fonctionnalité locale. Le graphique principal/fonctionnalité a désormais un commit distinct de chaque côté de H5 : documentation sur les cartes principales et de workflow sur la fonctionnalité. Il n’y a pas non plus de fusion.

Changement complet de projet

Basculez vers le before principal en créant ce fichier. Créez docs/remotes.md avec le corps UTF-8/LF complet et la nouvelle ligne finale :

Extrait de fichier · 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.

Sujet de validation : docs: record remotes-and-upstreams practice. Auteur/commissaire : GitTree Démo <demo@example.com>. Aucun deuxième cahier de pratique ou commit supplémentaire n'appartient à ce point de contrôle.

Dans GitTree

  1. Dans l'onglet d'origine, cliquez avec le bouton droit sur local main → Checkout main. Attendez-vous à la page de l'ère du document historique, à l'absence de section de flux de travail et à un statut propre. Si une boîte de dialogue de commutateur sale apparaît, Cancel et inspectez le travail inattendu.
  2. Ouvrez la palette avec Command+Shift+P (Ctrl+Shift+P sur Ubuntu). Choisissez New File…. Dans Path from the project folder, tapez docs/remotes.md, puis Create. Collez le corps entier ci-dessus et Save / Command+S. Attendez la fin de la sauvegarde du disque.
  3. Choisissez Back to Graph, puis palette Show Working Changes. Consultez docs/remotes.md et activez Stage File. Entrez le sujet exact dans Summary, laissez Description vide et désactivez les comportements facultatifs ordinaires. Cliquez une fois sur Commit Changes to 1 File ou sur Commande+Entrée comme alternative. Vérifiez le sixième commit principal réel.
  4. Préparez le référentiel nu séparé à l'aide du segment de terminal T1 ci-dessous. Il s'agit d'une étape explicitement étiquetée native preparation : aucun bouton GitTree « créer un projet d'hébergement » n'est inventé.
  5. Exécutez T2 pour obtenir l'URL file:// réelle. L'analyseur d'URL GitTree inspecté accepte les URL de fichiers, pas un simple chemin de système de fichiers, même si Git natif peut en accepter un. Utilisez l'URL générée, avec tous les espaces codés en pourcentage. Ne collez jamais de commande shell dans le champ URL distante.
  6. La palette Add Remote… s'ouvre Add a remote. Entrez Name = origine et URL = l'URL du fichier mesuré. Choisissez Add Remote. Le formulaire d'ajout n'a pas de champ URL Push séparé ; qui appartient à Edit Remote…. Attendez-vous à ce que l'origine soit configurée, mais pas encore d'origine/principale récupérée.
  7. Récupérez dans la palette avec Fetch All (Command+Shift+F, Ctrl+Shift+F sur Ubuntu). Avant cette première récupération, le groupe Distant du panneau latéral ne répertorie pas du tout l'origine, il n'y a donc pas de ligne sur laquelle cliquer avec le bouton droit ; avec exactement une télécommande, Fetch All la récupère. Attendez le résultat réel. Attendez-vous à ce que l'origine/principal ait le même SHA réel que le principal ; HEAD et les fichiers restent en place.
  8. Cliquez avec le bouton droit sur local main, ouvrez le sous-menu Upstream et choisissez Set Upstream…. Dans What should main track?, sélectionnez Upstream branch = origin/main, puis Track. Cette action de référence nommée n'est pas une commande de palette générique. Cancel laisse la relation inchangée ; ne choisissez pas Track Nothing.
  9. Vérifiez avec T3 et T4. Laissez le fichier principal extrait, les cartes de fonctionnalités/tarifications présentes mais non publiées et aucune opération en cours. N'appuyez pas sur Push, Pull, Force Push… ou sur une commande de suppression à distance pour « terminer » la connexion.

Ordinary options off signifie que la case Modifier le commit précédent n'est pas cochée ; Ignorer les crochets, ajouter un auteur différent, appuyer après la validation et autoriser la validation vide ; pas de co-auteurs. Attendez la fin confirmée plutôt que de cliquer deux fois.

Dans la borne

Exécutez toutes les commandes à l'intérieur du gittree-features isolé, pas une extraction de source. Les mutations app/native sont des alternatives et non des étapes à répéter après le succès de l’application.

T1 — enregistrer le document et préparer uniquement le principal sur l'origine locale

Après avoir enregistré le document complet sur 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

Toutes les commandes ont réussi silencieusement dans le luminaire natif. Le clone crée un référentiel nu new distinct du référentiel principal uniquement ; il ne configure pas l'origine dans l'original. --no-local évite un raccourci de copie d'objet local lié en dur. Il n’y a aucune poussée dans cette transcription de préparation.

Si l'application a déjà validé le document, omettez les trois premières commandes. Ne faites jamais commettre deux fois le même document.

T2 - ajouter, puis récupérer, puis sélectionner en amont

Générez une véritable URL correcte pour la plate-forme et codée en pourcentage :

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"

Le résultat réel est une URL de fichier spécifique à la machine se terminant par /gittree-features-origin.git. Sa racine varie ; file://<lab-root>/gittree-features-origin.git est une notation explicative, pas une sortie de terminal fabriquée ou une URL littérale à coller. ORIGIN_URL est une variable shell, pas un identifiant.

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

L'ajout est silencieux. La requête de configuration imprime :

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

La finale for-each-ref n'imprime rien : l'ajout d'une télécommande n'en a pas récupéré.

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

Récupérer réussit silencieusement. Sortie réelle en amont :

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

T3 — prouver l'état final de l'original

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

Résultats des cinq premières requêtes, dans l'ordre :

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

Le statut court final est vide, exit 0. La tabulation entre les deux zéros sépare les commits accessibles uniquement depuis main et uniquement depuis origin/main ; les conseils correspondants ne prouvent pas que les récupérations futures sont inutiles.

T4 – distinguer le référentiel nu réel de sa référence de suivi 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 première requête s'imprime vrai ; la seconde imprime les références/têtes/main. Le troisième est silencieux, sortie 0 : feature/pricing-cards was not published. Le quatrième est silencieux, sortie 1 : aucun paramètre de fonctionnalité en amont n'existe. Cette absence attendue n’est pas un échec.

Résolvez indépendamment les trois conseils :

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

Les trois SHA actuels sont d’accord. Ne remplacez jamais H6 par leur véritable sortie SHA.

Résultat

Where you end: principal extrait comporte six commits, dont uniquement le nouveau docs/remotes.md. Une origine nue locale distincte a le principal au même H6. L'original a une origine configurée et refs/remotes/origin/main récupérés ; pistes principales origine/principale. Index/travail propre ; la dist ignorée peut rester. Les cartes de fonctionnalités/tarifications locales pointent toujours vers F1 et n'ont pas de branche en amont ou de serveur. Aucune fusion, extraction, projet hébergé, connexion ou exécution de CI ne s'est produite.

Erreurs courantes

  • Traiter origin comme un serveur spécial : c'est un nom choisi localement.
  • Attendre que Add Remote crée un serveur ou récupère ses branches.
  • Coller un chemin simple dans le champ URL de GitTree : générer l'URL du fichier à la place.
  • Choisir la télécommande d'une véritable entreprise, utiliser une URL portant un jeton ou réutiliser un répertoire nu existant.
  • Créer le document alors que l'on est encore sur la fonctionnalité : cela enregistrerait l'historique de la mauvaise branche.

Si quelque chose ne va pas

Avant la récupération, la sélection native en amont échoue car origin/main n'existe pas. La rediffusion isolée des entrées modifiées s'est réellement déroulée :

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

Stderr observé, sortie 128 :

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

La pointe de la branche et le travail restent inchangés. Selon la source de l'application (non filmée), le formulaire en amont n'a pas d'options récupérées et son contrôle Track n'est pas disponible avec There are no remote-tracking branches yet. Fetch first. Ne dessinez pas le message fatal natif sous forme de boîte de dialogue d'application. Récupérez la télécommande prévue, puis sélectionnez délibérément origin/main. Dans cette leçon, c'est Fetch All.

Un répertoire local manquant, une URL incorrecte ou un échec d'autorisations ne sont pas corrigés en forçant un push ou en désactivant la sécurité. Annulez, inspectez Edit Remote…, vérifiez la destination réelle et réessayez uniquement la récupération prévue. S'il y a déjà une origine, inspectez-la ; ne l’écrasez pas et ne le supprimez pas aveuglément. La suppression d'une télécommande modifie la configuration/le suivi local, pas le serveur lui-même, et n'est pas nécessaire pour la leçon canonique.

Vérifiez votre compréhension

Répondez à chaque question, puis lisez pourquoi. Les questions marquées « Obligatoire » comptent pour terminer la leçon.

  1. Question 1 de 6

    Vous venez d'ajouter l'origine. Qu'est-ce que l'origine ?

    Choisissez une réponse.

  2. Question 2 de 6

    Quelles affirmations sont vraies pour cette leçon ?

    Choisissez chaque réponse qui s'applique.

  3. Question 3 de 6
    Obligatoire

    Après avoir ajouté l'origine, vous récupérez et définissez le principal en amont. La page n'a pas de section de workflow sur main. Que devrait-il lui arriver ?

    Choisissez une réponse.

  4. Question 4 de 6
    Obligatoire

    Modifiez l'entrée : ajoutez l'origine mais ignorez la récupération. Essayez de sélectionner origin/main en amont. Ce qui se produit?

    Choisissez une réponse.

  5. Question 5 de 6

    Un dossier nu existe, mais GitTree rejette le chemin simple collé dans l'URL. Quelle est la bonne prochaine étape ?

    Choisissez une réponse.

  6. Question 6 de 6
    Obligatoire

    Quelles preuves sont requises ensemble ?

    Choisissez chaque réponse qui s'applique.

0 sur 6 corrects

Répondez correctement aux questions requises pour terminer la leçon.

Vérifié dans ce navigateur.

Pratique

Expliquez pourquoi origin/main est absent immédiatement après Add Remote. Dans une rediffusion distincte du même projet, essayez de le sélectionner avant de le récupérer, puis récupérez-le et sélectionnez-le avec succès. Vérifiez que le SHA principal et les octets complets de l'index.html n'ont pas changé lors des deux actions de configuration. Dans l'original, prouvez que main/origin/main est d'accord et la fonctionnalité est toujours absente du serveur nu.

Votre propre confirmation : le site ne peut pas voir votre ordinateur.

Pour terminer la leçon, répondez correctement aux questions demandées et confirmez l'exercice pratique.

Récapitulatif

  • Une télécommande configure une adresse ; fetch obtient ses références ; un amont choisit une relation de branchement.
  • origin/main est la connaissance locale récupérée, pas la branche du serveur elle-même.
  • Le principal de connexion n’a pas publié la fonctionnalité ni modifié sa page de travail.

Termes du glossaire introduits

À distance — مستودع بعيد; référence de suivi à distance — مرجع تتبُّع بعيد ; en amont — الفرع المتتبَّع; référentiel nu — مستودع مجرد ; récupérer — جلب; transport — وسيلة نقل.

Transcription vidéo

La narration de la vidéo, repère par repère.

Afficher la transcription
  1. Connectez une télécommande, puis choisissez un amont délibérément.
  2. La fonctionnalité existe localement ; il n'a pas été publié.
  3. Désactiver uniquement la récupération en arrière-plan dans ce référentiel d'enregistrement.
  4. Passer au principal avant d'écrire le document de transport.
  5. Enregistrez le document complet sans chemins ou informations d’identification spécifiques à la machine.
  6. Mettre en scène le document de transport sur principal, pas sur la fonctionnalité.
  7. Le document ajoute le sixième commit sur main.
  8. Préparer une copie nue séparée de principal pour le transport local.
  9. Cette destination a pour principal, mais pas de branche de fonctionnalités.
  10. La destination originale et nue sont des référentiels distincts.
  11. Générez une URL de fichier pour le destination locale prévue.
  12. L'enregistrement de l'adresse ne récupère pas branches ou téléchargez la fonctionnalité.
  13. Ouvrez la boîte de dialogue distante dans le référentiel d'origine.
  14. Nommez-le origine et vérifiez la destination complète.
  15. La télécommande est configurée ; c'est La branche n'a pas été récupérée.
  16. La règle de récupération existe alors que le La requête tracking-ref est vide.
  17. Sélection d'un manquant en amont échoue sans bouger le principal.
  18. Est-ce que choisir un amont remplacer la récupération ? Ce n’est pas le cas.
  19. Récupérez le principal de la télécommande sans changer de succursale actuelle.
  20. La barre oblique principale d'origine est votre enregistrement récupéré localement.
  21. La récupération ne fusionne pas, rebaser ou remplacer la page.
  22. Choisissez la relation pour la succursale principale locale nommée.
  23. La sélection de l'option seule est pas la relation confirmée.
  24. Confirmer le principal en amont sans déplacer son commit.
  25. Vérifiez principal, son amont, conseils assortis et travail propre.
  26. Une requête de fonctionnalité de serveur vide cela ne signifie pas que la fonctionnalité locale a été perdue.
  27. Adresse, enregistrement récupéré et en amont le réglage reste des choses différentes.
  28. Corriger un choix en amont sans réinitialiser l'historique.
  29. Vérifier l'original et le serveur séparément avant de continuer.
  30. Expliquez pourquoi la référence manquante il fallait aller chercher, pas pousser.
  31. Une télécommande nue locale n'est pas un projet hébergé ou un pipeline.
  32. Ensuite, récupérez la mise à jour d'un coéquipier pendant en gardant vos propres fichiers inchangés.