Beruflich Dokumente
Kultur Dokumente
ndice de contenido
Introduccin..........................................................................................................................................3 Instalacin en Mac OS.....................................................................................................................3 Descripcin del tema...................................................................................................................3 Instalacin Windows........................................................................................................................3 Descripcin del tema...................................................................................................................3 Versionando tu contenido..................................................................................................................... 5 Creacin de un repositorio...............................................................................................................5 Descripcin del tema...................................................................................................................5 Ignorando archivos no deseados...................................................................................................... Descripcin del tema................................................................................................................... !l wor"#low..................................................................................................................................... $ Descripcin del tema...................................................................................................................$ %dd & Commit................................................................................................................................. ' Descripcin del tema...................................................................................................................' (evisando el estado de nuestra app.............................................................................................) (epositorios remotos..........................................................................................................................*3 Integracin con +it,u-................................................................................................................. *3 Descripcin del tema.................................................................................................................*3 +it,u-.......................................................................................................................................*3 Veri#icar si &a tenemos llaves SS,........................................................................................... *3 +enerar las llaves SS,..............................................................................................................*. %gregar la llave p/-lica a +it,u-............................................................................................ *. 0ro-ar 1ue #uncione.................................................................................................................. *. Clonando repositorios....................................................................................................................*5 Descripcin del tema.................................................................................................................*5 2sando varios repositorios remotos...............................................................................................* Descripcin del tema.................................................................................................................* 3istar los repositorios remotos..................................................................................................* 2sando 4it4uc"et..................................................................................................................... *$ 0ush & 0ull.....................................................................................................................................*' Descripcin del tema.................................................................................................................*' 0u-licando nuestros cam-ios....................................................................................................*' (eci-iendo nuevos cam-ios......................................................................................................*) (esolviendo con#lictos...................................................................................................................*) Descripcin del tema.................................................................................................................*)
INTRODUCCIN
Instalacin En Mac OS
!l v5deo est6 en la carpeta de V5deos.
http9::git;scm.com:downloads
< git con#ig ;;glo-al user.name =Cr&s#el Villa= < git con#ig ;;glo-al user.email cr&s#el>e?ample.com
Instalacin Windows
!l v5deo est6 en la carpeta de V5deos.
VERSIONANDO TU CONTENIDO
Creacin De Un Repositorio
!l v5deo est6 en la carpeta v5deos.
Crear un repositorio en +I7 es -astante sencillo8 -asta con eAecutar el siguiente comando dentro del directorio ra5@ en nuestro pro&ecto.
%l eAecutar el comando anterior se crear6 un directorio oculto llamado .git en el #older ra5@ de nuestro pro&ecto. !ste #older contiene toda la in#ormacin necesaria para 1ue +I7 pueda llevar un historial del avance de nuestro pro&ecto. +I7 #unciona de manera local8 es decir 1ue a di#erencia de otros sistemas de versionamiento Ccomo CVS o SVND8 no necesitamos tener un servidor central donde estemos sincroni@ando nuestros cam-ios. 7odo #unciona de manera local8 eso hace 1ue +I7 sea -astante r6pido al reali@ar ciertas operaciones donde SNV o CVS son -astante lentos. Ea 1ue +I7 #unciona de manera local es una estupenda opcin para pro&ectos donde no es necesario tra-aAar con un e1uipo de personas8 donde simplemente 1ueremos llevar un control de nuestros avances & usar todo el potencial de +I7. %un1ue cuando tra-aAamos en e1uipo es cuando +I7 realmente so-resale. Si -ien es cierto 1ue +I7 #unciona de manera local8 no signi#ica 1ue no podamos sincroni@ar nuestros cam-ios con alg/n otro servidor remoto. Mas adelante en este curso veremos como podemos agregar uno o m6s repositorios remotos & sincroni@ar nuestros cam-ios8 esto es per#ecto 5
Si el archivo no e?iste lo crea & le agrega el te?to 1ue le indicamos8 si &a e?iste simplemente agrega la l5nea hasta el #inal conservando el contenido e?istente. 7am-iGn puedes usar tu editor #avorito8 realmente no es necesario hacerlo todo desde la linea de comandos. Ea 1ue estamos ignorando el archivo de con#iguracin8 ser5a -uena idea versionar un eAemplo para 1ue otros desarrolladores lo puedan tomar & modi#icar para usarlo en su propio sistema.
Ignorando archivos por su e?tensin !s posi-le usar comodines a la hora de de#inir los archivos a ignorar8 por eAemplo si 1uisiGramos ignorar los logs8 lo har5amos de la siguiente manera.
:log:H.log
!l asterisco CHD denota 1ue cual1uier pala-ra puede ir ah58 esta regla ignorar6 todos los archivos
Versionando tu contenido 1ue terminen con .log & estGn dentro del #older log.
El Wor!"low
!l v5deo est6 en la carpeta V5deos.
!stos tres estados nos llevan a visuali@ar tres secciones #undamentales en +I78 el wor!ing director$8 staging area & el %I& director$ C%lgunos tam-iGn le llaman 'EADD.
Estados en GIT !l Directorio de tra-aAo Cwor!ing director$D es un simple chec!o(t de alguna versin del pro&ecto. !stos archivos son sacados de la -ase de datos 1ue se encuentra en el %I& Director$ & puestos a disposicin nuestra para poder modi#icarlos & tra-aAar con ellos.
+I7 en el mundo real !l Staging area no es otra cosa m6s 1ue un simple archivo 1ue contiene la in#ormacin de los archivos 1ue ser6n aBadidos al %I& Director$ en el siguiente commit. %lgunas personas tam-iGn le llaman inde)8 pero es m6s com/n llamarle staging. !l %I& Director$ es donde se guardan los o-Aetos & la metadata de nuestro pro&ecto8 esta es la parte m6s importante de +I78 esto es lo 1ue se copia cuando clonamos alg/n repositorio remoto. !n resumGn8 un wor"#low com/n & corriente ser5a de la siguiente manera9 *. Modi#icamos archivos en nuestro wor!ing director$. I. %gregamos los archivos 1ue modi#icamos al Stage. 3. ,acemos un commit para agregar nuestros archivos al %I& director$ & guardarlos de manera permanente.
Add * Co##it
!l v5deo se encuentra en la carpeta V5deos.
2na ve@ 1ue se encuentra en el staging necesitamos meterlo al +I7 repositor& usando un commit.
!l par6metro +# nos sirve para deAar un comentario so-re los cam-ios 1ue hemos reali@ado en los archivos 1ue estamos versionando. !s de suma importancia deAar un comentario descriptivo &a 1ue m6s adelante podemos mirar el log de commits. Con el comando anterior hemos versionado el .gitignore8 pero cuando generamos la aplicacin rails se generaron varios archivos de con#iguracin & #olders donde escri-iremos nuestro cdigo. Ea sa-emos como versionar archivo por archivo pero tam-iGn podemos agregar varios archivos al stage de la siguiente manera.
'
Con el comando anterior hemos agregado todos los archivos 1ue se encuentran dentro del #older app. 0ero todav5a tenemos otros #olders m6s 1ue necesitamos agregar al stage8 -ien podemos agregarlos uno por uno pero tam-iGn podemos agregar todos al mismo tiempo de la siguiente manera.
<git add .
%l utili@ar el punto estamos indicando 1ue se agreguen todos los archivos nuevos o modi#icados 1ue tenemos en el directorio actual8 en este caso estamos en el directorio rai@ de nuestra aplicacin rails8 por lo tanto se agregar6n a-solutamente todos los archivos. Ea tenemos todos nuestros archivos en stage8 ahora solo #alta hacer el commit para #inalmente versionarlos.
Con eso ha-remos versionado nuestro pro&ecto & estamos listo para iniciar a tra-aAar estando seguros de 1ue si algo sale mal podremos simplemente regresar a la versin anterior & listo.
Generando un modelo Como se puede o-servar en la imagen anterior se han creado algunos archivos8 la migracin8 el modelo & las prue-as unitarias. !so signi#ica 1ue ha& nuevos archivos en el wor!ing director$. Solo para asegurarnos de eso podemos revisar el status de nuestro sistema de versiones de la siguiente manera.
!l comando anterior nos permitir6 sa-er cuantos archivos tenemos en el wor"ing director& & en stage.
*K
Versionando tu contenido
Revisando el status Como se puede ver en la imagen anterior los cuatro archivos 1ue se generaron como (ntrac!ed8 esto signi#ica 1ue no est6n versionados. 0ara versionarlos hacemos el proceso de add:commit 1ue &a conocemos.
Con el comando anterior solo he agregado al stage la migracin8 si volvemos a revisar el status podremos ver 1ue ha& un archivo en stage.
**
Revisando el status Como puedes o-servar ahora +I7 nos muestra el stage Cen color verdeD & el wor"ing director& Cen color roAoD. !so signi#ica 1ue solo tenemos un archivo listo para versionar. 0or /ltimo vamos a agregar el resto de los archivos al stage para luego hacer el commit de todos al mismo tiempo.
Si hacemos nuevamente un git stat(s veremos 1ue &a no tenemos ning/n archivo pendiente en stage o en el wor"ing director&.
*I
RE"OSITORIOS REMOTOS
Integracin Con %it'(,
Descripcin Del Tema
,asta este momento &a sa-emos como versionar nuestra aplicacin usando +I78 el /nico inconveniente podr5a ser 1ue hemos estado tra-aAando de manera local & todos nuestros cam-ios /nicamente e?isten en nuestra propia m61uina. !n temas anteriores hemos aprendido 1ue +I7 no tiene un servidor centrali@ado8 sino 1ue todo esta en local. %hora -ien8 podemos crear una copia e)acta de nuestro repositorio & ponerla en alg/n servidor remoto8 +I7 nos permitir6 sincroni@arlos de una manera sencilla8 as5 tendremos dos repositorios & si lleg6ramos a perder el 1ue tenemos en local podr5amos clonar el 1ue tenemos en la otra m61uina remota. De la misma manera8 si por alguna ra@n perdemos el repositorio 1ue tenemos en el servidor remoto siempre podemos clonar nuestro repositorio local & ponerlo de nuevo el alg/n otro servidor remoto.
Gi #!$
,o& en d5a +it,u- es el proveedor de hosting m6s popular para pro&ectos utili@ando +I7 como control de versiones. +it,u- nos permite pu-licar nuestro cdigo #uente p/-licamente8 pero tam-iGn podemos crear repositorios privados. +it,u- nos proporciona una serie de herramientas 1ue podemos usar para #acilitar el desarrollo & el tra-aAo cola-orativo. Vamos a ver como integrar +it,u- al actual pro&ecto so-re el 1ue venimos tra-aAando8 por ahora slo vamos a con#igurar las llaves parar poder conectarnos via SS, a los servidores de +it,u- para poder enviar & reci-ir cdigo de manera segura. 3os pasos son los siguientes *. 0rimeramente es necesario crear una cuenta en +it,u-. I. Veri#icar si tenemos llaves e?istentes en nuestro sistema 3. +enerar las llaves para nuestra m61uina .. %gregar la llave p/-lica a +it,u5. 0ro-ar 1ue #uncione
*3
+I7 en el mundo real < cd L:.ssh < ls 3ists the #iles in &our .ssh director&
Si no ha& a-solutamente nada es necesario generar unas8 si por el contrario &a e?iste el archivo id-rsa.p(, o id-dsa.p(, entonces podemos utili@ar esas llaves & no es necesario generar nuevas.
Inmediatamente te pedir6 el nom-re del archivo en donde se guardar6 la llave8 para este eAemplo usaremos el nom-re por de#ault8 por lo tanto -asta con presionar enter. 3o siguiente 1ue te pedir6 ser6 un passphrase o una contraseBa8 a1u5 puedes introducir lo 1ue gustes8 esta contraseBa es para las llaves.
Si es la primera ve@ 1ue nos conectamos nos aparecer6 un warning como el siguiente.
*.
(epositorios remotos 7he authenticit& o# host Jgithu-.com CIK$.)$.II$.I3)DJ canJt -e esta-lished. (S% "e& #ingerprint is * 9I$9ac9a59$ 9I'9Id93 9 39*-95 9.d9e-9d#9a 9.'. %re &ou sure &ou want to continue connecting C&es:noDO
Simplemente escri-imos &es & si todo sali -ien de-er5amos ver el siguiente mensaAe en la consola.
,i cr&s#elP EouJve success#ull& authenticated8 -ut +it,u- does not provide shell access.
+ithu- no nos da acceso de shell a sus servidores8 pero al ver ese mensaAe sa-remos 1ue hemos con#igurado correctamente nuestras llaves & estamos listos para enviar & reci-ir cdigo.
Clonando Repositorios
Descripcin Del Tema
Ea hemos visto como agregar la llave pu-lica a +it,u-8 en este tema veremos como podemos clonar o copiar un repositorio aloAado en +it,u- a nuestra m61uina. !n temas anteriores hemos visto como iniciali@ar un repositorio desde cero para comen@ar a versionar nuestro pro&ecto8 pero tam-iGn podemos continuar tra-aAando en un repositorio &a e?istente8 para eso simplemente clonaremos un repositorio8 en este caso desde +it,u-8 pero podr5a ser de cual1uier otro servicio al 1ue tengamos acceso o inclusive alg/n otro repositorio 1ue tengamos en local. 0ara reali@ar la clonacin -asta con eAecutar el siguiente comando en la terminal.
!l comando git clone nos permite crear una copia e?acta de un repositorio8 en este caso estamos clonando un repositorio v5a SS, 1ue se encuentra en git.gith(,.co#/cr$s"el0accessing+ca#era.git8 esa direccin la sacamos directamente de +it,u-. Si no hemos con#igurado nuestras llaves no tendremos acceso al repositorio v5a SS,8 pero tam-iGn podemos usar ,770S para en trans#erencia de archivos8 +it,u- nos provee tam-iGn una direccin ,770S.
*5
+I7 en el mundo real Como se puede o-servar es el mismo comando8 lo /nico 1ue ha cam-iado es el par6metro donde indicamos el repositorio 1ue deseamos clonar. 2na ve@ 1ue se ha descargado el pro&ecto podemos comen@ar a tra-aAar haciendo los %DD & COMMI7S necesarios como lo hemos visto en los temas anteriores. !n el siguiente tema veremos como podemos tener varios repositorios remotos8 usaremos 4it-uc"et para demostrar como tener el mismo repositorio aloAado en dos servicios di#erentes.
Veremos inmediatamente un listado de todos los repositorios remotos 1ue tenemos agregados en nuestro pro&ecto8 para el eAemplo 1ue estamos haciendo solo nos de-e aparecer uno8 1ue por de#ault se llama origin & apunta a +it,u-.
origin origin
Si tuviGramos alg/n otro repositorio remoto lo podr5amos ver en este listado8 por el momento solo tenemos uno. 7ener varios repositorios remotos es mu& /til para hacer deplo&s a di#erentes am-ientes8 por eAemplo podr5amos deplo&ar a Q% o 0roduccin usando +I78 entonces tendr5amos dos repositorios remotos. 0ersonalmente maneAo 3 repositorios en mis pro&ectos9 * !l primero para llevar mi cdigo de desarrollo8 a1u5 vo& agregando -ranches &
(epositorios remotos desarrollando la nueva #uncionalidad. !l segundo le llamo =staging=8 & es donde prue-o la nueva #uncionalidad 1ue he implementado antes de su-irla a produccin & la idea es 1ue el am-iente sea e?actamente igual al de produccin. !l tercer repositorio es el de produccin8 una ve@ 1ue pro-e mis cam-ios en staging puedo aplicarlos con con#ian@a a produccin.
Usando /i /!c)e
Vamos a crear un repositorio en 4it-uc"et donde aloAaremos el cdigo 1ue tenemos & as5 demostrar como maneAar dos repositorios remotos. 0ara poder crear un repositorio en 4it4uc"et es necesario registrarse su sitio8 lo siguiente es con#igurar las llaves para poder enviar & reci-ir cdigo v5a SS,. 0ara con#igurar las llaves es mu& semeAante a como lo hicimos en +it,u-8 ahora no es necesario generar una llave nueva &a 1ue podemos usar la misma 1ue &a tenemos8 si tienes dudas en como con#igurar las llaves te recomiendo leer la documentacin. 2na ve@ 1ue hemos con#igurado las llaves vamos a crear un repositorio vac5o en 4it4uc"et donde su-iremos el cdigo 1ue &a tenemos actualmente. Simplemente presionar el -otn =Create=8 de#inir el nom-re del repositorio & listo8 el repositorio estar6 creado en 4it-uc"et8 pero completamente vac5o. 0ara agregar un nuevo repositorio en nuestro pro&ecto usamos el comando re#ote add de la siguiente manera.
Como primer par6metro de#inimos el nom-re 1ue le daremos para re#erirnos a este cuando 1uerramos sincroni@ar. !l segundo par6metro es la 2(3 donde esta aloAado el nuevo repositorio8 en este caso usamos la 2(3 1ue -it-uc"et nos genero. 0ara veri#icar 1ue se ha agregado correctamente eAecutamos nuevamente el comando 1ue nos lista los repositorios.
%hora veremos 1ue tenemos dos repositorios remotos8 uno 1ue apunta a githu- & otro a -it-uc"et. !n el siguiente tema veremos el comando push & pull 1ue nos servir6n para enviar & reci-ir cdigo a los repositorios remotos.
1(sh * 1(ll
*$
Mediante el comando p(sh enviamos nuestros cam-ios a githu-8 origin es el nom-re 1ue tiene asignado ese repositorio & #aster corresponde al -ranch 1ue 1ueremos enviar CMas adelante ha-laremos de los ,ranchs a detalleD. %hora -ien si tam-iGn 1ueremos enviar nuestros cam-ios a -it-uc"et lo har5amos as5.
Como se puede o-servar en lugar de usar origin usamos -it-uc"et8 por1ue ese #ue el nom-re 1ue le asignamos al repositorio cuando lo creamos en el tema anterior. Si por eAemplo tuviGramos otro repositorio remoto en hero"u har5amos algo as59
% manera in#ormativa8 #aster es el -ranch CramaD principal donde se van guardando nuestros cam-ios cuando no hemos de#inido ning/n otro -ranch8 es por eso 1ue en los eAemplos anteriores usamos esta rama8 m6s adelante veremos a detalle el maneAo de ramas8 por el momento pensemos en #aster como la linea de tiempo principal.
!l comando p(ll nos permite solicitar los /ltimos cam-ios8 al igual 1ue el p(sh de-emos de#inir de donde 1ueremos descargar los cam-ios8 en este caso del repositorio origin as5 como el -ranch 1ue 1ueremos actuali@ar8 en este caso #aster. !s importante mencionar 1ue el comando pull en primer lugar descarga los cam-ios & luego intenta hacer un #erge de manera autom6tica8 es decir intenta insertar de manera autom6tica los cam-ios 1ue se han producido en los archivos 1ue estamos usando. !n el siguiente tema veremos 1ue hacer cuando el #erge no se puede reali@ar de manera satis#actoria & como solucionar los con#lictos de manera manual.
resource 9users
3o siguiente es hacer el add8 commit & push. !n mi repositorio 1ue tengo en mi mac vo& a modi#icar otra l5nea en este mismo archivo de la siguiente manera.
resource 9proAects
,ago el add8 commit correspondiente e intento enviar mis cam-ios al repositorio en +ithu-8 al intentar esto sucede el siguiente error.
*)
%hora -ien8 este pro-lema esta sucediendo por1ue en el repositorio remoto alguien m6s su-i cam-ios 1ue &o no tengo8 es decir mi versin local est6 atrasada8 necesito primero actuali@arla. 0ara eso hago un pull.
2na ve@ 1ue descarguG los nuevos archivos intento hacer el push nuevamente & no de-er5a tener el pro-lema anterior8 mis cam-ios estar5an en el repositorio remoto listos para ser descargados por cual1uier otro desarrollador. !s importante mencionar 1ue +I7 me hi@o el merge de los archivos autom6ticamente8 las lineas de cdigo 1ue modi#i1ue en mi m61uina virtual & en mi mac est6n ah58 no tuve 1ue hacer nada especial8 ahora -ien 1ue pasa si modi#ico e?actamente las mismas lineasO (egresando a mi m61uina virtual vo& a hacer un pull para tener los ultimos cam-ios & modi#icar la ruta de la siguiente manera.
,ago el add8 commit & push. !n mi mac vo& a modi#icar la misma l5nea de cdigo de la siguiente manera.
,ago el add & commit pero si intento hacer el push reci-irG el mismo pro-lema anterior8 hago el pull para solucionarlo pero ahora verG 1ue e?isten con#lictosPP +ut intenta hacer el merge autom6ticamente pero Austo en esa l5nea de cdigo 1ue modi#i1ue tengo 1ue hacer el merge de manera manual. 0ara resolver el con#licto simplemente tengo 1ue a-rir el archivo en mi editor pre#erido & luego ver cual es el cdigo correcto8 en este caso el resultado de-er5a ser.
2na ve@ 1ue resolv5 el con#licto tengo 1ue hacer un add & commit nuevamente para versionar los nuevos cam-ios8 por /ltimo hago el push & no de-er5a e?istir ning/n pro-lema. IK
(epositorios remotos 0ues -ien8 este es el #luAo normal para resolver con#lictos8 utilicG un eAemplo mu& com/n 1ue seguramente nos suceder6 en el #uturo.
I*