Sie sind auf Seite 1von 20

GIT EN EL MUNDO REAL

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.

Descripcin Del Tema


!n este tema se muestra como podemos instalar +I7 de una manera sencilla so-re Mac OS8 para descargar el instalador lo puedes hacer en el siguiente lin".

http9::git;scm.com:downloads

0ara de#inir las con#iguraciones de usuario lo haces as59

< 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.

Descripcin Del Tema


Instalar +I7 so-re windows es sencillo utili@ando el instalador8 en este tema se muestra como podemos instalarlo.

VERSIONANDO TU CONTENIDO
Creacin De Un Repositorio
!l v5deo est6 en la carpeta v5deos.

Descripcin Del Tema


!n este tema veremos como crear un repositorio en +I7 para poder comen@ar a versionar nuestro pro&ecto. Supongamos 1ue vamos a iniciar a tra-aAar en un pro&ecto con rails & usaremos +I7 como nuestro sistema de versionamiento. 0ara este curso usaremos rails como eAemplo8 &a 1ue nos genera varios archivos de manera autom6tica. 0ero para reali@ar los eAemplos puedes usar cual1uier otro #ramewor" o inclusive crear una carpeta e ir aBadiendo archivos. Iniciaremos creando nuestro pro&ecto eAecutando el siguiente comando para generar nuestra aplicacin rails.

< rails new m&app < cd m&app

Crear un repositorio en +I7 es -astante sencillo8 -asta con eAecutar el siguiente comando dentro del directorio ra5@ en nuestro pro&ecto.

< git init

%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

+I7 en el mundo real para cuando tra-aAamos en e1uipos distri-uidos.

Ignorando Archi os No Deseados


!l v5deo est6 en la carpeta de v5deos.

Descripcin Del Tema


!n ocasiones tenemos algunos archivos 1ue no 1ueremos agregar al sistema de versiones8 posi-lemente los logs8 archivos de con#iguracin8 los temporales o cual1uier otro archivo 1ue simplemente no vale la pena versionarlo. 0ara esas situaciones +I7 cuenta con una manera mu& directa de ignorar archivos8 & es mediante un archivo de con#iguracin llamado .gitignore el cual de-emos incluir dentro de nuestro pro&ecto. 0ara el eAemplo so-re el 1ue venimos tra-aAando rails &a nos ha creado este archivo en el directorio ra5@ del pro&ecto8 inclusive &a ha agregado algunos archivos a ignorar. 0ero cuando no e?ista tal archivo lo podemos crear sin ning/n pro-lema. Vamos a ignorar el archivo de con#iguracin de las credenciales de la -ase de datos8 &a 1ue esta in#ormacin variar6 en cada sistema. 2sando la linea de comandos lo hacemos de la siguiente manera.

< echo con#ig:data-ase.&ml FF .gitignore

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.

< cp con#ig:data-ase.&ml con#ig:data-ase.&ml.sample

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.

Descripcin Del Tema


%ntes de seguir adelante es necesario 1ue entendamos algunos conceptos de +I7. 3os conceptos 1ue ha-larG a1u5 son mu& importantes8 intentarG ser lo m6s -reve & directo posi-le. !l repositorio local 1ue hemos creado cuenta con tres estados8 & en general cual1uier otro repositorio de +I7. !l primero es el Modi"ied8 1ue consta de los archivos con los 1ue estamos tra-aAando en determinado momento8 a1uellos 1ue hemos modi#icado8 no han sido versionados & tampoco est6n listos para ser versionados. %l segundo estado se le denomina Staged8 & se re#iere a los archivos 1ue hemos marcado como modi#icados & est6n listos para ser agregados al historial o versionamiento en el siguiente commit. %l tercer estado se le llama Co##ited & signi#ica 1ue la in#ormacin8 o -ien nuestro cdigo #uente8 esta correctamente guardado en el historial.

!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.

Descripcin Del Tema


2na ve@ 1ue conocemos la manera en 1ue #unciona +I7 & los estados por los 1ue un archivo tiene 1ue pasar para ser almacenado en el repositorio8 veamos como hacerlo usando la consola de comandos. 2na ve@ 1ue hemos creado nuestro repositorio vamos a agregar el .gitignore al +I7 (epositor&. 0rimero necesitamos agregarlo al Staging area.

< git add .gitignore

2na ve@ 1ue se encuentra en el staging necesitamos meterlo al +I7 repositor& usando un commit.

< git commit ;m JIngnorando algunos archivosJ

!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.

'

Versionando tu contenido < git add app

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.

< git commit ;m JIniciando a tra-aAar con esta applicacinJ

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.

Revisando El Es ado De N!es ra App


Vamos a crear un modelo 2ser en nuestra aplicacin rails de la siguiente manera.

< rails g model 2ser email9string name9string

+I7 en el mundo real

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.

< git status

!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.

< git add d-

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.

< git status

**

+I7 en el mundo real

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.

< git add . < git commit ;m J%gregado el modelo de 2suarioJ

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

Veri%icar Si &a Tenemos Llaves SS#


Si estas en windows necesitas eAecutar los siguientes comandos en el +it4ash8 si estas en Mac o 3inu? simplemente usamos la terminal de toda la vida. 0rimero necesitamos veri#icar si &a tenemos algunas llaves e?istentes8 si estas en windows seguramente no las tendr6s8 si estas en Mac o 3inu? es mu& pro-a-le 1ue &a e?istan algunas llaves.

*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.

Generar Las Llaves SS#


%hora -ien8 este paso es necesario /nicamente si no cuentas con unas llaves e?istentes8 si &a las tienes no es necesario hacerlo. 0uedes continuar con el siguiente paso. 0ara generar una llave nueva es necesario eAecutar el siguiente comando.

< ssh;"e&gen ;t rsa ;C =&ourMemail>e?ample.com=

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.

A're'ar La Llave "($lica A Gi #!$


0ara agregar la llave la tenemos 1ue copiar8 -asta con a-rir el archivo id-rsa.p(, en alg/n editor de te?to como Notepad8 Su-lime 7e?t8 etc. & copiar el contenido. 3o siguiente es ir a githu-.com & una ve@ logueados vamos a las con#iguraciones de la cuenta8 luego en el menu SS# )e*s8 damos clic" en Add SS# "e&8 pegamos la llave p/-lica en el e+ area )e* & presionamos el -otn Add ,e*. +ithu- nos pedir6 indicar nuestro password & una ve@ hecho esto &a podremos conectarnos v5a SS, a los servidores de +it,u- para enviar & reci-ir cdigo de manera segura.

"ro$ar -!e .!ncione


0ar hacer la prue-a simplemente intentaremos conectarnos a los servidores de +t,u- de la siguiente manera.

< ssh ;7 git>githu-.com

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.

< git clone git>githu-.com9cr&s#el:accessing;camera.git

!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.

< git clone https9::githu-.com:cr&s#el:accessing;camera.git

*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.

Usando Varios Repositorios Re#otos


Descripcin Del Tema
,emos visto como clonar un repositorio desde +it,u- para continuar tra-aAando en alg/n pro&ecto &a iniciado por alguien m6s. !n este tema veremos como agregar otro repositorio remoto a nuestro mismo pro&ecto pero ahora usando 4it4uc"et. 0ara este eAemplo usaremos el mismo pro&ecto 1ue clonamos de +it,u- en el tema anterior8 as5 1ue necesitamos a-rir la terminal & dirigirnos al directorio ra5@ del pro&ecto 1ue hemos descargado.

Lis ar Los Reposi orios Remo os


Ea diAimos 1ue +it nos permite tener varios repositorios remotos8 para listar todos los repositorios remotos con los 1ue nuestros pro&ecto se puede sincroni@ar utili@amos el siguiente comando.

< git remote ;v

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

git>githu-.com9cr&s#el:accessing;camera.git C#etchD git>githu-.com9cr&s#el:accessing;camera.git CpushD

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.

< git remote add -it-uc"et git>-it-uc"et.org9cr&s#el:accessing;camera.git

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.

< git remote ;v

%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
*$

+I7 en el mundo real

Descripcin Del Tema


Ea hemos visto como agregar repositorios remotos a nuestro pro&ecto8 en este tema veremos como pu-licar & reci-ir contenido entre nuestros repositorios remotos. 0ara eso modi#icaremos alg/n archivo RavaScript agregando un comentario o lo 1ue 1ueramos8 luego le haremos el add & el co##it para commit par completar el wor"#low.

"!$licando N!es ros Cam$ios


!s mu& importante completar el wor"#low & ha-er hecho los commits necesarios en nuestro repositorio local antes de poder compartir los cam-ios. 0ara poder enviar nuestro /ltimos commits a githu- lo hacemos de la siguiente manera.

< git push origin master

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.

< git push -it-uc"et master

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

< git push hero"u master

% 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.

Reci$iendo N!evos Cam$ios


0ara reali@ar este eAemplo vo& a utili@ar mi ma1uina virtual con windows donde he clonado el mismo pro&ecto anteriormente8 pero no tengo los /ltimos cam-ios 1ue reciGn hemos compartido. Dentro del #older de mi pro&ecto eAecutarG el siguiente comando. *'

(epositorios remotos < git pull origin master

!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.

Resol iendo Con"lictos


Descripcin Del Tema
Ea sa-emos como pu-licar & reci-ir cam-ios entre repositorios remotos8 lo cual es genial cuando tra-aAamos solos en un pro&ecto & 1ueremos tener alg/n respaldo de nuestro pro&ecto en un servidor remoto. 0ero lo realmente interesante de +I7 es cuando tra-aAamos en e1uipo8 +I7 nos permite tra-aAar mu& #6cilmente de manera cola-orativa con otros desarrolladores. Siempre 1ue tra-aAamos con otras personas tendremos con#lictos en nuestras versiones8 &a 1ue seguramente otras personas modi#icar6n el mismo archivo & posi-lemente hasta las mismas l5neas de cdigo8 esto es algo mu& com/n & +I7 nos permite maneAar estos con#lictos de manera e?tremadamente sencilla. !n primer lugar vo& a clonar el pro&ecto 1ue tenemos so-re en mi m61uina virtual8 luego vo& a hacerle algunas modi#icaciones a las rutas de rails8 agregando lo siguiente.

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.

*)

+I7 en el mundo real ::!rror de #ast;#orward

%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.

< git pull origin master

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.

resource 9users8 9onl& SF T9inde?8 9showU

,ago el add8 commit & push. !n mi mac vo& a modi#icar la misma l5nea de cdigo de la siguiente manera.

resource 9users8 9onl& SF T9delete89createU

,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.

resource 9users8 9onl& SF T9inde?8 9show8 9delete8 9createU

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*

Das könnte Ihnen auch gefallen