La forma más fácil de migrar un repositorio de subversion a git, es utilizar la herramienta svn2git.

Nuestro caso era el #4

The svn repo is NOT in standard layout and has no trunk, branches, or tags at the root level of the repo. Instead the root level of the repo is equivalent to the trunk and there are no tags or branches.

así que utilizamos el siguiente comando, con una pequeña modificación para tomar en cuenta los autores

svn2git http://svn.example.com/path/to/repo --rootistrunk --authors ~/authors.txt
Nota: Recientemente intenté migrar otro repositorio pero el comando anterior me arrojó el siguiente error

git svn init --prefix=svn/ --no-metadata --trunk=svn://svn.repo/project/
Initialized empty Git repository in /home/cirovladimir/project/.git/
E: 'svn:/svn.repo/project' is not a complete URL and a separate URL is not specified
para que funcione sólo sustituye el parámetro --rootistrunk por --trunk '/'

para crear el archivo de autores utilizamos el comando


svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > ~/authors.txt

y luego modificamos las líneas

jwilkins = jwilkins

por

jwilkins = John Albin Wilkins <johnalbin@example.com>

Fuentes:
http://john.albin.net/git/convert-subversion-to-git
https://github.com/nirvdrum/svn2git#readme

Anuncios

Para configurar un servidor de git local podemos seguir la guía oficial.
La guía nos muestra los pasos necesarios para acceder a un repositorio de git mediante ssh, que es la forma más común para acceder (leer y escribir) a un repositorio. Esto debido a la seguridad y eficiencia que ofrece el protocolo ssh. Puedes leer sobre los distintos protocolos (local, http[s], git, ssh) disponibles en git aquí.

Bueno, lo primero que necesitamos es tener un servidor de ssh

sudo apt-get install openssh-server

Luego tenemos que crear al usuario ‘git’. Yo especifiqué el directorio del usuario para que no me creara el directorio /home/git

sudo adduser --home /home/cirovladimir/Apps/git

nos va a pedir una contraseña y algunos datos, podemos dejar vacíos los demás campos.

Luego nos logeamos como el usuario git y creamos el directorio ‘.ssh/’

sudo su git
cd
mkdir .ssh

a continuación vamos a generar las llaves para nuestros usuarios

ssh keygen -t rsa -C 'usuario_1@gmail.com' -f usuario_1_rsa
ssh keygen -t rsa -C 'usuario_2@gmail.com' -f usuario_2_rsa

nos va a generar un par de llaves para cada usuario, una pública (extensión .pub) y una privada

Hay que agregar las llaves públicas al archivo .ssh/authorized_keys

cat usuario_1_rsa.pub >> .ssh/authorized_keys
cat usuario_2_rsa.pub >> .ssh/authorized_keys

Ahora vamos a iniciar un repositorio para nuestro proyecto

mkdir -p repos/proyecto.git
cd repos/proyecto.git
git --bare init

cerramos la sesión del usuario git

exit

si ya tenemos un repositorio local que queremos sincronizar con el servidor que acabamos de configurar, hacemos lo siguiente

cd miproyecto
git remote add origin git@localhost:repos/proyecto.git
git push origin master

en este caso el servidor es local, si lo configuras en otra máquina puedes sustituir localhost por el nombre de la máquina o su ip.

Si al ejecutar el ‘push’ te arroja un error parecido al siguiente

Error: Agent admitted failure to sign

lo puedes resolver con el comando

ssh-add /ruta/usuario1

y te va a pedir el passphrase que utilizaste cuando generaste la llave.

Fuentes:
http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
http://git-scm.com/book/ch4-1.html
https://help.github.com/articles/generating-ssh-keys
https://help.github.com/articles/error-agent-admitted-failure-to-sign

Cuando inicias algún proyecto, muy probablemente lo hayas creado localmente (en tu computadora). Si después quieres moverlo a un servidor para compartirlo y que los demás puedan contribuir a tu proyecto, necesitas mover tu repositorio local a un servidor compartido.

Para hacer esto, ejecuta el siguiente comando para crear un clon de tu repositorio

git clone –bare /path/to/repo /path/to/bare/repo.git

Luego copia esta carpeta al servidor -mediante usb, ftp, ssh o lo que puedas-.

Puedes comprimirla antes de copiarla con

tar -zcvf /path/to/bare/repo.git repo.tar.gz

y descopmrimirla en el servidor con

tar -zxvf repo.tar.gz

Ahora para poder sincronizar con este nuevo servidor, cambia el origen de tu directorio de trabajo (working tree)

git remote rm origin

git remote add origin ssh://user@dev.foo.com/path/to/bare/repo.git

suponiendo que tienes acceso al servidor mediante ssh y luego envía tus cambios al nuevo servidor

git push

Fuentes:
http://stackoverflow.com/questions/4860166/how-to-synchronize-two-git-repositories
http://kovshenin.com/2011/transfer-your-existing-git-repository-to-github/
http://stackoverflow.com/questions/1402390/git-push-clone-to-new-server/1402783#1402783
http://www.wetware.co.nz/2009/07/pull-a-git-branch-from-remote/ 
http://www.kernel.org/pub/software/scm/git/docs/git-clone.html#_git_urls_a_id_urls_a 

Hasta ahora hemos utilizado subversion para el control de versiones del código fuente. Debido a las ventajas que ofrece git, decidí probarlo con un proyecto de Maven con varios modulos.

Para empezar debemos instalar Egit, un plugin de eclipse que integra las funciones de git en Eclipse. También deberíamos tener instalado m2eclipse, que ya viene por default desde la versión Indigo, para crear y configurar proyectos de Maven.

Como el proyecto ya existía, lo primero que hice fue dar clic derecho en el proyecto y seleccionar “Team->Share…” y seleccionar Git.

Y aquí viene la primera duda, ¿Qué repositorio seleccionar? En internet la mayoría de ejemplos o guías crean una carpeta para un proyecto, inicializan el repositorio en la misma y agregan los archivos al control de versiones. En el tutorial, la guía de Egit y esta pregunta en stack overflow -incluso el asistente de Egit- te advierten sobre no crear el repositorio en el workspace. Así que debemos crear el repositorio dentro de la carpeta del proyecto o crear una nueva. Si utilizas la carpeta del proyecto para crear el repositorio no podrás agregar otros proyectos en esa misma carpeta (a menos que sea un proyecto de Maven y agregués los demás como módulos).

Seleccionamos “Use or create repository in parent folder of project” y luego damos clic en “Create Repository”. El repositorio quedará en la carpeta del proyecto dentro de la carpeta “.git/”.

Te va a mostrar los archivos que no han sido agregados al control de versiones.

Hay que agregarlos dando clic derecho sobre ellos y luego en “Team->Add” o dando clic derecho sobre el proyecto y luego en “Team->Commit…”. ahí nos dará la opción de agregarlos al mismo tiempo que hacemos commit.

El último paso sería ignorar algunas carpetas, por ejemplo la carpeta “target” en el caso de proyectos Maven. Para ello crea un archivo “.gitignore” en la carpeta del proyecto con la siguiente línea

target/

listo, ya puedes utilizar git en tu proyecto.

Para crear un nuevo proyecto puedes utilizar un arquetipo (que es como una plantilla). Yo quería crear un proyecto de servicios web, y pues, ya existe un arquetipo que utiliza el Apache CXF Framework, se llama “cxf-jaxws-javafirst”. Puedes encontrarlo en el repositorio central aquí (versión 2.5.0).

Pues para mi sorpresa no se mostraba en el asistente de nuevos proyectos de maven, al parecer existe un problema con m2eclipse. Así que tendrás que crear el proyecto desde la línea de comandos de la siguiente forma:

mvn archetype:create -DarchetypeGroupId=org.apache.cxf.archetype -DarchetypeArtifactId=cxf-jaxws-javafirst -DarchetypeVersion=2.5.0 -DgroupId=com.acme -DartifactId=cxf-sample -Dversion=0.0.1-SNAPSHOT

Asegurate de modificar las coordenadas de acuerdo a tu proyecto 🙂

Hace poco instale la última versión de Ubuntu, la 11.10. Pues después de usarla por casi un mes ya no pude aguantar más, es demasiado lenta como para trabajar sin molestarme. Entonces decidí regresar a la versión 10.10 que recordaba tenía un rendimiento fabuloso. Después de volver a instalar la versión “vieja” fue sorprendente, me cambio la cara al ver que volvía a iniciar rapidísimo mi laptop y se apagaba en no más de 5 segundos, volví a utilizar una máquina virtual al mismo tiempo que compilaba algún proyecto, en fin, una maravilla.

Pero hay ciertas cosas que debes tomar en cuenta al regresar a una versión anterior de Ubuntu, la primera que noté es que después de haber instalado todas las actualizaciones que me notificaba, seguía con la versión 3.6.23 de Firefox. No lo podía creer, actualmente están por liberar la versión 8 de este excelente navegador. La última versión de Digikam no estaba disponible y supongo que muchas otras tampoco.

Desafortunadamente tendrás que buscar formas alternativas de instalar las últimas versiones del software que te interese (y yo que ya me había acostumbrado a obtener el software desde el Ubuntu Software Center con tan solo seleccionarlo).

Para instalar las últimas versiones de Firefox agrega el repositorio del mozilla-team mediante el siguiente comando

sudo add-apt-repository ppa:mozillateam/firefox-stable && sudo apt-get update

luego abre el Update Manager y te notificará que hay una actualización disponible para firefox

Otro repositorio PPA que contiene software muy interesante es el de Philip Johnsson.

Pues creo que tendré que volver a instalar el software de la forma antigua: configure, make, make install 😦

Fuentes:

http://ubuntuperonista.blogspot.com/2011/09/como-actualizo-firefox-602-en-ubuntu.html
https://launchpad.net/~philip5/+archive/extra

Hay algunas dependencias que no podrás encontrar en repositorios públicos por alguna razón, como las librerías OJDBC de Oracle. Seguro que puedes instalarlas en tu máquina, pero -en una organización- no quisieras hacer esto en la computadora de cada desarrollador por cada librería que necesiten. Bueno, entonces lo que necesitas es tener tu propio repositorio donde puedas poner todas las librerías comunes que utilicen en tu empresa (las que desarrollen y las de terceros). Por suerte, existe Nexus.
Para instalarlo simplemente descargalo, descomprimelo y ejecutalo.

mkdir nexus
cd nexus
wget http://nexus.sonatype.org/downloads/nexus-oss-webapp-1.9.2.3-bundle.tar.gz
tar -xvzf nexus-oss-webapp-1.9.2.3-bundle.tar.gz
./nexus-oss-webapp-1.9.2.3/bin/jsw/linux-x86-32/nexus start

Asegurate que la última línea corresponda a tu arquitectura, busca el ejecutable que corresponda en el directorio ./nexus-oss-webapp-1.9.2.3/bin/jsw/

Después de ejecutar el último comando debes ver algo como

2011-09-21 15:37:21 INFO [er_start_runner] - org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8081

Abre un navegador y ve a http://localhost:8081/nexus. Debes poder ver la consola de administración. Listo, ya tienes tu propio repositorio instalado.

Ingresa con el usuario “admin” y contraseña “admin123” para ver las opciones administrativas (cambia la contraseña de paso). Te conviene activar la opción “Download Remote Indexes” en la configuración de los repositorios, al menos para Maven Central. Con esto las búsquedas serán más rápidas.
Para ver el Log da clic en la opción “System Files” y selecciona el documento “nexus.log”.

Para que este repositorio sea utilizado dentro de la organización, en la PC de cada desarrollador edita el archivo ${user.home}/.m2/settings.xml y pon el contenido

<?xml version="1.0"?>
<settings>
	<mirrors>
		<mirror>
			<id>nexus.acme.com</id>
			<name>Acme</name>
			<url>http://nexus.acme.com:8081/nexus/content/groups/public/</url>
			<mirrorOf>*</mirrorOf>
		</mirror>
	</mirrors>
</settings>

Por supuesto nexus.acme.com puede ser sustituído por la IP del servidor, p. ej. 192.168.0.250
Ten en cuenta que al poner <mirrorOf>*</mirrorOf> tu repositorio sera utilizado para cualquier dependencia, incluso las de proyectos que tengan configurado otro repositorio en el archivo pom.xml, por lo que si no tienes configurados esos repositorios en Nexus, las dependencias no serán encontradas. Podrías especificar sólo ciertos repositorios de la siguiente forma: <mirrorOf>central,google,apache-snapshots</mirrorOf>
Finalmente, para utilizar el repositorio en tus proyectos, agrega las siguientes líneas al archivo pom.xml

  <repositories>
    <repository>
      <id>nexus.acme.com</id>
      <url>http://nexus.acme.com:8081/nexus/content/groups/public/</url>
    </repository>
  </repositories>

Fuentes:

http://my.safaribooksonline.com/
http://maven.apache.org/guides/mini/guide-mirror-settings.html