jueves, 13 de enero de 2011

TFS mirror con GIT

Para mirrorear un repositorio de Team Foundation Server, basta con ejecutar este comando:

git tfs clone

Ejemplo (no les puedo dar uno real porque no conozco ninguno en la web)

git tfs clone http://tfs:8080

NOTA: Esto no es una ninguna broma, se pueden bajar bridge entre git y tfs de aca: https://github.com/spraints/git-tfs

SVN mirror con GIT

Para mirrorear un repositorio de svn, basta con ejecutar este comando:

git svn clone

Ejemplo

git svn clone http://zxing.googlecode.com/svn/trunk/

Actualizar el mirror

git svn rebase

Salu2

GIT mirror con GIT

Para mirrorear un repositorio de git, basta con ejecutar este comando:

git clone

Ejemplo:

git clone git://github.com/tario/shikashi.git

Actualizar el mirror

git pull

Salu2


miércoles, 12 de enero de 2011

git-svn: A GIT lo que es de GIT...

... y a SVN lo que es de SVN

El que el repositorio al cual haya que commitear sea de SVN no implica necesariamente que se tenga que usar esa herramienta como cliente. Git tambien puede "pushear" , por decirlo de alguna manera, a servers de svn. Lo que tiene esto es que se pueden aprovechar las ventajas que tiene git localmente o tambien si se esta mas comodo con git. Por ejemplo, se puede commitear localmente varias veces hasta decidir cuando subir los cambios, y ni hablar cuando hay algun problema que impide la conexion con el server, en ese caso es de gran ayuda.

Para clonar un server svn:

git svn clone $URL

Posteriormente se trabaja como lo harian siempre con git, commit, branch, reset, checkout, etc...

La unica diferencia es al momento de subir los cambios, no es el push de siempre, sino

git svn dcommit


martes, 4 de enero de 2011

Fix commit message

¿Cuantas veces se equivocaron al escribir el mensaje de un commit, poniendo haverrantes faltas hortograficaz, escribiendo cosas que no correspondian, o el peor de los casos, pegando basura que habia en el clipboard?. Bueno, eso se corrige con la opcion amend, es la misma opcion que tambien sirve para corregir el contenido de los commits, solo que esta vez hay que mantener el mismo contenido y se cambia el message del commit.

Ejemplo:

git commit --message 'fixed type'

Me equivoque :S, quise poner 'fixed typo', no 'fixed type' se corrige asi:

git commit --amend --message 'fixed typo'

sábado, 25 de diciembre de 2010

Descartar todos los cambios no pusheados

Para descartar todos los cambios no pusheados (y hacer de cuenta que no se commiteo nada)

git reset --hard origin/master

Explicacion

git reset es el comando que permite cambiar a que commit apunta la rama en la cual se esta trabajando, por ejemplo, el siguiente comando ocasionara que la rama en la que estan trabajando retroceda un commit:

git reset --hard HEAD^

Lo que se hace para deshacer todos los commits que no se pushearon hasta el momento, es asignar a la rama master el mismo commit al que apunta la rama remota: origin/master, esto es lo que hace el comando git reset --hard origin/master
La opcion --hard, sirve para indicar que reinicie tambien el indice y el working tree a esa version.

Deshacer

Si se arrepintieron de descartar sus cambios, lo unico que hay que hacer es restaurar la ref (el puntero de la rama) a su valor original, que se puede hacer asi

git reset --hard HEAD@{1}

HEAD@{1} es el valor que tuvo HEAD antes de que sea cambiado por el otro git reset, eso se puede verificar mas claramente con el comendo git reflog



jueves, 23 de diciembre de 2010

Obtener el codigo del pasado, Parte II: Tags

Como se vio en Obtener codigo del pasado, es posible obtener el codigo de cualquier commit arbitrario que se haya realizado, con solo localizarlo y checkoutearlo.
Segun la situacion, localizar commits puede ser tedioso, por eso existen los tags, que son la herramienta para marcar commits a los que se desea ir con frecuencia.

LOCALMENTE

Para taguear el commit en el que estamos parados:

git tag nombre_del_tag

Para taguear otro commit

git tag nombre_del_tag 012345679abcde
git tag nombre_del_tag nombre_del_branch
git tag nombre_del_tag nombre_de_otro_tag
git tag nombre_del_tag HEAD^

(ese ultimo taguea el parent del commit en el que estamos parados)

Para ver el contenido del tag

git checkout nombre_del_tag

REMOTAMENTE

Es posible crear tags en un repositorio remoto, asi:

git push origin HEAD:refs/tags/nombre_del_tag

Para que cualquiera apuntando a ese repositorio se baje ese tag, tiene que hacer:

git fetch --tags

Actualizacion: HEAD podria reemplazarze con cualquier SHA de commit, nombre de branch o tag ya existente (por ejemplo, uno local que se quiere hacer remoto)


Saludos, y Felices Fiestas!

Links:

* Post anterior: Obtener codigo del pasado