Resumen
$$$
-
Introducir la necesidad del control de versiones
-
Aprender a usar las operaciones y flujos básicos de Git en repositorios locales y remotos
-
Conocer las principales plataformas Git online actuales
-
Aprender a trabajar de forma colaborativa con Git
1. Introducción
1.1. Qué es Git
Git is a distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Sitio oficial (Descargas, documentación, …): |
2. Operaciones básicas con repositorios locales
2.1. Configuración local
Cada commit irá firmado con nuestro email y nombre.
$ git config --global user.email "mtorres@ual.es"
$ git config --global user.name "Manuel Torres Gil"
Configuración almacenada en ~/.gitconfig
2.2. git init
Crea un repo local en la carpeta de proyecto
Creamos carpeta para pruebas denominada holagit
y entramos a ella.
$ git init
Initialized empty Git repository in C:/Users/Administrator/holagit/.git/
2.4. Crear un archivo de ejemplo
README.md
# Hola Git
Este es mi primer archivo para control de versiones.
2.5. git status
Muestra las diferencias entre el Working dir, la Staging Area y el repo.
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)
2.6. git add
Añade desde Working dir a Staging area (index)
La sintaxis es git add files
Algunos ejemplos:
$ git add README.md
$ git add .
$ git add --all
Vemos los cambios con git status
para ver cómo ha pasado a la Staging area y está listo para pasarlo al repositorio.
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
2.7. git commit
Añade desde Staging Area al repo
La sintaxis es git commit -m commitText
$ git commit -m "README.md creado"
[master (root-commit) 1f86692] README.md creado
1 file changed, 3 insertions(+)
create mode 100644 README.md
Podemos ver el estado con git status
$ git status
On branch master
nothing to commit, working tree clean
2.8. git blame
Quién ha cambiado un archivo y cuándo
$ git blame README.md
^1f86692 (Manuel Torres Gil 2018-11-27 17:39:47 +0000 1) # Hola Git
^1f86692 (Manuel Torres Gil 2018-11-27 17:39:47 +0000 2)
^1f86692 (Manuel Torres Gil 2018-11-27 17:39:47 +0000 3) Este es mi primer archivo para control de versiones.
2.9. git log
Muestra los comentarios comenzando por el más reciente.
$ git log
$ git log --oneline (1)
1 | Versión compacta |
Más información sobre la presentación de logs en: https://stackoverflow.com/questions/1441010/the-shortest-possible-output-from-git-log-containing-author-and-date |
$ git log (1)
commit 1f8669231adc380d96261f91495018ba2791b0b3 (HEAD -> master)
Author: Manuel Torres Gil <mtorres@ual.es>
Date: Tue Nov 27 17:39:47 2018 +0000
README.md creado
$ git log --oneline (2)
1f86692 (HEAD -> master) README.md creado
1 | Versión normal |
2 | Versión compacta |
2.10. Ejercicio
-
Añadir una línea nueva al archivo
README.md
con el texto que aparece a continuación# Aprende latín Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
Añadir los cambios a la Staging area
-
Añadir los cambios al repositorio con el mensaje
Nuevo epígrafe
-
Mostrar el log
-
Obtener el estado del repositorio
Se debería obtener algo similar a lo siguiente
$ git log (1)
commit 706c9ab817425ea714b758cbcf7934dcf0a6ecb4 (HEAD -> master)
Author: Manuel Torres Gil <mtorres@ual.es>
Date: Tue Nov 27 17:55:13 2018 +0000
Nuevo epígrafe (2)
commit 1f8669231adc380d96261f91495018ba2791b0b3
Author: Manuel Torres Gil <mtorres@ual.es>
Date: Tue Nov 27 17:39:47 2018 +0000
README.md creado
$ git status (3)
On branch master
nothing to commit, working tree clean
1 | Mostrando los cambios |
2 | El nuevo commit aparece el primero |
3 | Mostrando el estado |
3. Operaciones básicas con repositorios remotos
3.1. Configuración de claves SSH en gitlabdoc.ual.es
Las claves SSH evitan introducir login y pass en cada operación de subida al repositorio remoto (push
)
En GitLab, cada usuario tiene que modificar sus Settings
en Profile Settings → SSK Keys → Add SSH Key
:
3.2. git clone
Clona un repo remoto (bare) en nuestro equipo
Si el repositorio clonado es nuestro podremos propagar posteriormente los cambios del repositorio local al repositorio remoto. En cambio, si el repositorio no es nuestro sólo podremos subir cambios al repositorio remoto si nos autorizan a ello. |
3.3. Ejemplo
-
Crear repo
prueba
en GitLab -
Clonar repo remoto en la carpeta del usuario que estés usando
git clone URL
usando el protocolo SSH.Actualmente, hay un detalle sobre la identificación del certificado que usa
gitlabdoc.ual.es
al clonar con el protocolo mediante HTTPS. Si recibes este mensaje de error:server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
puedes salir del paso desactivando la verificación del certificado con este comando:
$ git config --global http.sslverify false
-
Entrar al directorio del nuevo proyecto y crear archivo
README.md
con el texto que aparece a continuación# Git Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
-
Añadir los cambios a la staging area
-
Añadir los cambios al repositorio con el mensaje
Commit inicial
Al mostrar los cambios de aparecer algo similar a esto:
$ git log
commit 6aabc98f79034f3ea505b33bead4fa807e5ee59d (HEAD -> master)
Author: Manuel Torres Gil <mtorres@ual.es>
Date: Tue Nov 27 18:14:20 2018 +0000
Commit inicial
3.4. git push
Envia los cambios del repositorio local a un repo remoto
git push remoto ramaLocal
En nuestro ejemplo haríamos git push origin master
|
Tras hacer el push
se debe obtener algo similar a esto:
$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 337 bytes | 168.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitlabdoc.ual.es:mtorres/prueba.git (1)
* [new branch] master -> master (2)
1 | Repositorio remoto al que se suben los cambios (origin ). |
2 | Crea la rama master en el repositorio remoto ya que antes no estaba. |
En el archivo Si tenemos dos repositorios remotos con los que sincronizar, añadiríamos una segunda URL en la sección de |
4. Escenario colaborativo basado en control de acceso
El propietario del proyecto añade nuevos miembros configurando sus privilegios.
En GitLab, en la propiedades del proyecto añadimos miembros al proyecto indicando sus privilegios (guest, reporter, developer, master) en función de las operaciones permitidas.
A continuación, se especifican las ramas en las que están autorizados a subir cambios (Desproteger ramas).
En GitLab, en las propiedades del proyecto seleccionamos Settings → Protected Branches
Por último, se selecciona la rama y se indica que los desarrolladores pueden realizar push
6. Recursos de interés
-
GUI
-
Para Windows y Mac, SourceTree SourceTree (Atlassian) es muy buena opción
-
Para Windows, Linux y Mac, GitEye (Collabnet) también es una opción a considerar.
-
-
Tutorial: Git Immersion