¿Qué es git y por qué debería usarlo?

Git es un software que se utiliza para Control de versiones. Es gratis y de código abierto.

Ahora, comprendamos qué es el Control de versiones.

Control de versiones es la gestión de cambios en documentos, programas informáticos, sitios web grandes y otra recopilación de información.

Hay dos tipos de VCS:

  • Sistema de control de versiones centralizado (CVCS)
  • Sistema distribuido de control de versiones (DVCS)

VCS centralizado

El sistema de control de versiones centralizado (CVCS) utiliza un servidor central para almacenar todos los archivos y permite la colaboración en equipo. Funciona en un único repositorio al que los usuarios pueden acceder directamente a un servidor central.

Consulte el diagrama a continuación para tener una mejor idea de CVCS:

El repositorio en el diagrama anterior indica un servidor central que podría ser local o remoto que está conectado directamente a cada una de las estaciones de trabajo del programador.

Cada programador puede extraer o actualizar sus estaciones de trabajo con los datos presentes en el repositorio o puede realizar cambios en los datos o confirmar en el repositorio. Cada operación se realiza directamente en el repositorio.

Aunque parece bastante conveniente mantener un único repositorio, tiene algunos inconvenientes importantes. Algunos de ellos son:

  • No está disponible localmente; lo que significa que siempre debe estar conectado a una red para realizar cualquier acción.
  • Como todo está centralizado, en cualquier caso, el servidor central se bloquea o se daña, lo que provocará la pérdida de todos los datos del proyecto.

Esto es cuando Distributed VCS viene al rescate.

VCS distribuido

Estos sistemas no dependen necesariamente de un servidor central para almacenar todas las versiones de un archivo de proyecto.

En Distributed VCS, cada contribuyente tiene una copia local o “clon” del repositorio principal, es decir, todos mantienen un repositorio local propio que contiene todos los archivos y metadatos presentes en el repositorio principal.

Lo entenderá mejor al consultar el diagrama a continuación:

Como puede ver en el diagrama anterior, cada programador mantiene un repositorio local por sí mismo, que en realidad es la copia o clonación del repositorio central en su disco duro. Pueden confirmar y actualizar su repositorio local sin ninguna interferencia.

Pueden actualizar sus repositorios locales con nuevos datos del servidor central mediante una operación llamada ” pull ” y afectar los cambios en el repositorio principal mediante una operación llamada ” push ” desde su repositorio local.

El acto de clonar un repositorio completo en su estación de trabajo para obtener un repositorio local le brinda las siguientes ventajas:

  • Todas las operaciones (excepto push & pull) son muy rápidas porque la herramienta solo necesita acceder al disco duro, no a un servidor remoto. Por lo tanto, no siempre necesita una conexión a Internet.
  • La confirmación de nuevos conjuntos de cambios se puede hacer localmente sin manipular los datos en el repositorio principal. Una vez que tenga un grupo de conjuntos de cambios listos, puede empujarlos todos a la vez.
  • Dado que cada contribuyente tiene una copia completa del repositorio del proyecto, pueden compartir los cambios entre ellos si desean obtener algunos comentarios antes de afectar los cambios en el repositorio principal.
  • Si el servidor central se bloquea en algún momento, los datos perdidos se pueden recuperar fácilmente de cualquiera de los repositorios locales del contribuyente.

Git es un DVCS.

Esto principalmente cubre sus dos preguntas más o menos. Ahora, déjame decirte lo fácil que es usar Git.

Algunas de las operaciones básicas en Git son:

  1. Inicializar
  2. Añadir
  3. Cometer
  4. Halar
  5. empujar

Algunas operaciones avanzadas de Git son:

  1. Derivación
  2. Fusionando
  3. Rebasando

Permítame primero darle una breve idea sobre cómo funcionan estas operaciones con los repositorios de Git. Echa un vistazo a la arquitectura de Git a continuación:

Si comprende bien el diagrama anterior, pero si no lo hace, no necesita preocuparse, explicaré estas operaciones en este Tutorial de Git una por una. Comencemos con las operaciones básicas.

Primero debe instalar Git en su sistema. Si necesita ayuda con la instalación, haga clic aquí .

En este tutorial de Git, le mostraré los comandos y las operaciones con Git Bash. Git Bash es una interfaz de línea de comandos de solo texto para usar Git en Windows que proporciona funciones para ejecutar scripts automatizados.

Después de instalar Git en su sistema Windows, simplemente abra su carpeta / directorio donde desea almacenar todos sus archivos de proyecto; Haga clic derecho y seleccione ‘ Git Bash aquí ‘.

Esto abrirá la terminal de Git Bash donde puede ingresar comandos para realizar varias operaciones de Git.

Ahora, la siguiente tarea es inicializar su repositorio.

Inicializar

Para hacer eso, usamos el comando git init. Consulte la siguiente captura de pantalla.

git init crea un repositorio Git vacío o reinicializa uno existente. Básicamente crea un directorio .git con subdirectorios y archivos de plantilla. Ejecutar un git init en un repositorio existente no sobrescribirá las cosas que ya están allí. Más bien recoge las plantillas recién agregadas.

Ahora que mi repositorio está inicializado, permítame crear algunos archivos en el directorio / repositorio. Por ejemplo, he creado dos archivos de texto, a saber, edureka1.txt y edureka2.txt .

Veamos si estos archivos están en mi índice o no usan el comando git status . El índice contiene una instantánea del contenido del árbol / directorio de trabajo, y esta instantánea se toma como el contenido para el próximo cambio que se realizará en el repositorio local.

Estado de Git

El comando git status enumera todos los archivos modificados que están listos para agregarse al repositorio local.

Escribamos el comando para ver qué sucede:

Esto muestra que tengo dos archivos que aún no se han agregado al índice. Esto significa que no puedo confirmar los cambios con estos archivos a menos que los haya agregado explícitamente en el índice.

Añadir

Este comando actualiza el índice utilizando el contenido actual que se encuentra en el árbol de trabajo y luego prepara el contenido en el área de preparación para la próxima confirmación.

Por lo tanto, después de realizar cambios en el árbol de trabajo y antes de ejecutar el comando commit , debe usar el comando add para agregar cualquier archivo nuevo o modificado al índice. Para eso, use los siguientes comandos:

git add

o

git add

Déjame demostrarte el git add para ti para que puedas entenderlo mejor.

He creado dos archivos más edureka3.txt y edureka4.txt . Agreguemos los archivos usando el comando git add -A . Este comando agregará todos los archivos al índice que están en el directorio pero que aún no están actualizados en el índice.

Cometer

Se refiere a la grabación de instantáneas del repositorio en un momento dado. Las instantáneas confirmadas nunca cambiarán a menos que se hagan explícitamente. Permítanme explicar cómo funciona commit con el siguiente diagrama:

Aquí, C1 es la confirmación inicial, es decir, la instantánea del primer cambio a partir del cual se crea otra instantánea con cambios denominados C2. Tenga en cuenta que el maestro apunta a la última confirmación.

Ahora, cuando me comprometo de nuevo, se crea otra instantánea C3 y ahora el maestro apunta a C3 en lugar de C2.

Git tiene como objetivo mantener los commits lo más livianos posible. Por lo tanto, no copia ciegamente todo el directorio cada vez que se compromete; incluye commit como un conjunto de cambios, o “delta” de una versión del repositorio a la otra. En palabras sencillas, solo copia los cambios realizados en el repositorio.

Puede comprometerse utilizando el siguiente comando:

git commit

Esto confirmará la instantánea por etapas y lanzará un editor de texto que le solicitará un mensaje de confirmación.

O puedes usar:

git commit -m “”

Probémoslo.

Como puede ver arriba, el comando git commit ha confirmado los cambios en los cuatro archivos en el repositorio local.

Ahora, si desea confirmar una instantánea de todos los cambios en el directorio de trabajo a la vez, puede usar el siguiente comando:

git commit -a

He creado dos archivos de texto más en mi directorio de trabajo a saber. edureka5.txt y edureka6.txt pero aún no se han agregado al índice.

Estoy agregando edureka5.txt usando el comando:

git add edureka5.txt

Agregué edureka5.txt al índice explícitamente pero no edureka6.txt e hice cambios en los archivos anteriores. Quiero confirmar todos los cambios en el directorio a la vez. Consulte la siguiente instantánea.

Este comando enviará una instantánea de todos los cambios en el directorio de trabajo, pero solo incluye modificaciones a los archivos rastreados, es decir, los archivos que se han agregado con git add en algún momento de su historial. Por lo tanto, edureka6.txt no se confirmó porque todavía no se agregó al índice. Pero se confirmaron los cambios en todos los archivos anteriores presentes en el repositorio, es decir, edureka1.txt , edureka2.txt , edureka3.txt , edureka4.txt y edureka5.txt .
Ahora he realizado mis confirmaciones deseadas en mi repositorio local.

Tenga en cuenta que antes de que afecte los cambios en el repositorio central, siempre debe extraer los cambios del repositorio central a su repositorio local para actualizarse con el trabajo de todos los colaboradores que han estado contribuyendo en el repositorio central. Para eso usaremos el comando pull .

Halar

El comando git pull recupera los cambios de un repositorio remoto a un repositorio local. Fusiona cambios ascendentes en su repositorio local, que es una tarea común en colaboraciones basadas en Git.

Pero primero, debe configurar su repositorio central como origen usando el comando:

git remote add origin

Ahora que mi origen está configurado, extraigamos archivos del origen usando pull. Para eso usa el comando:

maestro de origen git pull

Este comando copiará todos los archivos de la rama maestra del repositorio remoto a su repositorio local.

Como mi repositorio local ya se actualizó con archivos de la rama maestra, el mensaje ya está actualizado. Consulte la captura de pantalla anterior.

Nota: También puede intentar extraer archivos de una rama diferente con el siguiente comando:

origen de extracción de git

Su repositorio Git local ahora se actualiza con todos los cambios recientes. Es hora de que realice cambios en el repositorio central utilizando el comando push .

empujar

Este comando transfiere confirmaciones desde su repositorio local a su repositorio remoto. Es lo opuesto a la operación de extracción.

Tirar de las importaciones se compromete a los repositorios locales, mientras que empujar las exportaciones se compromete a los depósitos remotos.

El uso de git push es publicar sus cambios locales en un repositorio central. Una vez que haya acumulado varios compromisos locales y esté listo para compartirlos con el resto del equipo, puede enviarlos al repositorio central mediante el siguiente comando:

git push

Nota : Este control remoto se refiere al repositorio remoto que se había configurado antes de usar el comando pull .

Esto empuja los cambios desde el repositorio local al repositorio remoto junto con todas las confirmaciones y objetos internos necesarios. Esto crea una sucursal local en el repositorio de destino.

Deja que te lo demuestre.

Los archivos anteriores son los archivos que ya hemos confirmado anteriormente en la sección de confirmación y todos están ” listos para enviar “. Usaré el comando git push origin master para reflejar estos archivos en la rama maestra de mi repositorio central.

Veamos ahora si los cambios tuvieron lugar en mi repositorio central.

Sí lo hizo. 🙂

Para evitar la sobreescritura, Git no permite la inserción cuando resulta en una fusión de avance no rápido en el repositorio de destino.

Nota : Una fusión que no es de avance rápido significa una fusión ascendente, es decir, fusión con ramas ancestrales o primarias de una rama secundaria.

Para habilitar dicha fusión, use el siguiente comando:

git push –force

El comando anterior fuerza la operación de inserción incluso si da como resultado una fusión de avance no rápido.

Si desea aprender cómo crear sucursales y cómo fusionarlas, lea el blog completo aquí .

También puedes ver este video mío para obtener más información. No olvides presionar el botón “Me gusta” en YouTube si te fue útil. 🙂

Git permite que un equipo de personas trabajen juntas, todas utilizando los mismos archivos. Y ayuda al equipo a lidiar con la confusión que suele ocurrir cuando varias personas están editando los mismos archivos.

Hay muchas formas de configurarlo, pero en mi trabajo, así es como lo usamos: cuando un nuevo empleado comienza, descarga todos los archivos de Github, que es un servidor en línea al que todos estamos conectados.

Entonces él tiene su versión local de los archivos, yo tengo mi versión local, nuestro jefe tiene su versión local, etc.

Cuando hago un cambio en algunos archivos, paso por el siguiente proceso en la Terminal. (Hay clientes GUI para Git, pero prefiero trabajar en la línea de comandos).

> git pull

Eso hace que los últimos cambios bajen de github. Si hay conflictos entre esos y mis locales, me dice cuáles son, archivo por archivo, línea por línea, y ahora tengo la oportunidad de conciliar esas diferencias.

Después de editar los archivos o crear nuevos, ejecuto este comando:

> git add .

Lo que agrega todos mis cambios locales a git, para que git los conozca. El punto después de agregar específicamente significa agregar todos los cambios que hice, por ejemplo, nuevos archivos que agregué a mi carpeta local o cambios que hice a archivos existentes. Si quiero, puedo agregar solo archivos específicos, p. Ej.

> git add myNewFile.js

Ahora escribo un comentario sobre las adiciones que acabo de hacer.

> git commit -m "Fixed a major bug which stopped reports from printing."

Finalmente, subo mis cambios al servidor.

> git push

Ahora, cuando mis colegas hacen un …

> git pull

… recibirán mis cambios, y se les notificará si alguno de ellos entra en conflicto con sus versiones locales.

Hay todo tipo de comandos interesantes y útiles para revertir los cambios a un tiempo o estado en particular. Pero probablemente lo más útil de Git es la ramificación. Digamos que mi equipo está trabajando en el código para un juego de Asteroides, y tengo la idea de hacer asteroides giratorios. Esto implicará hacer algunos cambios importantes en el código de asteroides existente, y estoy un poco asustado de hacerlo. No se preocupe, solo puedo hacer una rama.

En primer lugar, comprobaré qué ramas existen:

  > rama de git
 Maestro*

Por lo tanto, actualmente solo hay una rama en mi máquina local, llamada master. La estrella significa que es la rama en la que estoy trabajando actualmente. Seguiré y crearé una nueva:

> git branch spinningAsteroids

Eso crea una copia de todos los archivos en master. Ahora me mudaré a esa rama.

  > git checkout spinningAsteroides
 > rama de git
 Maestro
 Asteroides giratorios *

Ahora paso un par de horas dando vueltas a los asteroides, haciendo la codificación que necesito hacer, sin preocuparme por estropear las cosas, porque estoy en una rama. Mientras tanto, recibo una llamada de soporte técnico. Han encontrado un error crítico y necesito solucionarlo lo antes posible. Sin preocupaciones…

> git checkout master

… arreglar error …

  > git pull
 > git add.
 > git commit -m "Se corrigió un error crítico con puntajes altos".
 > git push 

Ahora puedo reanudar mi trabajo con spinningAsteroids.

  > git checkout spinningAsteroides
 > rama de git
 Maestro
 Asteroides giratorios *

… trabajo Trabajo trabajo …

Bien, ahora estoy contento con mis asteroides giratorios, y quiero fusionar ese nuevo código en la base del código principal, así que …

  > git checkout master
 > rama de git
 Maestro*
 Asteroides giratorios

> git merge spinningAsteroids

Ahora el código de mi rama se fusiona en la base de código principal. Ahora puedo subirlo.

  > git pull
 > git add.
 > git commit -m "¡nueva característica genial añadida! ¡Asteroides giratorios!"
 > git push 

Hay muchas formas de usar Git. Este es solo uno de ellos.

More Interesting

¿Es común que las grandes empresas contraten ingenieros de software para escribir aplicaciones especializadas para su empresa?

¿Cuáles son las posibilidades de que un adolescente desarrolle una aplicación exitosa?

¿Cuáles son los mejores planes de inversión y jubilación que debe seguir un ingeniero de software?

Cómo prepararse para un hackathon

¿Por qué me piden que escriba un algoritmo durante la entrevista DevOps en lugar de las secuencias de comandos relacionadas con DevOps?

¿Cuáles son los diferentes enfoques que uno puede usar para depurar una gran base de código en C?

¿Cuál es el destino del ingeniero de software del país del tercer mundo?

¿Qué hace que la eliminación de defectos de software (errores) sea tan difícil?

¿Cuáles son los pasos iniciales para hacer un producto de software para la gestión escolar?

¿Los ingenieros químicos son abandonados por las empresas como en el software?

¿Qué tan difícil es cambiar a gigantes de software como Amazon o Microsoft después de 2-3 años de experiencia en una empresa de redes como Arista Networks?

¿Cuál es la anatomía de los proyectos de programación donde se usan múltiples lenguajes?

¿Cuál es la principal diferencia entre un investigador informático y un ingeniero de software?

¿Ves el sindicalismo artesanal en la ingeniería de software?

¿Por qué los ingenieros de software tienden a llegar a la oficina tan tarde? Muchos de ellos entran alrededor de las 11 a.m. o más tarde, luego trabajan más tarde por la noche.