Introducción del Control de la Versión Git
Importante
Una guía a mayor profundidad se encuentra disponible en el sitio Web Git.
Git es un sistema de control de versiones distribuido (VCS) creado por Linus Torvalds, también conocido por crear y mantener el kernel de Linux. Version Control es un sistema de seguimiento de cambios de código para desarrolladores. Las ventajas de Git Version Control son:
Separar los ambientes de pruebas en ramas
Habilidad de navegar a un commit particular sin remover el historial
Habilidad para administrar commits de distintas formas, incluso combinándolos
Para ver más características, da click aquí
Prerrequisitos
Importante
En el tutorial se utiliza el sistema operativo Windows.
Para descargar e instalar Git utilize los siguientes links:
Nota
Es probable que necesite añadir Git a su ruta
Vocabulario Git
Git gira entorno a distintos comandos principales:
Repositorio: la estructura de datos de su código, incluyendo la carpeta
.git
en el directorio principalCommit: un estado guardado en particular de su repositorio, esto incluye todos los archivos y los añadidos
Branch: medios de separación de varios commits, teniendo un historial único. Esto es utilizado principalmente para separar ramas en desarrollo y las ramas estables.
Push: actualiza el repositorio remoto con sus cambios locales
Pull: actualiza el repositorio local con los cambios remotos
Clone: recupera una copia local de un repositorio a modificar
Fork: duplica un repositorio pre-existente a modificar, y lo compara con el original
Merge: combina varios cambios de diferentes ramas/commits/forks en un solo historial
Repositorio
Un repositorio de Git es una estructura de datos que contiene la estructura, historial, y archivos de un proyecto.
Los repositorios de Git usualmente están conformados por:
Una carpeta
.git
. Esta carpeta contiene diversa información sobre el repositorio.Un archivo
.gitignore
. Este archivo contiene los archivos o directorios que no quiera incluir cuando actualice el repositorio (commit).Archivos y carpetas. Este es el contenido principal del repositorio.
Crear un repositorio
Puede almacenar el repositorio localmente o de forma remota. Un control remoto es la nube, o posiblemente otro medio de almacenamiento que aloja su repositorio. GitHub es un popular servicio de alojamiento gratuito. Numerosos desarrolladores lo usan, y eso es lo que usará este tutorial.
Nota
Hay varios proveedores que pueden ofrecer repositorios. Gitlab y Bitbucket son algunas alternativas a Github.
Crear una cuenta de GitHub
Continúe y cree una cuenta de GitHub visitando el sitio web y siguiendo las instrucciones de la pantalla.

Creación Local
Después de crear y verificar su cuenta, querrá visitar la página de inicio. Se verá similar a lo que muestra la imagen.

De clic en el ícono de más
(+) de la esquina superior derecha.

Después de click en “New Repository”

Llene con la información correspondiente, y después de clic en “Create repository”

Debe ver una pantalla similar a esta

Nota
El atajo de teclado Ctrl+~ puede usarse para abrir una terminal en Visual Studio Code.
Ahora querrá abrir una ventana de PowerShell y navegar al directorio de su proyecto. Se puede encontrar un excelente tutorial sobre PowerShell aquí.. Consulte su motor de búsqueda sobre cómo abrir un terminal en sistemas operativos alternativos.

Si un directorio está vacío, hay que crear un archivo para que git tenga algo que rastrear. En el siguiente ejemplo de directorio vacío, creamos un archivo llamado README.md
con el contenido de # Example Repo
. Para los proyectos de robots FRC®, los siguientes comandos de Proyectos Existentes deben ser ejecutados en la raíz de un proyecto creado por el VS Code WPILib Project Creator. Más detalles sobre los distintos comandos se pueden encontrar en las secciones siguientes.
Nota
Reemplace la ruta de archivo "C:\Users\ExampleUser9007\Documents\Example Folder"
con la que desea crear el repositorio y reemplace la URL remota https://github.com/ExampleUser9007/ExampleRepo.git
con la URL del repositorio que creó en los pasos anteriores.
> cd "C:\Users\ExampleUser9007\Documents\Example Folder"
> git init
Initialized empty Git repository in C:/Users/ExampleUser9007/Documents/Example Folder/.git/
> echo "# ExampleRepo" >> README.md
> git add README.md
> git commit -m "First commit"
[main (root-commit) fafafa] First commit
1 file changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README.md
> git remote add origin https://github.com/ExampleUser9007/ExampleRepo.git
> git push -u origin main
> cd "C:\Users\ExampleUser9007\Documents\Example Folder"
> git init
Initialized empty Git repository in C:/Users/ExampleUser9007/Documents/Example Folder/.git/
> git add .
> git commit -m "First commit"
[main (root-commit) fafafa] First commit
1 file changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README.md
> git remote add origin https://github.com/ExampleUser9007/ExampleRepo.git
> git push -u origin main
Commits
Los repositorios están conformados principalmente por commits. Los commits son estados guardados o versiones de código.
En el ejemplo anterior, creamos un archivo llamado README.md. Abra ese archivo en su editor de texto favorito y edite algunas líneas. Después de jugar un poco con el archivo, simplemente guárdelo y ciérrelo. Navegue hasta PowerShell y escriba los siguientes comandos.
> git add README.md
> git commit -m "Adds a description to the repository"
[main bcbcbc] Adds a description to the repository
1 file changed, 2 insertions(+), 0 deletions(-)
> git push
Nota
Escribir buenos mensajes de commit es una pieza clave para un proyecto mantenible. Para una guía de cómo escribir mensajes de commit dar click aquí.
Git Pull
Nota
git fetch
puede ser utilizado cuando el usuario no desea que automáticamente se fusione con la rama en la que se está trabajando
Este commando recupera el historial o los commits del repositorio remoto. Cuando el remoto contiene el trabajo que usted no tiene, éste intentará fusionarlo automáticamente. Vea Fusionar.
Corra: git pull
Git Add
Este comando añade el/los archivo(s) seleccionado(s) a un commit. Para hacer commit cada archivo/carpeta que no esté excluido via gitignore.
Corra: git add FILENAME.txt donde FILENAME.txt
es el nombre y extensión del archivo a añadir a un commit. Corra: git add.
añadirá todo archivo inexcluido e inlocalizable cuando corra en la raíz del repositorio.
Git Commit
Este comando crea los commit y los guarda localmente. Eso guarda el estado y lo añade al historial del repositorio.
Corra: git commit -m "type message here"
Git Push
Suba (Push) sus cambios locales al repositorio remoto (Cloud)
Corra: git push
Ramas
Las ramas son similares a mundos paralelos para Git. Comienzan igual, y después pueden ramificarse en diferentes caminos. Considere que el flujo de control de Git luce similar a este.
En el ejemplo anterior, main se ramificó (o duplicó) en la rama Característica 1 y alguien revisó la rama, creando una copia local. Luego, alguien confirmó (o subió) sus cambios, fusionándolos en la rama Característica 1. Está «fusionando» los cambios de una rama con otra.
Crear una rama
Corra: git branch branch-name
donde branch-name es el nombre de la rama a crear. El nuevo historial de la rama se creará de la rama activa actual.
Acceder a una rama
Una vez que la rama está creada, tienes que entrar a la rama.
Corra: git checkout branch-name
donde branch-name es la rama que fue previamente creada.
Fusionar
En situaciones cuando se quiere copiar uno de los historiales de ramas dentro de otro, estos pueden ser fusionados. Una fusión es realizada llamando git merge branch-name
con branch-name siendo el nombre de la rama de la cual se fusionará. Se fusiona automáticamente en la rama activa actual.
Es común que un repositorio remoto que contenga trabajo (historial) que usted no tenga. Cada vez que git pull
se ejecute, intentará automáticamente fusionar esos commits. Esa fusión se parecerá a la del ejemplo de abajo.
Sin embargo, en el ejemplo anterior, ¿que pasaría si File 1 fuera modificado por las dos ramas FeatureA y FeatureB? Esto es llamado un conflicto de fusión. Un conflicto de fusión puede ser resuelto editando el archivo en conflicto. En el ejemplo, necesitaríamos editar File 1 para poder seguir el historial o los cambios que queramos. Después de que esto se ha realizado, simplemente agregue de nuevo, commit de nuevo y después publique sus cambios.
Resets
Algunas veces, el historial necesita ser reiniciado, o un commit necesita ser deshecho. Esto puede ser realizado de diferentes maneras.
Convirtiendo el Commit
Nota
No puede revertir una fusión, pues git no sabrá que rama u origen deberá escoger.
Para revertir el historial que lleva hacia la ejecución de un commit, corra git revert commit-id
. Los IDs de commits pueden ser mostrados usando el comando git log
.
Restaurar el Inicio
Advertencia
Restablecer el inicio a la fuerza, es un comando peligroso. Borra permanentemente todo el historial pasado el objetivo. ¡Ha sido advertido!
Corra: git reset --hard commit-id
.
Forks
Los forks pueden ser utilizados de manera similar a las ramas. Puede fusionar el upstream (repositorio original) con el origen (forked repositoy).
Clonación de un Repositorio Existente
En el caso de que un repositorio ya esté creado y almacenado en un control remoto, puede clonarlo usando
git clone https://github.com/myrepo.git
donde myrepo.git
se reemplaza con su repositorio de git. Si sigue esto, puede saltar a :ref:commits <docs/software/basic-programming/git-getting-started:Commits>`.
Actualizar un Fork
Agrege el upstream: git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git`
Confirme que se ha agregado a través de
git remote -v
Obtenga los cambios del upstream:
git fetch upstream
Fusione los cambios con el inicio:
git merge upstream/upstream-branch-name
Gitignore
Importante
Es extremadamente importante que los equipos no modifiquen el archivo .gitignore
que se incluye con su proyecto de robot. Esto puede provocar que la implementación sin conexión no funcione.
Un archivo .gitignore
se usa comúnmente como una lista de archivos para no confirmar automáticamente con git add
. Cualquier archivo o directorio listado en este archivo no se confirmará. Tampoco aparecerán con git status.
Información adicional puede ser encontrada aquí
Ocultar una Carpeta
Simplemente añada una nueva línea que contenga la carpeta a ocultar, con una diagonal al final
EJ: directory-to-exclude/
Ocultar un Archivo
Añada una nueva línea con el nombre del archivo a ocultar, incluyendo algún directorio pre-pendiente relativo a la raíz del repositorio.
EJ: directory/file-to-hide.txt
EJ: file-to-hide2.txt
Información adicional
Un tutorial mucho más a fondo puede ser encontrado en el sitio web official de git website.
Una guía para corregir los errores comunes puede ser encontrada en el repositorio de `reglas de vuelo<https://github.com/k88hudson/git-flight-rules/blob/master/README.md>`_ repository.