Veamos como crear un repositorio git para trabajar con nuestros archivos de código fuente, y las operaciones básicas de las que disponemos para interactuar con el repositorio.
Inicializar un repositorio
# Creamos un directorio y un archivo mkdir helloworld cd helloworld echo "Hello World" > README # Inicializamos el repositorio git init Initialized empty Git repository in /home/dave/helloworld/.git/
Añadir archivos al repositorio y realizar el primer commit
git add README git commit -d "First commit"
Enlazar con un repositorio remoto
Imaginaros ahora que queremos que nuestro repositorio local recien creado se comunique con un repositorio remoto. Definiremos para ello un remote, con lo cual podremos empezar a realizar comandos pull/fecth, y si tenemos permiso, también push.
git remote add origin git@gitlab.micronautas.com:testing.git git push -u origin master
Obtener un repositorio remoto
Normalmente no partimos de cero en nuestro repositorio, sino que ya existe (por ejemplo en github.com). Si quisiéramos obtener una copia local de ese repositorio remoto, estableciendo además automáticamente el remote a ese repositorio, utilizaremos el siguiente comando:
$ git clone git@github.com:tombatossals/git-puesto-en-practica.git Cloning into 'git-puesto-en-practica'... remote: Counting objects: 293, done. remote: Compressing objects: 100% (258/258), done. remote: Total 293 (delta 123), reused 197 (delta 27) Receiving objects: 100% (293/293), 3.13 MiB | 234 KiB/s, done. Resolving deltas: 100% (123/123), done. $ cd git-puesto-en-practica/ $ git branch * master $ git remote -v origin git@github.com:tombatossals/git-puesto-en-practica.git (fetch) origin git@github.com:tombatossals/git-puesto-en-practica.git (push)
Permisos de acceso a un repositorio remoto
Los proyectos de software libre suelen tener permisos de lectura sin autenticación (p.e. en github), pero para obtener permisos de escritura deberemos autenticarnos de alguna manera. Primero que nada, deberemos configurar git para que envíe nues
$ git config --global user.name "Peter Pan" $ git config --global user.email "peter.pan@nuncajamas.com"
Listando los últimos cambios del repositorio
Listemos ahora los últimos cambios que se han producido en el repositorio, es decir, los últimos commits que han realizado los desarrolladores del repositorio:
$ git log --oneline fbcf1a6 Optimized for ipad 9c0a361 Some minor changes 7d8ccd7 Renamed project 81716a8 Some cosmetic changes, and finished the second presentation. fde35e7 Lot of changes e7286e0 Working as team slides already finished b0c3a69 More slides ...
Obtener los últimos cambios del repositorio remoto
Veamos ahora cómo obtener todos los últimos cambios del repositorio remoto haciendo un fetch.
$ git branch -a * master remotes/origin/master $ git fetch remote: Counting objects: 13, done. remote: Compressing objects: 100% (5/5), done. remote: Total 8 (delta 3), reused 8 (delta 3) Unpacking objects: 100% (8/8), done. From github.com:tombatossals/unimajors 0486878..d0f88cc master -> origin/master $ git diff origin/master diff --git a/2011-iim/sesion01/images/alineacion.jpg b/2011-iim/sesion01/images/alineacion.jpg deleted file mode 100644 index 93d68ae..0000000 Binary files a/2011-iim/sesion01/images/alineacion.jpg and /dev/null differ diff --git a/2011-iim/sesion01/images/espaciado.jpg b/2011-iim/sesion01/images/espaciado.jpg deleted file mode 100644 index c902e4a..0000000 Binary files a/2011-iim/sesion01/images/espaciado.jpg and /dev/null differ diff --git a/2011-iim/sesion01/index.html b/2011-iim/sesion01/index.html index 5210ff5..b1d02f8 100755 --- a/2011-iim/sesion01/index.html +++ b/2011-iim/sesion01/index.html @@ -287,14 +287,14 @@ <article class='fill'> <h3></h3> + <img alt="Tipo de fuente" src="images/font.jpg" /> </article> <article> $ git merge origin/master Updating 0486878..d0f88cc Fast-forward 2011-iim/sesion01/images/alineacion.jpg | Bin 0 -> 138057 bytes 2011-iim/sesion01/images/espaciado.jpg | Bin 0 -> 86800 bytes 2011-iim/sesion01/index.html | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 2011-iim/sesion01/images/alineacion.jpg create mode 100644 2011-iim/sesion01/images/espaciado.jpg
Examinar el historial de cambios de un archivo
Podemos examinar todo el historial de cambios de un archivo mediante este comando:
git log --follow -p <archivo>
Crear una nueva rama en el repositorio remoto
git push origin origin:refs/heads/new-feature
Diferencias entre 2 ramas de nuestro proyecto
Para obtener las diferencias de 2 ramas de nuestro proyecto podemos utilizar este comando:
git diff master..experiment
Manejar etiquetas (tags)
Podemos gestionar etiquetas en nuestros proyectos de una manera muy sencilla, lo que nos ayudará a registrar de manera cómodo e intuitiva los puntos vitales de la evolución de nuestro proyecto.
Listar tags:git tagCrear un nuevo tag en el commit actual:
git tag -a v1.4 -m 'Versión 1.4'Crear un nuevo tag en un commit pasado:
$ git tag -a v1.2 9fceb02
Crear una rama local en el repositorio remoto:
Es un comando un tanto extraño, si tenemos una rama local llamada "desarrollo" podemos enviarla al repositorio remoto origingit push origin origin:refs/heads/desarrollo
Averiguar quién hizo qué cosa en un archivo: git blame.
$ git blame site.yaml 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 1) handlers: 7d8ccd71 (David Rubert 2011-12-22 19:43:37 +0100 2) - url: '/primeros-pasos/' 7d8ccd71 (David Rubert 2011-12-22 19:43:37 +0100 3) static_files: 'primeros-pasos/index.html' 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 4) upload: '.*' 7d8ccd71 (David Rubert 2011-12-22 19:43:37 +0100 5) - url: '/trabajando-en-equipo/' 7d8ccd71 (David Rubert 2011-12-22 19:43:37 +0100 6) static_files: 'trabajando-en-equipo/index.html' e7286e0d (David Rubert 2011-12-18 18:04:07 +0100 7) upload: '.*' e6d6195b (David Rubert 2012-01-08 22:12:17 +0100 8) - url: '/autenticacion-y-hosting/' e6d6195b (David Rubert 2012-01-08 22:12:17 +0100 9) static_files: 'autenticacion-y-hosting/index.html' e6d6195b (David Rubert 2012-01-08 22:12:17 +0100 10) upload: '.*' 6f0dd636 (David Rubert 2012-01-12 23:13:47 +0100 11) - url: '/ejemplos/' 6f0dd636 (David Rubert 2012-01-12 23:13:47 +0100 12) static_files: 'ejemplos/index.html' fde35e7f (David Rubert 2011-12-18 23:51:40 +0100 13) upload: '.*' 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 14) - url: '/' 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 15) static_files: 'index.html' 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 16) upload: '.*' 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 17) - url: '/' 9e34c40d (David Rubert 2011-12-09 09:25:04 +0100 18) static_dir: '/'
Servidor web con instaweb
Podemos arrancar un servidor web que nos permita navegar el contenido de nuestro repositorio de una manera más amigable, para ello deberemos tener instalado lighttpd o cualquier otro servidor web compatible y ejecutar:
git instaweb
Para que no nos aparezca el mensaje de Unnamed repository:
echo "Mi proyecto" > .git/description
Veremos algo así:
Para pararlo:
git instaweb --stop