Eclipse + Java sobre repositorio Git
De vez en cuando me da por practicar mi oxidado Java. Voy a hacer un pequeño programa para monitorizar los equipos de mi red casera utilizando Java y snmp. Me gusta guardar mis proyectos de desarrollo en mi servidor git privado (basado en gitea
). En este apunte describo el proceso de creación de un repositorio git, un Proyecto Java con Eclipse y cómo los conecto entre sí. Si usas GitHub el proceso es idéntico, aunque visualmente las opciones cambien un poco respecto a gitea.
Encontrarás un par de apuntes sobre GIT en este blog, si quieres profundizar y entender git de verdad, te recomiendo GIT en detalle y la Chuleta sobre GIT. Si te interesa como montar Gitea en tu red casera, aquí y aquí también te dejo un par de apuntes. |
Preparar SSH en tu ordenador
Antes de nada, con mi servidor gitea
uso SSH para clonar los repositorios, así que es importante tenerlo bien configurado. Si usas GitHub te recomiendo hacer exáctamente lo mismo.
- Ya lo tenía hecho, pero explico cómo creé mis claves público/privada. Nota: en mi caso las salvé con el nombre
id_gitea
- La contraseña que nos pide vamos a necesitarla más adelante al hacer el clonado y/o conexión con el servidor
gitea
.luis@idefix ~ $ ssh-keygen -t rsa -b 2048 :
- Se crearon dos ficheros, uno con la clave privada (
id_gitea
) y otro con la clave pública (id_gitea.pub
), que es la que se puede compartir. Nunca compartas la privada.➜ ~ ls -1 .ssh/id_gitea* .ssh/id_gitea <== NO COMPARTIR NUNCA .ssh/id_gitea.pub <== Compartible en github, gitea...
- Por último, en mi usuario de gitea copio/pego el contenido del fichero
id_gitea.pub
como una clave nueva en el servidor gitea.
Nota: Si quieres trabajar con ssh con github tiene que hacer lo mismo en github.com, añadir tu clave publica como una de las claves aceptadas para trabajar vía ssh, lo encontrarás en Logo de tu usuario > Settings > SSH and GPG keys |
Preparar .gitconfig
en tu ordenador.
- Tanto si vas a hacer clonados desde la línea de comandos como desde aplicaciones (por ejemplo Eclipse), es conveniente que prepares el fichero
.gitconfig
en la raiz del carpeta del usuario. Al menos debería tener los camposname
yemail
configurados$ cat $HOME/.gitconfig [user] name = Luis Palacios email = mi.correo.electrónico@dominio.com
Lo puedes hacer en Eclipse desde Preferences > Version control > Git > Configuration
Eclipse
Antes de nada, unos conceptos para entender mejor dónde se guardan los proyectos con Eclipse y qué cambia cuando usamos Git. Hay muchas maneras de organizar los proyectos y los flujos de trabajo, y Eclipse es lo suficientemente flexible a la hora de organizar o ubicar las cosas.
- Workspace de Eclipse: Básicamente, un “Workspace” es una “colección de proyectos y configuraciones”. Al crearlo estamos creando una carpeta en el disco que contiene una única sub-carpeta llamada
.metadata
(almacena la configuración del workspace y la lista de proyectos vinculados). Es algo así como unpuntero a una lista de proyectos
. - Projecto Eclipse: Para poder realizar un programa es necesario crear un proyecto. Un Proyecto agrupa a un conjunto de recursos relacionados entre sí (código fuente, diagramas de clases, binario, documentación). Nota: con el plugin adecuado puedes crear proyectos en Ada, ABAP, C, C++, C#, Clojure, COBOL, D, Erlang, Fortran, Groovy, Haskell, JavaScript, Julia, Lasso, Lua, NATURAL, Perl, PHP, Prolog, Python, R, Ruby (Ruby on Rails), Rust, Scala, y Scheme.
Cuando usamos Git añadimos el tercer concepto:
- Repositorio Git: Eclipse sabe mucho de Git (permite crear y clonar/conectar repositorios, permite incluso ejecutar cualquier comando git), pero repositorio Git no es un proyecto Eclipse en sí.
- La forma de trabajar cuando queremos “git” es empezar por él, crear el repositorio en github (o gitlab o gitea), después clonarlo en mi ordenador y por último crear un Proyecto Eclipse y hacerlo dentro de dicho repositorio.
Preparar Eclipse para Git
- Primero configuro GIT en Eclipse. Entro en sus
Settings > Git
. Aquí hay dos puntos importantes. El primero es indicar cual es la carpeta raíz a partir de la cual voy a dejar mis proyectos clonados desde el servidor git. El segundo es pedirle a Eclipse que salve las contraseñas que me vaya pidiendo.
Así que tenemos dos carpetas importantes:
- El Workspace principal de Eclipse:
/Users/luis/eclipse-workspace
- La carpeta a partir de la cual tengo los repositorios Git (clones):
/Users/luis/0_priv/prog/gitea-luispa/palas
Esta última es una carpeta cualquiera que dedicas en tu ordenador a tener tus proyectos de desarrollo, no tiene nada que ver con Eclipse. En mi caso siempre uso la misma independiente del IDE que emplee.
Proyecto Eclipse “dentro” de repositorio Git
Estos son los pasos, para meter un Proyecto Eclipse dentro de la carpeta de un Repositorio git.
- Creo un repositorio en el servidor (en mi caso
gitea
), que llaméquidomi
. - Abro o Clono el repositorio
/Users/luis/0_priv/prog/gitea-luispa/palas/quidomi
- Creo un Proyecto Eclipse en el workspace, que llamo
QuiDomi
./Users/luis/eclipse-workspace/QuiDomi
- Viculo ambos, el Proyecto Eclipse, con el Repositorio Git.
1. Crear el repositorio quidomi
en gitea
Si ya tenemos el repositorio creado nos saltamos este paso. Creo el repositorio para mi pequeño proyecto en Java. Desde mi servidor gitea
Defino los parámetros necesarios
Una vez creado ya tengo acceso a la URL que usaremos más adelante para hacer el clonado.
- Recuerdo la URL para poder hacer el clonado. Si selecciono
SSH
el usuario (la parte a la izquiera de la@
) siempre debe sergit
. No lo confundas con tu usuario en ese servidor (si es que tienes acceso). Cuando usamos SSH como método de sincronización desde git, el usuario es siempregit@...
git@git.tudominio.com:palas/quidomi.git
2. Clono o Abro el repositorio
- Primero muestro la ventana de trabajo con GIT desde
Window > Show View > Other > Git > Git Repositories
.
Nota: Si ya tenía el respositorio clonado en mi ordenador mira al final de este punto |
Desde la nueva ventana pulso en Clone a Git repository
- Pongo la URL de mi repositorio y dejo el resto de opciones sin cambiar.
- Introduzco la contraseña que use al crear mis claves pública/privada SSH.
- Este paso es opcional, decide qué hacer en tu caso
- No cambio nada, me interesa descargar la rama principal (
main
)
- No cambio nada, pero verifico que efectivamente va a crear un sub-carpeta en el sitio correcto. Recuerda que cambié mis preferencias para que todos los proyectos que clone desde un servidor git residan bajo
.../palas
- Ya tenemos nuestro proyecto, repositorio git, activo en el IDE de Eclipse.
En el caso de que ya hubiese tenido clonado el repositorio no habría necesitado hacer el clona, simplemente pulsando sobre Add an existing local Git repository
y selecionandolo.
3. Crear el Proyecto Eclipse QuiDomi
.
A continuación creamos un Proyecto en Eclipse y lo llamamos igual que como se llama nuestro repositorio, pero de momento no tienen nada que ver, de hecho estarán desvinculados hasta el siguiente paso (4).
Nota: Este proyecto se va a ubicar en una sub-carpeta en el workspace. Cuando lo vinculemos al repositorio Git se moverá. |
- Ya puedes empezar a trabajar con tu Proyecto, pero se quedará todo en local, hasta que lo vincules / muevas debajo de la carpeta del repositorio Git local (clonado). En este ejemplo he creado un simple “Hola, mundo!”.
4. Vincular el Proyecto con el Repositorio Git.
En el Proyecto Eclipse QuiDomi
, hago click con el botón derecho sobre QuiDomi
en el Package Explorer y voy a “Team > Share Project”, selecciono el repositorio Git quidomi
que vimos en los pasos 1 y 2. Lo que va a ocurrir es:
- El Proyecto se “mueve” (la carpeta entera del proyecto) debajo de la carpeta del repositorio.
- En el workspace seguimos teniendo el puntero al proyecto (aunque físicamente se ha movido su contenido)
- A partir de este momento ya podemos trabajar desde Eclipse en “modo git” con este proyecto/programa, hacer commits, etc..
- Una vez que pulsas en Finish ocurren un par de cosas, la primera es que la carpeta del Proyecto,
QuiDomi
que estaba en el workspace, se mueve debajo de la carpeta del repositorio:
+---- /Users/luis/eclipse-workspace/QuiDomi
|
+----> /Users/luis/0_priv/prog/gitea-luispa/palas/quidomi/QuiDomi
➜ palas> ls -al quidomi
total 24
drwxr-xr-x@ 7 luis staff 224 29 nov 17:05 .
drwxr-xr-x@ 20 luis staff 640 29 nov 17:05 ..
drwxr-xr-x@ 11 luis staff 352 29 nov 16:46 .git
-rw-r--r-- 1 luis staff 303 29 nov 16:46 .gitignore
-rw-r--r-- 1 luis staff 1078 29 nov 16:46 LICENSE
drwxr-xr-x@ 8 luis staff 256 29 nov 17:05 QuiDomi <=== !!!
-rw-r--r-- 1 luis staff 176 29 nov 16:46 README.md
➜ palas> tree quidomi
quidomi
├── LICENSE
├── QuiDomi <=== !!!
│ ├── bin
│ │ ├── QuiDomi
│ │ │ └── QuiDomi.class
│ │ └── module-info.class
│ └── src
│ ├── QuiDomi
│ │ └── QuiDomi.java
│ └── module-info.java
└── README.md
5 directories, 6 files
Lo segundo que ocurre es que empiezas a tener feedback visual. Observa cómo aparecen unas pequeñas “mochilas” indicativas en los iconos de las carpetas, son símbolos que nos indican el estado dentro del repositorio git
Trabajar en el proyecto y hacer stage/commits/push
- Hacemos modificaciones, compilamos, verificamos que funciona
- Decidimos que queremos subir los cambios al servidor git.
- Iniciamos el proceso de
commit
- Primero paso las modificaciones al área de preparación (
staging area
) - en local - A continuación ejecuto el
commit
- seguimos en local - Por último hacemos un
push
- enviamos a remoto (servidor gitea).
- Primero paso las modificaciones al área de preparación (
Empiezo haciendo una modificación simple, compilando y comprobando…
Decido iniciar el proceso de commit (mediante la opción Team > Commit
)
Reviso los “Unstaged Changes”. Es decir, qué ficheros todavía no están en el area de intercambio (staging area).
Solicito que se muevan esos ficheros a la Staging area
Escribo el mensaje de commit y pulso en Commit & Push.
Compruebo en mi servidor gitea
que se han recibido los cambios.
Nomenclatura GIT
Os dejo aquí una pequeña chuleta sobre la nomenclatura git. Recuerda que tengo por aquí un par de apuntes más sobre GIT en detalle y la Chuleta sobre GIT. |
Inglés | Español | Descripción |
---|---|---|
staging area | área de preparación | Es una zona intermedia (dentro de la sub-carpeta .git dentro de la carpeta del repositorio). Es el sitio donde se van preparando archivos a la espera del ser usados en el siguiente commit |
index | índice | Es la lista de todos los archivos que se consideran ya preparandos a los que hacemos seguimiento y están en la staging área (entre tu working copy y el futuro commit). |
working copy | directorio de trabajo | Es el directorio completo de tu proyecto, la parte no controlada por git, es decir, todos los ficheros y directorios que están fuera del subdirectorio .git |
commit | confirmar, comprometer | Consiste en dar por bueno lo que tenemos en el Staging Area y pasarlo a un estado de “confirmado”, identificándolo con un puntero numérico (hash del commit). Junto con sus antepasados conforman una instantánea o versión de tu proyecto. |
branch | rama | Es un nombre que actúa como puntero a un commit concreto dentro de tu repositorio .git |
clone | clonar, copiar | Consiste en traerme a local un repositorio remoto completo, creando un duplicado del mismo para poder trabajar en él. |
fetch | traer | Pedimos la última información de un remote, sin transferencia de archivos. Sirve para comprobar si hay algún cambio disponible. |
merge | fusión | Comando que realiza una fusión a tres bandas entre las dos últimas instantáneas de cada branch y el ancestro común a ambas, creando un nuevo commit con los cambios mezclados |
pull | tirar | Comando que para extraer y descargar contenido desde un repositorio remoto y actualizar al instante el repositorio local para reflejarlo. En realidad no es más que un git fetch segido de un git merge |
push | empujar | Se usa para cargar contenido desde mi repositorio local hacia un repositorio remoto. El envío es la forma de transferir commits desde tu repositorio local a un repositorio remoto |