stringtranslate.com

git

Git ( / ɡ ɪ t / ) [8] es un sistema de control de versiones distribuido [9] que rastrea los cambios en cualquier conjunto de archivos de computadora , generalmente utilizado para coordinar el trabajo entre programadores que desarrollan de manera colaborativa el código fuente durante el desarrollo de software . Sus objetivos incluyen velocidad, integridad de datos y soporte para flujos de trabajo distribuidos y no lineales (miles de ramas paralelas que se ejecutan en diferentes computadoras). [10] [11] [12]

Git fue escrito originalmente por Linus Torvalds en 2005 para el desarrollo del kernel de Linux , y otros desarrolladores del kernel contribuyeron a su desarrollo inicial. [13] Desde 2005, Junio ​​Hamano ha sido el mantenedor principal. Como ocurre con la mayoría de los otros sistemas de control de versiones distribuidos, y a diferencia de la mayoría de los sistemas cliente-servidor , cada directorio Git en cada computadora es un repositorio completo con un historial completo y capacidades completas de seguimiento de versiones, independientemente del acceso a la red o de un servidor central . [14] Git es un software gratuito y de código abierto compartido bajo la licencia exclusiva GPL-2.0 .

Desde su creación, Git se ha convertido en el sistema de control de versiones distribuido más popular, y casi el 95 % de los desarrolladores lo consideran su principal sistema de control de versiones a partir de 2022. [15] Hay muchas ofertas populares de servicios de repositorio de Git, incluidos GitHub , SourceForge , Bitbucket y GitLab . [16] [17] [18] [19] [20]

Historia

Torvalds inició el desarrollo de Git en abril de 2005 cuando el sistema propietario de gestión de control de fuente (SCM) utilizado para el desarrollo del kernel de Linux desde 2002, BitKeeper , revocó su licencia gratuita para el desarrollo de Linux. [21] [22] El titular de los derechos de autor de BitKeeper, Larry McVoy , afirmó que Andrew Tridgell había creado SourcePuller mediante ingeniería inversa de los protocolos de BitKeeper . [23] El mismo incidente también impulsó la creación de otro sistema de control de versiones, Mercurial .

Torvalds quería un sistema distribuido que pudiera usar como BitKeeper, pero ninguno de los sistemas gratuitos disponibles cubría sus necesidades. Citó un ejemplo de un sistema de gestión de control de código 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 al mismo tiempo. una vez. Para su criterio de diseño, especificó que el parcheo no debería tomar más de tres segundos y agregó tres objetivos más: [10]

Estos criterios eliminaron todos los sistemas de control de versiones en uso en ese momento, por lo que inmediatamente después del lanzamiento de desarrollo del kernel de Linux 2.6.12-rc2, Torvalds se propuso escribir el suyo propio. [12]

El desarrollo de Git comenzó el 3 de abril de 2005. [24] Torvalds anunció el proyecto el 6 de abril y se convirtió en autohospedador al día siguiente. [24] [25] La primera fusión de varias sucursales tuvo lugar el 18 de abril. [26] Torvalds logró sus objetivos de rendimiento; El 29 de abril, se comparó el naciente Git grabando parches en el árbol del kernel de Linux a una velocidad de 6,7 parches por segundo. [27] El 16 de junio, Git administró la versión 2.6.12 del kernel. [28]

Torvalds entregó el mantenimiento el 26 de julio de 2005 a Junio ​​Hamano, uno de los principales contribuyentes al proyecto. [29] Hamano fue responsable de la versión 1.0 el 21 de diciembre de 2005. [30]

Nombrar

Torvalds bromeó sarcásticamente sobre el nombre git (que significa "persona desagradable" en la jerga inglesa británica ): "Soy un bastardo egoísta y le pongo mi nombre a todos mis proyectos. Primero ' Linux ', ahora 'git'". [31] [32] La página de manual describe a Git como "el rastreador de contenido estúpido". [33]

El archivo Léame del código fuente da más detalles: [34]

"git" puede significar cualquier cosa, dependiendo de tu estado de ánimo.

El código fuente de Git se refiere al programa como "el administrador de información del infierno".

Características

El diseño de Git es una síntesis de la experiencia de Torvalds con Linux en el mantenimiento de un gran proyecto de desarrollo distribuido, junto con su profundo conocimiento del rendimiento del sistema de archivos obtenido del mismo proyecto y la urgente necesidad de producir un sistema que funcione en poco tiempo. Estas influencias llevaron a las siguientes opciones de implementación: [13]

Fuerte apoyo al desarrollo no lineal
Git admite ramificaciones y fusiones rápidas e incluye herramientas específicas para visualizar y navegar por un historial de desarrollo no lineal. En Git, una suposición central es que un cambio se fusionará con más frecuencia de lo que se escribe, a medida que se transmite a varios revisores. En Git, las ramas son muy ligeras: una rama es sólo una referencia a una confirmación.
Desarrollo distribuido
Al igual que Darcs , BitKeeper , Mercurial , Bazaar y Monotone , Git proporciona a cada desarrollador una copia local del historial de desarrollo completo y los cambios se copian de un repositorio a otro. Estos cambios se importan como ramas de desarrollo agregadas y se pueden fusionar de la misma manera que una rama desarrollada localmente. [35]
Compatibilidad con sistemas y protocolos existentes
Los repositorios se pueden publicar a través del Protocolo seguro de transferencia de hipertexto (HTTPS), el Protocolo de transferencia de hipertexto (HTTP), el Protocolo de transferencia de archivos (FTP) o un protocolo Git a través de un socket simple o Secure Shell (ssh). Git también tiene una emulación de servidor CVS, que permite el uso de clientes CVS existentes y complementos IDE para acceder a los repositorios de Git. Los repositorios de Subversion se pueden usar directamente con git-svn. [36]
Manejo eficiente de grandes proyectos.
Torvalds ha descrito a Git como muy rápido y escalable, [37] y las pruebas de rendimiento realizadas por Mozilla [38] mostraron que era un orden de magnitud más rápido para diferenciar repositorios grandes que Mercurial y GNU Bazaar ; recuperar el historial de versiones de un repositorio almacenado localmente puede ser cien veces más rápido que recuperarlo del servidor remoto. [39]
Autenticación criptográfica del historial.
El historial de Git se almacena de tal manera que el ID de una versión particular (una confirmación en términos de Git) depende del historial de desarrollo completo que condujo a esa confirmación. Una vez publicado, no es posible cambiar las versiones antiguas sin que se note. La estructura es similar a un árbol Merkle , pero con datos agregados en los nodos y las hojas. [40] ( Mercurial y Monotone también tienen esta propiedad).
Diseño basado en herramientas
Git fue diseñado como un conjunto de programas escritos en C y varios scripts de shell que proporcionan envoltorios para esos programas. [41] Aunque la mayoría de esos scripts han sido reescritos en C para mayor velocidad y portabilidad, el diseño permanece y es fácil encadenar los componentes. [42]
Estrategias de fusión conectables
Como parte del diseño de su conjunto de herramientas, Git tiene un modelo bien definido de fusión incompleta y tiene múltiples algoritmos para completarla, lo que culmina en decirle al usuario que no puede completar la fusión automáticamente y que se necesita edición manual. [43]
La basura se acumula hasta que se recoge.
Abortar operaciones o revertir cambios dejará objetos inútiles colgando en la base de datos. Por lo general, se trata de una pequeña fracción de la historia en continuo crecimiento de los objetos buscados. Git realizará automáticamente la recolección de basura cuando se hayan creado suficientes objetos sueltos en el repositorio. La recolección de basura se puede llamar explícitamente usando git gc. [44] [45]
Embalaje periódico de objetos explícitos
Git almacena cada objeto recién creado como un archivo separado. Aunque está comprimido individualmente, ocupa una gran cantidad de espacio y es ineficaz. Esto se resuelve mediante el uso de paquetes que almacenan una gran cantidad de objetos comprimidos en delta entre sí en un archivo (o flujo de bytes de red) llamado archivo de paquete . Los paquetes se comprimen utilizando la heurística de que los archivos con el mismo nombre probablemente sean similares, sin depender de esto para su corrección. Se crea un archivo de índice correspondiente para cada archivo de paquete, que indica el desplazamiento de cada objeto en el archivo de paquete. Los objetos recién creados (con el historial recién agregado) todavía se almacenan como objetos individuales y es necesario volver a empaquetarlos periódicamente para mantener la eficiencia del espacio. El proceso de empaquetar el repositorio puede resultar muy costoso desde el punto de vista computacional. Al permitir que los objetos existan en el repositorio en un formato flexible pero generado rápidamente, Git permite que la costosa operación de empaquetado se aplace hasta más tarde, cuando el tiempo importa menos, por ejemplo, al final de un día laboral. Git realiza un reempaquetado periódico de forma automática, pero el reempaquetado manual también es posible con el git gccomando. [46] Para la integridad de los datos, tanto el archivo de paquete como su índice tienen una suma de verificación SHA-1 [47] en su interior, y el nombre del archivo del paquete también contiene una suma de verificación SHA-1. Para verificar la integridad de un repositorio, ejecute el git fsckcomando. [48] ​​[49]

Otra propiedad de Git es que captura instantáneas de árboles de directorios de archivos. Los primeros sistemas para rastrear versiones de código fuente, el Sistema de control de código fuente (SCCS) y el Sistema de control de revisiones (RCS), trabajaban en archivos individuales y enfatizaban el ahorro de espacio que se obtenía con deltas intercalados (SCCS) o codificación delta (RCS). (en su mayoría similares) versiones. Los sistemas de control de revisiones posteriores mantuvieron esta noción de que un archivo tiene una identidad en múltiples revisiones de un proyecto. Sin embargo, Torvalds rechazó este concepto. [50] En consecuencia, Git no registra explícitamente las relaciones de revisión de archivos en ningún nivel debajo del árbol de código fuente.

Estas relaciones de revisión implícitas tienen algunas consecuencias importantes:

Git implementa varias estrategias de fusión; se puede seleccionar una estrategia no predeterminada en el momento de la fusión: [56]

Estructuras de datos

Las primitivas de Git no son inherentemente un sistema de gestión de código fuente . Torvalds explica: [58]

En muchos sentidos, puedes ver a git simplemente como un sistema de archivos: es direccionable por contenido y tiene una noción de control de versiones, pero realmente lo diseñé desde el punto de vista de una persona que trabaja con sistemas de archivos (oye, lo que hago es kernels). , y en realidad no tengo ningún interés en crear un sistema SCM tradicional.

A partir de este enfoque de diseño inicial, Git ha desarrollado el conjunto completo de características que se esperan de un SCM tradicional, [59] con características que en su mayoría se crean según sea necesario, luego se refinan y se extienden con el tiempo.

Algunos flujos de datos y niveles de almacenamiento en el sistema de control de revisiones de Git

Git tiene dos estructuras de datos : un índice mutable (también llamado etapa o caché ) que almacena en caché información sobre el directorio de trabajo y la próxima revisión que se confirmará; y una base de datos de objetos inmutable y de solo agregar .

El índice sirve como punto de conexión entre la base de datos de objetos y el árbol de trabajo.

El almacén de objetos contiene cinco tipos de objetos: [60] [48]

Cada objeto se identifica mediante un hash SHA-1 de su contenido. Git calcula el hash y usa este valor para el nombre del objeto. El objeto se coloca en un directorio que coincide con los dos primeros caracteres de su hash. El resto del hash se utiliza como nombre de archivo para ese objeto.

Git almacena cada revisión de un archivo como un blob único. Las relaciones entre los blobs se pueden encontrar examinando el árbol y los objetos de confirmación. Los objetos recién agregados se almacenan en su totalidad mediante compresión zlib . Esto puede consumir rápidamente una gran cantidad de espacio en disco, por lo que los objetos se pueden combinar en paquetes , que utilizan la compresión delta para ahorrar espacio y almacenan blobs a medida que cambian en relación con otros blobs.

Además, git almacena etiquetas llamadas refs (abreviatura de referencias) para indicar las ubicaciones de varias confirmaciones. Se almacenan en la base de datos de referencia y son respectivamente: [67]

Referencias

Cada objeto en la base de datos de Git al que no se hace referencia se puede limpiar mediante un comando de recolección de basura o automáticamente. Un objeto puede estar referenciado por otro objeto o por una referencia explícita. Git conoce diferentes tipos de referencias. Los comandos para crear, mover y eliminar referencias varían. git show-refenumera todas las referencias. Algunos tipos son:

Implementaciones

gitg es una interfaz gráfica que utiliza GTK+ .

Git (la implementación principal en C) se desarrolla principalmente en Linux , aunque también es compatible con la mayoría de los principales sistemas operativos, incluidos BSD ( DragonFly BSD , FreeBSD , NetBSD y OpenBSD ), Solaris , macOS y Windows . [69] [70]

La primera versión de Git para Windows fue principalmente un marco de emulación de Linux que aloja la versión de Linux. La instalación de Git en Windows crea un directorio de Archivos de programa con un nombre similar que contiene el puerto Mingw-w64 de GNU Compiler Collection , Perl 5, MSYS2 (en sí mismo una bifurcación de Cygwin , un entorno de emulación similar a Unix para Windows) y varios otros puertos o emulaciones de Windows. de utilidades y bibliotecas de Linux. Actualmente, las versiones nativas de Git para Windows se distribuyen como instaladores de 32 y 64 bits. [71] El sitio web oficial de git mantiene actualmente una versión de Git para Windows, que aún utiliza el entorno MSYS2. [72]

La implementación JGit de Git es una biblioteca de software Java pura , diseñada para integrarse en cualquier aplicación Java. JGit se utiliza en la herramienta de revisión de código Gerrit y en EGit, un cliente Git para Eclipse IDE. [73]

Go-git es una implementación de código abierto de Git escrita en Go puro . [74] Actualmente se utiliza para respaldar proyectos como una interfaz SQL para repositorios de código Git [75] y proporcionar cifrado para Git. [76]

La implementación Dulwich de Git es un componente de software Python puro para Python 2.7, 3.4 y 3.5. [77]

La implementación libgit2 de Git es una biblioteca de software ANSI C sin otras dependencias, que se puede crear en múltiples plataformas, incluidas Windows, Linux, macOS y BSD. [78] Tiene enlaces para muchos lenguajes de programación, incluidos Ruby , Python y Haskell . [79] [80] [81]

JS-Git es una implementación JavaScript de un subconjunto de Git. [82]

servidor git

Captura de pantalla de la interfaz de Gitweb que muestra una diferencia de confirmación

Como Git es un sistema de control de versiones distribuido, podría usarse como servidor listo para usar. Se envía con un comando incorporado git daemonque inicia un servidor TCP simple que se ejecuta en el protocolo Git. [83] [84] Los servidores HTTP Git dedicados ayudan (entre otras características) agregando control de acceso, mostrando el contenido de un repositorio Git a través de las interfaces web y administrando múltiples repositorios. Los repositorios de Git ya existentes se pueden clonar y compartir para que otros los utilicen como un repositorio centralizado. También se puede acceder a través de un shell remoto simplemente teniendo instalado el software Git y permitiendo que el usuario inicie sesión. [85] Los servidores Git normalmente escuchan en el puerto TCP 9418. [86]

Fuente abierta

Servidor Git como servicio

Hay muchas ofertas de repositorios Git como servicio. Los más populares son GitHub , SourceForge , Bitbucket y GitLab . [91] [17] [18] [19] [20]

Adopción

La Fundación Eclipse informó en su encuesta comunitaria anual que, en mayo de 2014, Git es ahora la herramienta de gestión de código fuente más utilizada, y el 42,9% de los desarrolladores de software profesionales informan que utilizan Git como su principal sistema de control de fuente [92]. frente al 36,3% en 2013, el 32% en 2012; o para respuestas de Git excluyendo el uso de GitHub : 33,3% en 2014, 30,3% en 2013, 27,6% en 2012 y 12,8% en 2011. [93] El directorio de código abierto Black Duck Open Hub informa una aceptación similar entre los proyectos de código abierto. [94]

Stack Overflow ha incluido el control de versiones en su encuesta anual para desarrolladores [95] en 2015 (16,694 respuestas), [96] 2017 (30,730 respuestas), [97] 2018 (74,298 respuestas) [98] y 2022 (71,379 respuestas). [15] Git fue el gran favorito de los desarrolladores que respondieron a estas encuestas, con un porcentaje de hasta el 93,9 % en 2022.

Sistemas de control de versiones utilizados por los desarrolladores que respondieron:

El sitio web de empleos de TI del Reino Unido, itjobswatch.co.uk, informa que a finales de septiembre de 2016, el 29,27% de las ofertas de trabajo permanentes de desarrollo de software del Reino Unido han citado a Git, [ 99] por delante del 12,17% de Microsoft Team Foundation Server , [100] el 10,60% de Subversion , [101] 1,30% para Mercurial , [102] y 0,48% para Visual SourceSafe . [103]

Extensiones

Hay muchas extensiones de Git , como Git LFS, que comenzó como una extensión de Git en la comunidad de GitHub y ahora es ampliamente utilizada por otros repositorios. Las extensiones suelen ser desarrolladas y mantenidas de forma independiente por diferentes personas, pero en algún momento en el futuro, una extensión ampliamente utilizada se puede fusionar con Git.

Otras extensiones de Git de código abierto incluyen:

Microsoft desarrolló la extensión Virtual File System para Git (VFS para Git; anteriormente Git Virtual File System o GVFS) para manejar el tamaño del árbol de código fuente de Windows como parte de su migración de 2017 desde Perforce . VFS para Git permite que los repositorios clonados utilicen marcadores de posición cuyo contenido se descarga solo una vez que se accede a un archivo. [104]

Convenciones

Git no impone muchas restricciones sobre cómo debe usarse, pero se adoptan algunas convenciones para organizar historias, especialmente aquellas que requieren la cooperación de muchos contribuyentes.

Seguridad

Git no proporciona mecanismos de control de acceso, pero fue diseñado para funcionar con otras herramientas especializadas en control de acceso. [114]

El 17 de diciembre de 2014, se encontró un exploit que afectaba a las versiones de Windows y macOS del cliente Git. Un atacante podría realizar la ejecución de código arbitrario en una computadora de destino con Git instalado creando un árbol (directorio) de Git malicioso llamado .git (un directorio en los repositorios de Git que almacena todos los datos del repositorio) en un caso diferente (como .GIT o .Git, necesario porque Git no permite crear manualmente la versión en minúsculas de .git ) con archivos maliciosos en el subdirectorio .git/hooks (una carpeta con archivos ejecutables que ejecuta Git) en un repositorio creado por el atacante o en un repositorio que el atacante pueda modificar. Si un usuario de Windows o Mac extrae (descarga) una versión del repositorio con el directorio malicioso y luego cambia a ese directorio, el directorio .git se sobrescribirá (debido a la característica de no distinguir entre mayúsculas y minúsculas de los sistemas de archivos de Windows y Mac) y el Se pueden ejecutar archivos ejecutables maliciosos en .git/hooks , lo que da como resultado la ejecución de los comandos del atacante. Un atacante también podría modificar el archivo de configuración .git/config , lo que le permite crear alias de Git maliciosos (alias para comandos de Git o comandos externos) o modificar alias existentes para ejecutar comandos maliciosos cuando se ejecutan. La vulnerabilidad fue parcheada en la versión 2.2.1 de Git, lanzada el 17 de diciembre de 2014 y anunciada al día siguiente. [115] [116]

La versión 2.6.1 de Git, lanzada el 29 de septiembre de 2015, contenía un parche para una vulnerabilidad de seguridad ( CVE - 2015-7545) [117] que permitía la ejecución de código arbitrario. [118] La vulnerabilidad era explotable si un atacante podía convencer a una víctima de clonar una URL específica, ya que los comandos arbitrarios estaban incrustados en la propia URL. [119] Un atacante podría utilizar el exploit a través de un ataque de intermediario si la conexión no estaba cifrada, [119] ya que podría redirigir al usuario a una URL de su elección. Los clones recursivos también eran vulnerables ya que permitían al controlador de un repositorio especificar URL arbitrarias a través del archivo gitmodules. [119]

Git usa hashes SHA-1 internamente. Linus Torvalds respondió que el hash era principalmente para proteger contra la corrupción accidental, y que la seguridad que brinda un hash criptográficamente seguro era solo un efecto secundario accidental, siendo la seguridad principal la firma en otro lugar. [120] [121] Desde una demostración del ataque SHAttered contra git en 2017, git se modificó para usar una variante SHA-1 resistente a este ataque. Desde febrero de 2020 se está redactando un plan para la transición de la función hash .

Marca comercial

"Git" es una marca registrada de Software Freedom Conservancy bajo US500000085961336 desde el 3 de febrero de 2015.

Ver también

Notas

  1. ^ GPL-2.0, solo desde el 11 de abril de 2005. Algunas piezas bajo licencias compatibles como LGPLv2.1 . [6]
  2. ^ abcdefghijklmnopqrs No figura como opción en esta encuesta

Citas

  1. ^ "Revisión inicial de" git ", el administrador de información del infierno". GitHub . 8 de abril de 2005. Archivado desde el original el 16 de noviembre de 2015 . Consultado el 20 de diciembre de 2015 .
  2. ^ "Gráfico de confirmación". GitHub . 8 de junio de 2016. Archivado desde el original el 20 de enero de 2016 . Consultado el 19 de diciembre de 2015 .
  3. ^ Junio ​​C Hamano (14 de febrero de 2024). "[ANUNCIO] Git v2.43.2" . Consultado el 15 de febrero de 2024 .
  4. ^ "Sitio web de Git". Archivado desde el original el 9 de junio de 2022 . Consultado el 9 de junio de 2022 .
  5. ^ "Espejo del código fuente de Git". GitHub . Archivado desde el original el 3 de junio de 2022 . Consultado el 9 de junio de 2022 .
  6. ^ "Licencia LGPL de Git en github.com". GitHub . 20 de mayo de 2011. Archivado desde el original el 11 de abril de 2016 . Consultado el 12 de octubre de 2014 .
  7. ^ "Licencia GPL de Git en github.com". GitHub . 18 de enero de 2010. Archivado desde el original el 11 de abril de 2016 . Consultado el 12 de octubre de 2014 .
  8. ^ "Charla técnica: Linus Torvalds en git (a las 00:01:30)". Archivado desde el original el 20 de diciembre de 2015 . Consultado el 20 de julio de 2014 a través de YouTube.
  9. ^ Chacón y Straub 2014, págs. 29-31.
  10. ^ ab Torvalds, Linus (7 de abril de 2005). "Re: saga Kernel SCM". kernel-linux (lista de correo). Archivado desde el original el 1 de julio de 2019 . Consultado el 3 de febrero de 2017 ."Así que estoy escribiendo algunos guiones para intentar seguir las cosas mucho más rápido".
  11. ^ ab Torvalds, Linus (10 de junio de 2007). "Re: fatal: inconsistencia grave en la inflación". git (lista de correo).
  12. ^ abcd Linus Torvalds (3 de mayo de 2007). Charla técnica de Google: Linus Torvalds en git. El evento ocurre a las 02:30. Archivado desde el original el 28 de mayo de 2007 . Consultado el 16 de mayo de 2007 .
  13. ^ ab "Una breve historia de Git". Pro Git (2ª ed.). Presione. 2014. Archivado desde el original el 25 de diciembre de 2015 . Consultado el 26 de diciembre de 2015 .
  14. ^ Chacón, Scott (24 de diciembre de 2014). Pro Git (2ª ed.). Nueva York, Nueva York: Apress . págs. 29 y 30. ISBN 978-1-4842-0077-3. Archivado desde el original el 25 de diciembre de 2015.
  15. ^ ab "Encuesta para desarrolladores de Stack Overflow 2022". Desbordamiento de pila . Consultado el 4 de agosto de 2022 .
  16. ^ Krill, Paul (28 de septiembre de 2016). "Guerras de repositorios empresariales: GitHub frente a GitLab frente a Bitbucket". InfoMundo . Consultado el 2 de febrero de 2020 .
  17. ^ ab "Análisis competitivo, combinación de marketing y tráfico de github.com". Alexa . Archivado desde el original el 31 de marzo de 2013 . Consultado el 2 de febrero de 2020 .
  18. ^ ab "Análisis competitivo, combinación de marketing y tráfico de sourceforge.net". Alexa . Archivado desde el original el 20 de octubre de 2020 . Consultado el 2 de febrero de 2020 .
  19. ^ ab "análisis competitivo, combinación de marketing y tráfico de bitbucket.org". Alexa . Archivado desde el original el 23 de junio de 2017 . Consultado el 2 de febrero de 2020 .
  20. ^ ab "Análisis competitivo, combinación de marketing y tráfico de gitlab.com". Alexa . Archivado desde el original el 30 de noviembre de 2017 . Consultado el 2 de febrero de 2020 .
  21. ^ Brown, Zack (27 de julio de 2018). "Una historia del origen de Git". Diario de Linux . Diario de Linux. Archivado desde el original el 13 de abril de 2020 . Consultado el 28 de mayo de 2020 .
  22. ^ "BitKeeper y Linux: ¿El final del camino?". Linux.com . 11 de abril de 2005 . Consultado el 18 de mayo de 2023 .
  23. ^ McAllister, Neil (2 de mayo de 2005). "El error de BitKeeper de Linus Torvalds". InfoMundo . Archivado desde el original el 26 de agosto de 2015 . Consultado el 8 de septiembre de 2015 .
  24. ^ ab Torvalds, Linus (27 de febrero de 2007). "Re: Trivia: ¿Cuándo se autohospedó git?". git (lista de correo).
  25. ^ Torvalds, Linus (6 de abril de 2005). "La saga Kernel SCM". kernel-linux (lista de correo).
  26. ^ Torvalds, Linus (17 de abril de 2005). "¡Primera fusión real de git de kernel!". git (lista de correo).
  27. ^ Mackall, Matt (29 de abril de 2005). "Punto de referencia de Mercurial 0.4b frente a git patchbomb". git (lista de correo).
  28. ^ Torvalds, Linus (17 de junio de 2005). "Linux 2.6.12". git-commits-head (lista de correo).
  29. ^ Torvalds, Linus (27 de julio de 2005). "Conozca al nuevo mantenedor". git (lista de correo).
  30. ^ Hamano, Junio ​​C. (21 de diciembre de 2005). "Anuncio: Git 1.0.0". git (lista de correo).
  31. ^ "GitFaq: ¿Por qué el nombre 'Git'?". Git.or.cz. Archivado desde el original el 23 de julio de 2012 . Consultado el 14 de julio de 2012 .
  32. ^ "Después de la controversia, Torvalds comienza a trabajar en 'git'". Mundo PC . 14 de julio de 2012. Archivado desde el original el 1 de febrero de 2011. Torvalds parecía consciente de que su decisión de abandonar BitKeeper también sería controvertida. Cuando se le preguntó por qué llamó al nuevo software "git", que en la jerga británica significa "una persona podrida", dijo. 'Soy un bastardo egoísta, así que le pongo mi nombre a todos mis proyectos. Primero Linux, ahora git.'
  33. ^ "Página del manual de git (1)". Archivado desde el original el 21 de junio de 2012 . Consultado el 21 de julio de 2012 .
  34. ^ "Revisión inicial de 'git', el administrador de información del infierno · git/git@e83c516". GitHub . Archivado desde el original el 8 de octubre de 2017 . Consultado el 21 de enero de 2016 .
  35. ^ "Git: flujos de trabajo distribuidos". Git . Archivado desde el original el 22 de octubre de 2014 . Consultado el 15 de junio de 2020 .
  36. ^ Gunjal, Siddhesh (19 de julio de 2019). "¿Qué es la herramienta de control de versiones? Explore Git y GitHub". Medio . Consultado el 25 de octubre de 2020 .
  37. ^ Torvalds, Linus (19 de octubre de 2006). "Re: tabla comparativa de VCS". git (lista de correo).
  38. ^ Blog de Jst sobre Mozillazine "bzr/hg/git performance". Archivado desde el original el 29 de mayo de 2010 . Consultado el 12 de febrero de 2015 .
  39. ^ Dreier, Roland (13 de noviembre de 2006). "Oh, qué alivio es". Archivado desde el original el 16 de enero de 2009., observando que "git log" es 100 veces más rápido que "svn log" porque este último debe contactar con un servidor remoto.
  40. ^ "Confianza". Conceptos de Git . Manual de usuario de Git. 18 de octubre de 2006. Archivado desde el original el 22 de febrero de 2017.
  41. ^ Torvalds, Linus. "Re: tabla comparativa de VCS". git (lista de correo) . Consultado el 10 de abril de 2009 ., que describe el diseño orientado a scripts de Git.
  42. ^ iabervon (22 de diciembre de 2005). "¡Git rocks!". Archivado desde el original el 14 de septiembre de 2016., elogiando la capacidad de programación de Git.
  43. ^ "Git - Wiki de Git SCM". git.wiki.kernel.org . Consultado el 25 de octubre de 2020 .
  44. ^ Chacón y Straub 2014.
  45. ^ "Manual del usuario de Git". 10 de marzo de 2020. Archivado desde el original el 10 de mayo de 2020.
  46. ^ Chacón y Straub 2014, pag. 499.
  47. ^ Chacón y Straub 2014, págs. 33–34.
  48. ^ ab "Git - Paquetes de archivos". Git .
  49. ^ Chacón y Straub 2014, pag. 568.
  50. ^ Torvalds, Linus (10 de abril de 2005). "Re: más actualizaciones de git". kernel-linux (lista de correo).
  51. ^ Haible, Bruno (11 de febrero de 2007). "¿Cómo acelerar 'git log'?". git (lista de correo).
  52. ^ Torvalds, Linus (1 de marzo de 2006). "Re: cambios de nombre impuros/seguimiento del historial". git (lista de correo).
  53. ^ Hamano, Junio ​​C. (24 de marzo de 2006). "Re: Errores al GITtificar GCC y Binutils". git (lista de correo).
  54. ^ Hamano, Junio ​​C. (23 de marzo de 2006). "Re: Errores al GITtificar GCC y Binutils". git (lista de correo).
  55. ^ Torvalds, Linus (28 de noviembre de 2006). "Re: git y bzr". git (lista de correo)., sobre su uso git-blamepara mostrar el código movido entre archivos fuente.
  56. ^ Torvalds, Linus (18 de julio de 2007). "git-merge(1)". Archivado desde el original el 16 de julio de 2016.
  57. ^ Torvalds, Linus (18 de julio de 2007). "CrissCrossMerge". Archivado desde el original el 13 de enero de 2006.
  58. ^ Torvalds, Linus (10 de abril de 2005). "Re: más actualizaciones de git..." linux-kernel (lista de correo).
  59. ^ Torvalds, Linus (23 de marzo de 2006). "Re: Errores al GITtificar GCC y Binutils". git (lista de correo). Archivado desde el original el 22 de marzo de 2021 . Consultado el 3 de febrero de 2017 .
  60. ^ "Git - Objetos Git". Git .
  61. ^ Algunas de las partes internas de git
  62. ^ ab Chacón y Straub 2014, págs. 81–83.
  63. ^ Chacón y Straub 2014, págs. 485–488.
  64. ^ Chacón y Straub 2014, págs. 488–490.
  65. ^ Chacón y Straub 2014, págs. 495–496.
  66. ^ Chacón y Straub 2014, págs. 497–501.
  67. ^ "Git - Referencias de Git". Git .
  68. ^ "Formato de archivo de configuración del proyecto". Revisión del código Gerrit . Archivado desde el original el 3 de diciembre de 2020 . Consultado el 2 de febrero de 2020 .
  69. ^ "descargas". Archivado desde el original el 8 de mayo de 2012 . Consultado el 14 de mayo de 2012 .
  70. ^ "versiones del paquete git - Repología". Archivado desde el original el 19 de enero de 2022 . Consultado el 30 de noviembre de 2021 .
  71. ^ "msysGit". GitHub . Archivado desde el original el 10 de octubre de 2016 . Consultado el 20 de septiembre de 2016 .
  72. ^ "Git: descarga del paquete". Git .(código fuente)
  73. ^ "JGit". Archivado desde el original el 31 de agosto de 2012 . Consultado el 24 de agosto de 2012 .
  74. ^ "Git - go-git". Git . Consultado el 19 de abril de 2019 .
  75. ^ "Interfaz SQL para repositorios Git, escrita en Go.", github.com , consultado el 19 de abril de 2019
  76. ^ "Keybase lanza git cifrado". keybase.io . Consultado el 19 de abril de 2019 .
  77. ^ "Dulwich". Archivado desde el original el 29 de mayo de 2012 . Consultado el 27 de agosto de 2012 .
  78. ^ "libgit2". GitHub . Archivado desde el original el 11 de abril de 2016 . Consultado el 24 de agosto de 2012 .
  79. ^ "robusto". GitHub . Archivado desde el original el 24 de julio de 2013 . Consultado el 24 de agosto de 2012 .
  80. ^ "pygit2". GitHub . Archivado desde el original el 5 de agosto de 2015 . Consultado el 24 de agosto de 2012 .
  81. ^ "hlibgit2". Archivado desde el original el 25 de mayo de 2013 . Consultado el 30 de abril de 2013 .
  82. ^ "js-git: una implementación JavaScript de Git". GitHub . Archivado desde el original el 7 de agosto de 2013 . Consultado el 13 de agosto de 2013 .
  83. ^ Chacón y Straub 2014, págs. 138-139.
  84. ^ "Git - demonio Git". Git . Consultado el 10 de julio de 2019 .
  85. ^ 4.4 Git en el servidor: configuración del servidor Archivado el 22 de octubre de 2014 en Wayback Machine , Pro Git.
  86. ^ "1.4 Primeros pasos: instalación de Git". Vaya. Archivado desde el original el 2 de noviembre de 2013 . Consultado el 1 de noviembre de 2013 .
  87. ^ Chacón, Scott; Straub, Ben (2014). "Git en el servidor: configuración del servidor". Pro Git (2ª ed.). Presione. ISBN 978-1484200773.
  88. ^ Guía del usuario de Diffusion: alojamiento de repositorios Archivado el 20 de septiembre de 2020 en Wayback Machine .
  89. ^ "Gitolite: alojamiento de repositorios Git".
  90. ^ "Gogs: un sencillo servicio Git autohospedado".
  91. ^ "Aspectos destacados de Git 2.26". El blog de GitHub . 22 de marzo de 2020. Archivado desde el original el 22 de marzo de 2021 . Consultado el 25 de noviembre de 2020 . Quizás recuerdes cuando Git introdujo una nueva versión de su protocolo de recuperación de red en 2018. Ese protocolo ahora se usa de forma predeterminada en 2.26, así que refresquemos lo que eso significa. El mayor problema con el protocolo antiguo es que el servidor enumeraba inmediatamente todas las ramas, etiquetas y otras referencias en el repositorio antes de que el cliente tuviera la oportunidad de enviar algo. Para algunos repositorios, esto podría significar enviar megabytes de datos adicionales, cuando el cliente en realidad sólo quería saber acerca de la rama maestra. El nuevo protocolo comienza con la solicitud del cliente y proporciona una manera para que el cliente le diga al servidor qué referencias le interesan. Al obtener una sola rama solo se preguntará sobre esa rama, mientras que la mayoría de los clones solo preguntarán sobre ramas y etiquetas. Esto puede parecer todo, pero los repositorios del servidor pueden almacenar otras referencias (como el encabezado de cada solicitud de extracción abierta en el repositorio desde su creación). Ahora, las recuperaciones de repositorios grandes mejoran en velocidad, especialmente cuando la recuperación en sí es pequeña, lo que hace que el costo del anuncio de referencia inicial sea relativamente más caro. ¡Y lo mejor es que no necesitarás hacer nada! Gracias a un diseño inteligente, cualquier cliente que hable el nuevo protocolo puede funcionar sin problemas con servidores nuevos y antiguos, recurriendo al protocolo original si el servidor no lo admite. La única razón del retraso entre la introducción del protocolo y su configuración predeterminada fue permitir que los primeros usuarios descubrieran cualquier error.
  92. ^ "Resultados de la encuesta comunitaria Eclipse 2014 | Ian Skerrett". Ianskerrett.wordpress.com. 23 de junio de 2014. Archivado desde el original el 25 de junio de 2014 . Consultado el 23 de junio de 2014 .
  93. ^ "Resultados de la encuesta comunitaria de Eclipse 2012". eclipse.org. Archivado desde el original el 11 de abril de 2016.
  94. ^ "Comparar repositorios: Open Hub". Archivado desde el original el 7 de septiembre de 2014.
  95. ^ "Encuesta anual para desarrolladores de Stack Overflow". Intercambio de pila, Inc. Consultado el 9 de enero de 2020 . La encuesta anual para desarrolladores de Stack Overflow es la encuesta más grande y completa de personas que codifican en todo el mundo. Cada año, realizamos una encuesta que cubre todo, desde las tecnologías favoritas de los desarrolladores hasta sus preferencias laborales. Este año marca el noveno año que publicamos los resultados de nuestra encuesta anual para desarrolladores, y casi 90.000 desarrolladores respondieron la encuesta de 20 minutos a principios de este año.
  96. ^ "Encuesta para desarrolladores de Stack Overflow 2015". Desbordamiento de pila. Archivado desde el original el 4 de mayo de 2019 . Consultado el 29 de mayo de 2019 .
  97. ^ "Encuesta para desarrolladores de Stack Overflow 2017". Desbordamiento de pila. Archivado desde el original el 29 de mayo de 2019 . Consultado el 29 de mayo de 2019 .
  98. ^ "Encuesta para desarrolladores de Stack Overflow 2018". Desbordamiento de pila. Archivado desde el original el 30 de mayo de 2019 . Consultado el 29 de mayo de 2019 .
  99. ^ "Empleos de Git (software), salario promedio para las habilidades del sistema de control de versiones distribuidas de Git". Itjobswatch.co.uk. Archivado desde el original el 8 de octubre de 2016 . Consultado el 30 de septiembre de 2016 .
  100. ^ "Trabajos de Team Foundation Server, salario promedio para las habilidades de Microsoft Team Foundation Server (TFS)". Itjobswatch.co.uk. Archivado desde el original el 29 de octubre de 2016 . Consultado el 30 de septiembre de 2016 .
  101. ^ "Trabajos de Subversion, salario promedio para las habilidades de Apache Subversion (SVN)". Itjobswatch.co.uk. Archivado desde el original el 25 de octubre de 2016 . Consultado el 30 de septiembre de 2016 .
  102. ^ "Empleos mercuriales, salario promedio por habilidades mercuriales". Itjobswatch.co.uk. Archivado desde el original el 23 de septiembre de 2016 . Consultado el 30 de septiembre de 2016 .
  103. ^ "Empleos de VSS/SourceSafe, salario promedio para habilidades de Microsoft Visual SourceSafe (VSS)". Itjobswatch.co.uk. Archivado desde el original el 29 de octubre de 2016 . Consultado el 30 de septiembre de 2016 .
  104. ^ "El cambio de Windows a Git está casi completo: 8500 confirmaciones y 1760 compilaciones cada día". Ars Técnica . 24 de mayo de 2017. Archivado desde el original el 24 de mayo de 2017 . Consultado el 24 de mayo de 2017 .
  105. ^ "git-init". Git . Archivado desde el original el 15 de marzo de 2022.
  106. ^ "Git: ramas en pocas palabras". Git . Archivado desde el original el 20 de diciembre de 2020 . Consultado el 15 de junio de 2020 . La rama "maestra" en Git no es una rama especial. Es exactamente como cualquier otra sucursal. La única razón por la que casi todos los repositorios tienen uno es que el comando git init lo crea de forma predeterminada y la mayoría de la gente no se molesta en cambiarlo.
  107. ^ Chacón y Straub 2014, págs. 103-109.
  108. ^ github/renombrar, GitHub, 4 de diciembre de 2020 , consultado el 4 de diciembre de 2020
  109. ^ El nombre de rama predeterminado para los nuevos repositorios ahora es principal, GitLab, 22 de junio de 2021 , consultado el 22 de junio de 2021.
  110. ^ "Git Revert | Tutorial de Atlassian Git". Atlassiano . Revertir tiene dos ventajas importantes sobre restablecer. Primero, no cambia el historial del proyecto, lo que lo convierte en una operación "segura" para confirmaciones que ya se han publicado en un repositorio compartido.
  111. ^ "Flujo de trabajo de Gitflow | Tutorial de Atlassian Git". Atlassiano . Consultado el 15 de junio de 2020 .
  112. ^ Chacón y Straub 2014, págs. 170-174.
  113. ^ "Flujo de trabajo de bifurcación | Tutorial de Atlassian Git". Atlassiano . Consultado el 15 de junio de 2020 .
  114. ^ "Control de acceso al repositorio de Git". Archivado desde el original el 14 de septiembre de 2016 . Consultado el 6 de septiembre de 2016 .
  115. ^ Pettersen, Tim (20 de diciembre de 2014). "Asegurar su servidor Git contra CVE-2014-9390". Archivado desde el original el 24 de diciembre de 2014 . Consultado el 22 de diciembre de 2014 .
  116. ^ Hamano, JC (18 de diciembre de 2014). "[Anuncio] Git v2.2.1 (y actualizaciones de pistas de mantenimiento anteriores)". Grupo de noticias : gmane.linux.kernel. Archivado desde el original el 19 de diciembre de 2014 . Consultado el 22 de diciembre de 2014 .
  117. ^ "CVE-2015-7545". 15 de diciembre de 2015. Archivado desde el original el 26 de diciembre de 2015 . Consultado el 26 de diciembre de 2015 .
  118. ^ "Git 2.6.1". GitHub . 29 de septiembre de 2015. Archivado desde el original el 11 de abril de 2016 . Consultado el 26 de diciembre de 2015 .
  119. ^ a b C Blake Burkhart; et al. (5 de octubre de 2015). "Re: Solicitud CVE: git". Archivado desde el original el 27 de diciembre de 2015 . Consultado el 26 de diciembre de 2015 .
  120. ^ "hash: ¿Qué tan seguras son las etiquetas git firmadas? ¿Solo tan seguras como SHA-1 o de alguna manera más seguras?". Intercambio de pilas de seguridad de la información. 22 de septiembre de 2014. Archivado desde el original el 24 de junio de 2016.
  121. ^ "¿Por qué Git utiliza una función hash criptográfica?". Desbordamiento de pila. 1 de marzo de 2015. Archivado desde el original el 1 de julio de 2016.
  122. ^ "Git: documentación de transición de función hash". Git .

Referencias

enlaces externos