On Github davecarter / git-hangout
por David García / @d4vecarter
Se denomina "distribuido" porque cada miembro del equipo dispone de una copia completa del código.
Los miembros del equipo pueden enviarse código, recibirlo y desarrollar funcionalidades de forma conjunta y separada del servidor central.
$ xcode-select --installEs probable que necesitemos descargar las Command Line Tools for Xcode
Git está disponible para Windows, Mac, Linux y Solaris.
Indicamos a Git nuestra info de usuario
$ git config --global user.name "David G." $ git config --global user.email dave74@gmail.com $ git config --global core.editor nano
En un directorio vacío ejecutamos el siguiente comando:
$ > mkdir git-hangout $ > cd git-hangout $ > git init
Git init crea un directorio oculto .git con el siguiente contenido:
Git llevará un control exhaustivo sobre todos los cambios que vayamos haciendo.
$ touch README.mdEl comando UNIX touch nos crea un nuevo archivo. Edítalo y guarda los cambios.
Incluimos TODO lo que NO queramos incluir en nuestro repositorio.
$ touch .gitignorePodemos crear uno ad-hoc en: gitignore.io
Listado de archivos nuevos (untracked), borrados o editados
$ git statusRutas relativas a la raíz del repositorio.
El flujo de Git se distribuye en 3 estados locales y uno remoto
El primer nivel es nuestra carpeta de trabajo. Podemos añadir, quitar, editar archivos y Git sólo se encargará de controlar los archivos que han sido modificados:
Una vez creados, modificados, añadidos o borrados los archivos al working dir los pasamos al staging mediante:
$ git add nombre de archivo/os
o bien:
$ git add --all
todos los archivos
En el segundo nivel nuestros archivos están preparados para ser empaquetados. Podemos seguir trabajando y repetir el proceso tantas veces como necesitemos.
Cuando hemos completado un conjunto de cambios, los "empaquetamos" mediante la instrucción commit y los colocamos en el HEAD mediante:
$ git commit -m 'mensaje descriptivo'
Nuestro conjunto de cambios está listo para enviar al repositorio remoto. El HEAD es nuestra "bandeja de salida". Podemos seguir trabajando y crear más "commits".
Ahora vincularemos nuestro repo local con uno remoto en Github para poder trabajar en equipo:
Créate una cuenta en Github.comUna vez creado el repositorio remoto en Github lo "vinculamos" a nuestro repositorio local mediante:
$ git remote add origin https://github.com/user/repo.git
Una vez indicado a Git que tenemos un repositorio remoto podemos enviar el conjunto de cambios contenidos en nuestro HEAD mediante:
$ git push -u origin master
Por defecto Git denomina origin a nuestro repositorio remoto y crea una rama llamada master. Enviamos el contenido de HEAD mediante:
Sincronizar nuestro local con origin
Antes de enviar nuestros cambios tenemos que bajarnos la última versión de repositorio remoto
$ git pull origin masterobtenemos los últimos cambios de origin y los combinamos con la rama master
Cuando obtenemos archivos del repositorio remoto a nuestra copia local Git obtiene todos los archivos nuevos que se hayan añadido y elimina los que se hayan quitado.
Consulta el historial de "commits" realizados por los diferentes miembros del equipo mediante:
$ git log $ git log --oneline
Creamos una copia de un repositorio remoto existente
$ git clone https://github.com/user/repo.git
Almacena user/pass en texto plano
$ git config --global credential.helper osxkeychain // Mac OSX $ git config --global credential.helper wincred // WindowsMás info en Git Help
$ ssh-keygen -t rsa -b 4096 -C "dave74@gmail.com"Puedes añadir una clave de seguridad o dejarla en blanco.
$ ssh-add ~/.ssh/id_rsaPuedes añadir una clave de seguridad o dejarla en blanco.
$ pbcopy < ~/.ssh/id_rsa.pubPodemos abrirla con Sublime Text y copiar el contenido.
Una rama nos permite aislar una nueva funcionalidad en nuestro código que después podremos añadir a la versión principal.
Para crear una nueva rama:
$ git branch feature/sliderhome
Git procura combinar los cambios automáticamente*.
Si no reconoce qué parte del código ha de quedarse y cual eliminar, hemos de editarlo manualmente.
*Recursive strategyCuando Git no puede identificar qué cambios ha de mantener y cual eliminar lanzará el siguiente mensaje:
$ git merge iss53 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
Código sin conflicto <<<<<<< HEAD I love cats! ======= Dogs are better >>>>>>> Master (o SHA del commit) Código sin conflicto
Github.com
Aportar una mejora al software existente
Contribuir en un proyecto Open Source
Sólo disponible si tenemos permisos de escritura
No tenemos permisos de escritura