git clone: ​​por defecto superficial o no?

Mi comprensión inicial de git fue que significa (al less inicialmente) ser un VCS descentralizado (lo que permite, por ejemplo, trabajar totalmente fuera de línea e incluso clonar un repository de otro repository fuera de línea …).

Esta era, según mi comprensión inicial, la razón por la cual la terminología era "clonar" cuando recuperaba un repository: porque en realidad lo estábamos consiguiendo todo: una copy completa (lo que permitía un trabajo fuera de línea completo o que alguien más lo clonara) más etc.).

Pero luego me di count de que no era el caso: a veces estoy trabajando en mi maestro que está actualizado; luego cambiar a otra twig y esperaría que esté actualizado también, pero cuando logro recuperar (o git pull) obtengo cosas nuevas (eso no es necesariamente así de nuevo).

Entonces, ¿mi comprensión inicial fue errónea? ¿En realidad es un clon, no un clon real? ¿es realmente superficial? ¿Cuáles son las configuraciones pnetworkingeterminadas para git clonar? la documentation oficial solo indica que –depth "crea un clon superficial"; ¿Debería entender que me permite elegir la profundidad (o debería decir superficialidad) de dicho clon? o que crea un clon superficial en lugar de uno profundo creado sin la opción?

Cuando clonas un repository de git, obtienes una copy completa de la twig principal y recuperas todos los metadatos de otras twigs en el momento de la clonación (que se almacena en el directory .git de tu repository). Git usa estos metadatos para build las twigs cuando las revisa / cambia entre ellas localmente. Las sucursales estarán desactualizadas si alguien ha enviado a una sucursal remota desde que clonó el repository, o desde la última vez que extrajo datos del control remoto .

Debe estar en línea para realizar una búsqueda, y cada bifurcación (por defecto) se administra por separado. Entonces, si realizas un "pull" en "master", no se actualizarán automáticamente otras twigs, aunque git (de nuevo, de manera pnetworkingeterminada) extraerá los metadatos de todas las demás twigs para que puedas alternar entre ellas y realizar las fusiones que necesites. a.

Las confirmaciones de twigs extraídas permanecen inactivas hasta que especifique qué desea hacer con ellas mientras trabaja en esa twig . La razón de esto es que puede tener copys diferentes / de trabajo de sucursales locales que aún no desea fusionar con los cambios remotos, por lo que debe hacerlo manualmente cuando esté listo para hacerlo. Imagine un escenario donde tiene las siguientes twigs:

  • dominar
  • característica / mi-característica

Actualmente está trabajando con feature/my-feature con otro desarrollador: ambos presionan el código regularmente y queueboran. Luego se le pide que trabaje una corrección de errores para LIVE; en este escenario, escondería o confirmaría los cambios en la feature/my-feature , posiblemente presione (si los cambios están listos para que el otro desarrollador trabaje), cambie a master , haga un pull y cree otra twig de corrección de errores para arreglar el Problema EN VIVO: no desea que se sobrescriba el código de feature/my-feature . Es posible que desee controlarlo manualmente, cuando USTED esté listo para los cambios de la sucursal remota.

Un "tirón" es una combinación de "search" y "fusionar". La "extracción" extrae los metadatos de la sucursal del server, y la "combinación" toma las confirmaciones de la sucursal rastreada actualmente y las fusiona en su sucursal local.

Un "clon superficial" en git todavía te ofrece la última instantánea del código, pero no clona todo el gráfico del historial. Esa es la única diferencia: no tiene nada que ver con las twigs. El parámetro depth permite especificar cuántas confirmaciones debe retirar para cada twig. Personalmente, nunca he necesitado usarlo más que cuando retiro repositorys en serveres de CI / CD.

Git es muy diferente de VCS como TFS, y no solo porque tienes que estar en línea todo el time. Es extremadamente flexible y le permite a usted, como desarrollador, ser extremadamente flexible en su forma de trabajar (siempre y cuando elija la estrategia de bifurcación adecuada para sus necesidades), pero, lamentablemente, requiere cierto reaprendizaje, especialmente cuando llega a la terminología (por ejemplo, git checkout no extrae el código del control remoto, simplemente cambia entre las sucursales locales).

El clon de Git no es superficial por defecto para la twig que está tirando, sin embargo, no extraerá todas las confirmaciones presentadas en las sucursales remotas, a less que las finalice. Si desea clonar con fines de copy de security o espejo, entonces debe usar la opción --bare . El clon desnudo extrae todo para get una copy total. Tenga en count que los repositorys desnudos no se pueden usar directamente a less que estén apuntados desde otro clon, tal vez al less uno local.