git branch vs. git repository, ¿cuál debo usar?

¿Cuál toma más espacio en disco? ¿Cómo rastreas las correcciones de errores (estamos usando Jira)? ¿Cómo se sabe qué sucursal o depósito tiene la corrección de errores? debe haber otras ventajas / desventajas para el repository frente a la sucursal?

Tu pregunta no tiene mucho sentido. Los repositorys siempre contienen al less una twig y no se puede tener una twig sin un repository. Entonces, por supuesto, una twig es más pequeña que un repository. Los dos no son realmente cosas comparables.

Entonces, hablemos por un momento sobre lo que realmente contiene un repository de Git. Hay algunas cosas principales:

  • Árbol de trabajo : este es el estado actual de todos sus files, aquellos en los que está trabajando. Esto puede ocupar una buena cantidad de espacio.

  • objects : esta es la forma interna en que git almacena cosas: blobs para representar el contenido de los files, treees para representar la estructura del directory, se compromete a representar instantáneas del tree de trabajo. Esta es la otra cosa que realmente toma espacio.

  • refs – abreviatura de references: twigs o tags. Estos son muy, muy livianos, solo son indicadores de compromisos particulares. Toman un poco de espacio, pero es tan poco que deberías pensar que son completamente gratis. Las tags son references fijas; apuntan a uno cometer para siempre, y se usan para cosas como marcar versiones. Las twigs son references mobilees; con una desprotegida, avanza a medida que te comprometes. Son lo que usarás para representar líneas de desarrollo: una twig estable, una twig para una corrección de error o característica particular, lo que sea.

Hay otras cosas dentro del directory .git además de objects y references, pero no te preocupes mucho por ellas ahora.

¿Cómo rastreas las correcciones de errores (estamos usando Jira)? ¿Cómo se sabe qué sucursal o depósito tiene la corrección de errores?

Esto depende de ti. En general, las personas terminan incorporando cierta información en sus posts de compromiso para indicar que abordan algún error / problema en particular. Probablemente deberías tener un flujo de trabajo definido, donde hagas las correcciones de errores en sus propias twigs (o tal vez una twig de mantenimiento en una versión anterior) y las combines en tu twig de desarrollo actual, compartiendo las correcciones de errores con la versión futura. Deberías poder decir algo como "las twigs maestra y de mantenimiento siempre tienen todas las correcciones de errores", aunque si quieres verificar, puedes hacer algo como git log --grep='bug 1234' , suponiendo que hayas puesto esa cadena en tu post de compromiso!

En general, no es necesario tener múltiples clones del repository del mismo proyecto. Probablemente tendrá uno central, y cada desarrollador tendrá el suyo propio, pero cuando un desarrollador publique su trabajo, lo colocarán en el central, y allí es donde debería estar todo lo importante.

Una twig siempre cuesta prácticamente nada para crear dentro del mismo repository (técnicamente hablando, depende de lo que pongas en la twig, pero estoy seguro de que fue claro para empezar).

Al clonar el repository, podría terminar con el doble de los requisitos de almacenamiento (tanto para los packages como para el tree de trabajo). Sin embargo, esto podría llevarlo a creer que los repositorys de clonación son necesariamente algo subóptimo. Déjame decirte por qué eso no siempre es cierto /

Un repository es en realidad solo una colección de references de sucursales. Una twig en realidad (como en la copy profunda) toma tanto como un repository, a exception de los blobs en commits únicos para una twig específica. (Por lo general, no hay mucha diferencia allí).

Localmente, puede clonar un repository virtualmente sin costo adicional porque puede estar enlazado (dentro del mismo sistema de files, eso es). También se puede evitar el costo incurrido al tener otro tree de trabajo clonando en un repository desnudo (por ejemplo, usando git clone --mirror ).

DENTRO DE UN PROYECTO

En mi opinión, un repository corresponde a un 'jugador' en el flujo de trabajo distribuido. Los jugadores pueden ser "personas naturales" o "representantes de roles". yo tengo

  • repo central (con conectividad web para que pueda trabajar desde cualquier lugar empujando y tirando)
  • Repo de trabajo (uno por estación de trabajo, con las twigs efímeras y temporales asociadas con ProofOfConcepting, fusión, microcompromiso, etc.)
  • un repository de respaldo
  • [tal vez un clon github para pull-requests si los desarrolladores upstream están en github]

En la práctica, solo se comparten 3-4 types de twigs en todos los repos (maestro, mantenimiento, testing, inestable).

FUERA DE UN PROYECTO

Por supuesto, un proyecto tendrá su propio repository (la mayoría de las veces). Estoy empezando a inclinarme hacia el uso de submodules porque parece ser más flexible que las twigs heterogéneas (es decir, diferentes proyectos en twigs separadas del mismo repository)

Una gran ventaja de tener un único repository es que será muy fácil cambiar su tree de trabajo asociado de una twig a otra. Para ser justos, esta diferencia puede ser trabajada en dos direcciones:

  • puede cambiar su tree de trabajo a una twig de otro repository agregándolo como un control remoto
  • puede tener un trabajo de repos por separado (incluso al descubierto) con un tree de trabajo 'no local' anulando las variables de entorno de GIT_WORKTREE

Verá, cuando lo mira de esta manera, un repository comienza a ser una colección de sucursales, con una asociación más o less convential a un único tree de trabajo. En las convenciones es donde surgen las diferencias reales: generalmente usas repo para administrar sets de twigs y diferentes treees de trabajo.

Para mí, un repository debe albergar un proyecto distinto. Una sucursal es una "vía" de desarrollo en el proyecto. Por lo tanto, es posible que tenga una sucursal de desarrollo, una sucursal de producción y algunas twigs de características, y algunas twigs de corrección de errores. Las twigs se pueden fusionar entre sí según sea necesario y, finalmente, fusionarse en el desarrollo y la producción.

Espacio en disco: todo un repository es más grande que crear una twig, ya que una twig es solo un puntero cuando se crea por primera vez, mientras que todo un repository necesita almacenar todos los files .git nuevamente.

Las sucursales dentro de un repos también tienen ventajas más allá de los otros comentarios. Muchas herramientas gráficas (o UI de text) pueden mostrarle información sobre commits / tags / etc en las sucursales dentro de un repository. Esa información simplemente no estaría disponible si creara un nuevo repository cada vez que quisiera fracturar el desarrollo.

También tendrá un time más fácil para express las relaciones de twig de twig cuando se utiliza la ramificación interna. Es natural allí, mientras que con los repos adicionales tienes que rastrear y administrar la relación externamente.