Lección 10 · trabajo diario
Conecte un control remoto sin confundirlo con un upstream
Agregue un origen desnudo local, busque su rama principal y elija deliberadamente qué pistas principales locales. Demuestre que un nombre remoto, una referencia de seguimiento remoto y una configuración ascendente son tres cosas diferentes.
- Nivel: Intermedio
- 13 minutos de lectura
- 6 minutos de vídeo
- Actualizado
- Antes de esta lección: Cree una rama de funciones y retire solo la referencia desechable
Progreso guardado en este navegador.
La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).
lo que aprenderás
- Distinguir origen, origen/principal y configuración ascendente de principal.
- Explique qué cambia al agregar un control remoto, buscar y seleccionar un flujo ascendente.
- Conecte GitTree a un repositorio local real sin credenciales de proveedor.
- Demuestre que la rama característica permanece local y no publicada.
Antes de empezar
Comience donde terminó la lección 9, en las características de gittree originales: las tarjetas de características/precios retiradas tienen su confirmación de tarjeta de flujo de trabajo F1; main tiene cinco confirmaciones a través del documento histórico H5. Ambos están limpios, no existe ningún control remoto y dist permanece ignorado. Estas son referencias de demostración, nunca instrucciones para cambiar la rama de este sitio web.
El vídeo fue grabado con Git 2.52.0 y GitTree 2.0 en Ubuntu 24.04: el documento, el control remoto, la recuperación y el upstream se realizaron en la aplicación; el destino simple, el estado de solo agregar y las comprobaciones se ejecutaron en la terminal. No se ejecutó nada en macOS o Windows, y Ubuntu es el único sistema Linux registrado; Los acordes de las teclas Comando a continuación provienen del mapa de teclas de la aplicación. El piso de Git inspeccionado de GitTree es 2.39.0. Una vez que haya iniciado sesión, el transporte local de Git y la configuración ascendente estarán en el plan gratuito; La integración de proveedores es una característica cerrada diferente.
Reserve un destino hermano vacío gittree-features-origin.git fuera de cada pago de origen. No reemplace un directorio existente. El repositorio básico se generará desde el archivo principal de este proyecto; no es una instalación GitLab, un repositorio GitHub, un servicio de respaldo o un ejecutor de CI. Si el destino del clon existe, deténgalo e identifíquelo en lugar de eliminarlo.
Para la predicción de solo agregar, la recuperación en segundo plano debe estar desactivada en este repositorio de grabaciones. Abra Preferences con Comando+, (Ctrl+, en Ubuntu), elija la página gittree-features bajo el nombre del repositorio y en Auto-fetch interval ingrese 0, luego Apply, espere Saved y Exit Preferences. La aplicación almacena esto en su propia configuración por repositorio, no en la configuración de Git. Anote el valor anterior para restaurarlo más tarde; no cambie el intervalo de toda la aplicación ni otro repositorio.
Concepto
Un remote es una configuración local del repositorio que nombra una dirección de transporte y reglas de recuperación. El origen es una convención, no una autoridad central incorporada. Al agregarlo, se escribe la configuración de esta demostración; no contacta la dirección, no crea el destino ni carga una sucursal.
Un remote-tracking ref como refs/remotes/origin/main es un registro local actualizado mediante recuperación. No es la rama del servidor refs/heads/main en sí. Inmediatamente después de agregar el origen, aquí no hay origen/principal. Fetch obtiene los objetos/referencias pero no cambia HEAD, fusiona, cambia la base ni reemplaza la página de trabajo.
Un upstream es una relación almacenada para una sucursal local. Aquí Branch.main.remote = origen y Branch.main.merge = refs/heads/main. Al seleccionarlo, se indican a los comandos posteriores qué pistas principales de rama fueron recuperadas. No crea una confirmación, no recupera el historial faltante ni publica tarjetas de características/precios.
La analogía es una entrada en la libreta de direcciones, el último mensaje que recopiló y la posibilidad de elegir qué conversación seguir. Están relacionados, pero guardar una dirección no es recibir ni enviar un mensaje.
efectos de estado
| acción | Árbol de trabajo/índice | Referencias/configuración locales | Servidor |
|---|---|---|---|
| Cambiar a principal | Seleccione los archivos grabados del H5 | HEAD se conecta al principal | Sin cambios |
| Confirmar el documento | Índice/trabajo de acuerdo con H6 | principales avances hacia H6 | Sin cambios |
| Prepara la copia desnuda | Original sin cambios | El original aún no tiene origen. | La principal local separada comienza en H6 |
| Agregar control remoto… | Sin cambios | URL de origen/configuración de recuperación solamente | Sin cambios |
| Obtener todo | Sin cambios | origen/principal se convierte en H6; objetos obtenidos | Leído, no modificado |
| Establecer aguas arriba... | Sin cambios | conjunto de configuración remoto/combinado de main | Sin cambios |
F1 permanece en la característica local. El gráfico principal/de funciones ahora tiene una confirmación distinta en cada lado de H5: documentación en las tarjetas de flujo de trabajo principales y en las funciones. Tampoco lo es una fusión.
Cambio completo del proyecto
Cambie a principal before creando este archivo. Cree docs/remotes.md con el cuerpo UTF-8/LF completo y la nueva línea final:
# 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.Asunto de confirmación: docs: record remotes-and-upstreams practice. Autor/autor: GitTree Demostración <demo@example.com>. Ningún segundo cuaderno de práctica ni compromiso adicional pertenecen a este punto de control.
En GitTree
- En la pestaña original, haga clic derecho en local main → Checkout main. Espere la página de la era de los documentos históricos, sin sección de flujo de trabajo y con un estado limpio. Si aparece un cuadro de diálogo de cambio sucio, Cancel e inspecciona el trabajo inesperado.
- Abra la paleta con Command+Shift+P (Ctrl+Shift+P en Ubuntu). Elija New File…. En Path from the project folder, escriba docs/remotes.md y luego Create. Pega el cuerpo completo arriba y Save/Comando+S. Espere a que se complete el guardado del disco.
- Elija Back to Graph y luego la paleta Show Working Changes. Revise docs/remotes.md y active Stage File. Ingrese el asunto exacto en Summary, deje la Descripción vacía y los comportamientos opcionales comunes desactivados. Haga clic en Commit Changes to 1 File una vez o Comando+Entrar como alternativa. Verifique el sexto compromiso principal real.
- Prepare el repositorio básico separado utilizando el segmento de terminal T1 a continuación. Este es un paso native preparation explícitamente etiquetado: no se inventa ningún botón GitTree "crear proyecto de alojamiento".
- Ejecute T2 para obtener la URL file:// real. El analizador de URL GitTree inspeccionado acepta URL de archivos, no una ruta simple del sistema de archivos, aunque Git nativo puede aceptar una. Utilice la URL generada, con los espacios codificados en porcentaje. Nunca pegue un comando de shell en el campo de URL remota.
- La paleta Add Remote… se abre Add a remote. Ingrese Name = origen y URL = la URL del archivo medido. Elija Add Remote. El formulario de adición no tiene un campo Push URL separado; que pertenece a Edit Remote…. Se espera que el origen esté configurado, pero aún no se ha obtenido el origen/principal.
- Recuperar de la paleta con Fetch All (Comando+Mayús+F, Ctrl+Mayús+F en Ubuntu). Antes de esta primera búsqueda, el grupo Remoto del panel lateral no enumera el origen en absoluto, por lo que no hay ninguna fila en la que hacer clic con el botón derecho; con exactamente un control remoto, Fetch All lo busca. Espere el resultado real. Espere que origen/principal tenga el mismo SHA real que principal; HEAD y archivos permanecen en su sitio.
- Haga clic derecho en local main, abra el submenú Upstream y elija Set Upstream…. En What should main track?, seleccione Upstream branch = origen/principal, luego Track. Esta acción de referencia con nombre no es un comando de paleta genérico. Cancel deja la relación sin cambios; no elijas Track Nothing.
- Verificar con T3 y T4. Deje el principal desprotegido, las tarjetas de características/precios presentes pero no publicadas y sin ninguna operación en curso. No presione Empujar, Tirar, Forzar Empuje… ni un comando de eliminación remota para “terminar” de conectarse.
Ordinary options off significa Modificar confirmación anterior sin marcar; Omitir ganchos, agregar firmada por otro autor, presionar después de la confirmación y permitir la confirmación vacía; sin coautores. Espere a que se confirme la finalización en lugar de hacer clic dos veces.
en la terminal
Ejecute todos los comandos dentro del gittree-features aislado, no un pago de origen. Las mutaciones de aplicación/nativa son alternativas, no pasos a repetir después del éxito de la aplicación.
T1: registrar el documento y preparar solo el principal en el origen local
Después de guardar el documento completo en principal:
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.gitTodos los comandos tuvieron éxito silenciosamente en el dispositivo nativo. El clon crea un new repositorio básico separado únicamente del principal; no configura el origen en el original. --no-local evita un acceso directo de copia de objeto local vinculado. No hay ningún empujón en esta transcripción de preparación.
Si la aplicación ya confirmó el documento, omita los primeros tres comandos. Nunca hagas que el mismo documento se confirme dos veces.
T2: agregar, luego buscar y luego seleccionar aguas arriba
Genere una URL real codificada por porcentaje y correcta para la plataforma:
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"El resultado real es una URL de archivo específica de la máquina que termina en /gittree-features-origin.git. Su raíz varía; file://<lab-root>/gittree-features-origin.git es una notación explicativa, no una salida de terminal fabricada ni una URL literal para pegar. ORIGIN_URL es una variable de shell, no una credencial.
git remote add origin "$ORIGIN_URL"
git config --get remote.origin.fetch
git for-each-ref --format='%(refname)' refs/remotes/originEl anuncio guarda silencio. La consulta de configuración imprime:
+refs/heads/*:refs/remotes/origin/*El for-each-ref final no imprime nada: al agregar un control remoto no se obtuvo ninguno.
git fetch --quiet origin
git branch --set-upstream-to=origin/main mainFetch tuvo éxito en silencio. Salida real aguas arriba:
branch 'main' set up to track 'origin/main'.T3: prueba el estado final del original
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 --shortResultados de las primeras cinco consultas, en orden:
main
origin/main
0 0
docs: record remotes-and-upstreams practice
6El estado corto final es vacío, salida 0. La pestaña entre los dos ceros separa las confirmaciones accesibles solo desde principal y solo desde origen/principal; Los consejos coincidentes no son prueba de que futuras recuperaciones sean innecesarias.
T4: distingue el repositorio básico real de su referencia de seguimiento local
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.remoteLa primera consulta se imprime verdadera; el segundo imprime refs/heads/main. El tercero está en silencio, salida 0: feature/pricing-cards was not published. El cuarto es silencioso, salida 1: no existe ninguna configuración de función ascendente. Esa ausencia esperada no es una búsqueda fallida.
Resuelve de forma independiente los tres consejos:
git rev-parse refs/heads/main
git rev-parse refs/remotes/origin/main
git --git-dir=../gittree-features-origin.git rev-parse refs/heads/mainLos tres SHA reales están de acuerdo. Nunca sustituya H6 por su salida SHA real.
Resultado
Where you end: principal desprotegido tiene seis confirmaciones, incluido solo el nuevo docs/remotes.md. Un origen desnudo local separado tiene principal en el mismo H6. El original tiene el origen configurado y las referencias/remotos/origen/principal obtenidas; pistas principales origen/principal. Índice/trabajo limpio; dist ignorado puede permanecer. Las tarjetas de precios/características locales todavía apuntan a F1 y no tienen rama ascendente ni de servidor. No se produjo ninguna fusión, extracción, proyecto alojado, inicio de sesión o ejecución de CI.
Errores comunes
- Tratar el origen como un servidor especial: es un nombre local elegido.
- Esperando que Add Remote cree un servidor o recupere sus ramas.
- Pegar una ruta simple en el campo URL de GitTree: en su lugar, genere la URL del archivo.
- Elegir el control remoto de una empresa real, utilizar una URL con token o reutilizar un directorio simple existente.
- Crear el documento mientras aún está en la función: registraría el historial de la rama incorrecta.
Si algo sale mal
Antes de la recuperación, la selección nativa ascendente falla porque origen/principal no existe. La repetición aislada de entrada cambiada en realidad se ejecutó:
git -c advice.setUpstreamFailure=false branch --set-upstream-to=origin/main mainStderr observado, salida 128:
fatal: the requested upstream branch 'origin/main' does not existLa punta de la rama y el trabajo se mantienen sin cambios. Según la fuente de la aplicación (no filmada), el formulario ascendente no tiene opciones recuperadas y su control Track no está disponible con There are no remote-tracking branches yet. Fetch first. No dibuje el mensaje fatal nativo como un diálogo de la aplicación. Busque el control remoto deseado y luego seleccione deliberadamente origen/principal. En esta lección eso es Fetch All.
Un directorio local faltante, una URL incorrecta o una falla en los permisos no se solucionan forzando una inserción o deshabilitando la seguridad. Cancele, inspeccione Edit Remote…, verifique el destino real y vuelva a intentar la recuperación prevista únicamente. Si ya existe un origen, inspeccionarlo; no lo sobrescriba ni lo elimine a ciegas. Quitar un control remoto cambia la configuración/seguimiento local, no el servidor en sí, y no es necesario para la lección canónica.
Comprueba tu comprensión
Responda cada pregunta y luego lea por qué. Las preguntas marcadas como "Obligatorias" cuentan para completar la lección.
0 de 6 correcto
Responda correctamente las preguntas requeridas para completar la lección.
Comprobado en este navegador.
Practica
Explique por qué origen/principal está ausente inmediatamente después de Agregar control remoto. En una repetición separada del mismo proyecto, intente seleccionarlo antes de buscarlo, luego búsquelo y selecciónelo correctamente. Verifique que el SHA de main y los bytes completos de index.html no hayan cambiado en ninguna de las acciones de configuración. En el original, demuestre que principal/origen/principal están de acuerdo y la función aún no está en el servidor básico.
Su propia confirmación: el sitio no puede ver su computadora.
Para completar la lección, responde correctamente a las preguntas requeridas y confirma el ejercicio práctico.
Resumen
- Un control remoto configura una dirección; fetch obtiene sus referencias; un upstream elige una relación de rama.
- origin/main es conocimiento obtenido localmente, no la rama del servidor en sí.
- Connecting main no publicó la función ni cambió su página de trabajo.
Relacionado
Términos del glosario introducidos
Remoto — مستودع بعيد; referencia de seguimiento remoto - مرجع تتبُّع بعيد; aguas arriba — الفرع المتتبَّع; repositorio desnudo — مستودع مجرد; buscar—جلب; transporte — وسيلة نقل.
Transcripción del vídeo
La narración del vídeo, cue a cue.
Mostrar la transcripción
- Conecte un control remoto y luego elija aguas arriba deliberadamente.
- La característica existe localmente; no ha sido publicado.
- Deshabilitar solo la búsqueda en segundo plano en este depósito de grabaciones.
- Cambiar a principal antes de escribir el documento de transporte.
- Guarde el documento completo sin rutas o credenciales específicas de la máquina.
- Preparar el documento de transporte en principal, no en la función.
- El documento añade el sexto compromiso en main.
- Prepare una copia desnuda por separado de principal para transporte local.
- Este destino tiene principales, pero sin rama característica.
- El destino original y desnudo son repositorios separados.
- Generar una URL de archivo para el destino local previsto.
- Guardar la dirección no se recupera sucursales o cargar la función.
- Abra el cuadro de diálogo remoto en el repositorio original.
- Nómbralo origen y verifica el destino completo.
- El control remoto está configurado; es la rama no ha sido recuperada.
- La regla de recuperación existe mientras el La consulta de referencia de seguimiento está vacía.
- Seleccionando un upstream faltante falla sin mover la principal.
- ¿Elegir un upstream? reemplazar ir a buscar? No es así.
- Busca el principal del control remoto sin cambiando su sucursal actual.
- La barra diagonal principal de origen es tu registro obtenido localmente.
- Buscar no es fusionar, cambiar la base o reemplazar la página.
- Elija la relación para la sucursal principal local nombrada.
- Seleccionar la opción sola es no la relación confirmada.
- Confirmar el flujo ascendente principal sin mover su compromiso.
- Verifique principal, está aguas arriba, Consejos a juego y trabajo limpio.
- Una consulta de función de servidor vacía no no significa que se haya perdido la característica local.
- Dirección, registro recuperado y aguas arriba el entorno siguen siendo cosas diferentes.
- Corregir una elección ascendente sin restablecer el historial.
- Verificar el original y el servidor por separado antes de continuar.
- Explica por qué falta el árbitro. Requería que lo buscaran, no que lo empujaran.
- Un control remoto local desnudo no es un proyecto alojado o una canalización.
- A continuación, busca la actualización de un compañero de equipo mientras manteniendo sus propios archivos sin cambios.