Contextualizacion - aaron-at97/WikiDesplegada GitHub Wiki

Objetivos

Git, y en general un sistema de control de versiones, tiene dos objetivos principales:

  • Guardar el historial de cambios sobre el código de un proyecto.
  • Permitir a varias personas contribuir simultáneamente sobre un mismo proyecto.
  • Rendimiento

Caracteristicas

  • Fuerte apoyo al desarrollo no lineal, por ende rapidez en la gestión de ramas y mezclado de diferentes versiones. Git incluye herramientas específicas para navegar y visualizar un historial de desarrollo no lineal. Una presunción fundamental en Git, es que un cambio será fusionado mucho más frecuentemente de lo que se escribe originalmente, conforme se pasa entre varios programadores que lo revisan.

  • Gestión distribuida. Al igual que Darcs, BitKeeper, Mercurial, SVK, Bazaar y Monotone, Git le da a cada programador una copia local del historial del desarrollo entero, y los cambios se propagan entre los repositorios locales. Los cambios se importan como ramas adicionales y pueden ser fusionados en la misma manera que se hace con la rama local.

  • Los almacenes de información pueden publicarse por HTTP, FTP, rsync o mediante un protocolo nativo.

  • Los repositorios Subversion y svk se pueden usar directamente con git-svn.

  • Gestión eficiente de proyectos grandes, dada la rapidez de gestión de diferencias entre archivos, entre otras mejoras de optimización de velocidad de ejecución.

  • Todas las versiones previas a un cambio determinado, implican la notificación de un cambio posterior en cualquiera de ellas a ese cambio (denominado autenticación criptográfica de historial). Esto existía en Monotone.

  • Resulta algo más caro trabajar con ficheros concretos frente a proyectos, eso diferencia el trabajo frente a CVS, que trabaja con base en cambios de fichero, pero mejora el trabajo con afectaciones de código que concurren en operaciones similares en varios archivos.

  • Los renombrados se trabajan basándose en similitudes entre ficheros, aparte de nombres de ficheros, pero no se hacen marcas explícitas de cambios de nombre con base en supuestos nombres únicos de nodos de sistema de ficheros, lo que evita posibles y desastrosas coincidencias de ficheros diferentes en un único nombre.

  • Realmacenamiento periódico en paquetes (ficheros). Esto es relativamente eficiente para escritura de cambios y relativamente ineficiente para lectura si el reempaquetado (con base en diferencias) no ocurre cada cierto tiempo.

Un poco de historia

El desarrollo de Git comenzó en abril de 2005, después de que muchos desarrolladores del kernel de Linux renunciaran al acceso a BitKeeper , un sistema de gestión de control de fuente (SCM) propietario que habían estado usando para mantener el proyecto desde 2002. El copyright El titular de BitKeeper, Larry McVoy , había retirado el uso gratuito del producto después de afirmar que Andrew Tridgell había creado SourcePuller mediante ingeniería inversa de los protocolos de BitKeeper. El mismo incidente también estimuló la creación de otro sistema de control de versiones, Mercurial.

Linus Torvalds quería un sistema distribuido que pudiera usar como BitKeeper, pero ninguno de los sistemas gratuitos disponibles satisfacía sus necesidades. Torvalds citó un ejemplo de un sistema de gestión de control de fuente que necesita 30 segundos para aplicar un parche y actualizar todos los metadatos asociados, y señaló que esto no se adaptaría a las necesidades del desarrollo del kernel de Linux, donde la sincronización con otros mantenedores podría requerir 250 acciones de este tipo en una vez.

Para su criterio de diseño, especificó que el parcheo no debería tomar más de tres segundos, y agregó tres goles más:

  • Tome el sistema de versiones concurrentes (CVS) como ejemplo de lo que no se debe hacer; en caso de duda, tome la decisión exactamente opuesta.
  • Admite un flujo de trabajo distribuido similar a BitKeeper.
  • Incluya salvaguardias muy sólidas contra la corrupción, ya sea accidental o malintencionada.

Estado actual

Versión Fecha de lanzamiento original Última versión (parche) Fecha de lanzamiento (del parche) Cambios notables
2,31 2021-03-15 2.31.1 2021-04-02
  • git difftool adds --skip-to option
  • --format enhancements for machine readable
  • git pull warning to specify rebase or merge
2,32 06/06/2021 - - -
2,33 2021-08-16 2.33.1 2021-10-12 -
2,34 15/11/2021 - - -
⚠️ **GitHub.com Fallback** ⚠️