Continuamos con la Instalación y uso básico de Git…
GIT
GIT es un sistema de control de versiones distribuido, bastante diferente a SVN o CVS
En local no se almacena únicamente la copia de trabajo con la ultima versión del software si no que tenemos una copia completa del repositorio.
Esto significa que no hay que «ir» al servidor central para las operaciones contra el repositorio, lo cual incrementa enormemente acciones como consultar la historia de un archivo y agiliza todo el proceso con el repositorio. Prácticamente se puede realizar todo el trabajo típico contra un repositorio sin tener que estar conectado al repositorio central.
Además, guarda los datos como snapshots en vez de como diferencias respecto de una versión base
Usando GIT
Hay documentación exhaustiva y muy buena en la web sobre GIT. Solo por citar algún sitio, tenemos
- Manual de referencia: http://git-scm.com/docs
- Libro oficial: http://git-scm.com/book
- Sitio para probar GIT de forma interactiva: http://try.github.com/levels/1/challenges/1 (Para realizar ciertas acciones, nos pide crear una cuenta en GIThub).
Existen varios sitios que nos pueden alojar nuestros repositorios, si no queremos/podemos tener uno propio. Entre los más conocidos están estos dos:
GIThub, que nos permite crear de forma gratuita repositorios únicamente públicos (aunque ilimitados en número y colaboradores)
Bitbucket, que permite repositorios privados ilimitados pero con un máximo de 5 usuarios en su plan gratuito.
Empecemos configurándolo. GIT guarda la configuración en tres niveles:
Usuario
Con la opción –global podemos almacenar valores para el usuario
Usa el archivo ~/.GITconfig
Repositorio
en .GIT/config almacena valores para el repositorio en el que se crea.
Para todos los repositorios
en /etc/GITconfig se guarda la configuración para todos los repositorios, pasando la opción –system
Una de las primeras cosas a configurar es nuestro usuario y el proxy, si estamos detrás de uno.
$ GIT config --global user.name "John Doe" $ GIT config --global user.email johndoe@example.com $ GIT config --global http.proxy http.proxy=http://usuario:contraseña@nombreProxy: puerto
O el editor a usar para los comentarios y otros mensajes…
$ GIT config --global core.editor emacs
O la herramienta para comparar diferencias a la hora de resolver conflictos…
$ GIT config --global merge.tool vimdiff
Para ver los valores configurados, solo hay que hacer: GIT config –list
Algunas opciones interesantes son estas
user.name=sbgermanm
user.email=sbgermanm@gmail.com
http.proxy=http://usuario:contraseña@nombreProxy: puerto
Para cerrar el artículo, voy a poner algunos comandos básicos, en una secuencia más o menos posible.
En el servidor
En el servidor, creamos un repositorio central creamos un directorio para nuestros proyectos
$ mkdir projects $ cd projects/
Dentro de él, un directorio para los repositorios que creemos
~/projects$ mkdir repos ~/projects$ cd repos
Crearemos un directorio para el primero de esos repositorios
~/projects/repos$ mkdir project.GIT ~/projects/repos$ cd project.GIT/
Ahora creamos un repositorio GIT
~/projects/repos/project.GIT$ GIT init --bare
En local
Ahora que ya tenemos el repositorio central, creamos una copia local del repositorio (suponiendo que ya está configurado el SSH)
$ GIT clone usuario@servidor:projects/repos/project.GIT (1)
Como está vacío, nos lanzará una advertencia bastante lógica
warning: You appear to have cloned an empty repository.
También podemos hacer un repositorio vacio (2)
$ GIT init
Y despues configurar el remoto
$ GIT remote add origin user@server:~/repos/project.GIT/
o también
$GIT config remote.origin.url "usuario@servidor:/projects/repos/project.GIT"
(es posible clonar un repositorio existente como está en (1) o podemos crear uno nuevo en nuestra maquina y configurar el remoto como en (2), es exactamente lo mismo)
Creamos un archivito con cualquier cosa
$ vi readme.txt
Ahora, vamos a añadir el archivo al indice repositorio local
$ GIT add .
Si ejecutamos «GIT status» el archivo readme.txt aparecerá como «staged»
Lo siguiente seria subir esos cambios al repositorio local…
$ GIT commit -m "primer archivo"
Y así podríamos seguir trabajando en local, tanto nosotros como cualquiera que tenga acceso a la ruta donde lo tenemos.
Cuando queramos subir al repositorio «central», haremos lo siguiente
$ GIT push origin master
Creación de ramas y merges
Para crear una nueva rama llamada “experimento»,
$ GIT branch experimento
Para obtener la lista de todas las ramas existentes
$ GIT branch
experimento
* master
El asterisco marca nuestra rama actual.
Para cambiarnos a la rama experimento:
$ GIT checkout experimento
[Editamos el archivo y lo subirlo]
$ GIT commit -a
Volvemos a la rama principal.
$ GIT checkout master
[Editamos el archivo]
$ GIT commit -a $ GIT merge experimental
Si no hay conflictos en los cambio, ya está. En caso contrario podremos ver las diferencias:
$ GIT diff
Si hay conflictos, se mostrará marcas en la izquierda de las líneas problemáticas y GIT commit no funcionaria, diría algo como esto: file.txt: needs merge
$GIT status
Con GIT status podemos listar los archivos no mergeados. Los archivox con conflictos tendrán algo como esto:
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
Solo tenemos que editar los archivos para resolver los conflictos y entonces:
$ GIT add file.txt $ GIT commit
Ahora subimos el resultado del merge
$GIT commit -a
Una vez finalizado el trabajo en la rama “experimento”, podemos borrarla:
$ GIT branch -d experimento
Si ni siquiera queremos mergear la rama y solo queremos borrarla
$ GIT branch -D prueba_basura
Y esto es todo. Ha quedado un poco extenso, pero creo que son las instrucciones mínimas para lanzar desde cero nuestro propio repositorio.
Hola,
Me ha gustado mucho el post, ¡seguiré el blog a partir de ahora!
Muchas gracias 🙂
en este paso —> $ GIT clone usuario@servidor:projects/repos/project.GIT (1)
que debo poner en donde dice:: «usuario» y en «servidor»
Hola Julián, el usuario debe ser el que uses para acceder vía SSH, y el servidor la IP o nombre del servidor.
Por ejemplo, si monto mi servidor con la IP: 192.168.60.1, y uso un usuario: desarrollador, deberías poner: desarrollador@192.168.60.1:projects/repos/project.GIT
Como puedo conectar mi ssh con bitbucket? haaa
como puedo conectar mi ssh con mi bitbucket?
Para conectar vía SSH con tu hosting, necesitas que tu proveedor te de acceso mediante un usuario, una password y una url a la que conectarte.