Inicio > Comandos Linux, Git > Empezando con GIT – Comandos básicos

Empezando con GIT – Comandos básicos

Hola. En pocos días voy a verme enfrentado a una migración de sistema de control de versiones. De SVN pasaremos a GIT, sistema que estoy empezando a aprender a manejar, sus comandos básicos y conceptos. No voy a entrar a definir los principios sobre los cuales descansa GIT porque la verdad aún tengo varias cosas que no me quedan claras, como lo del depósito central (no sé cuantas veces en mis otros post he escrito repositorio, perdón por el anglifrancisismo).

Para entrar en materia voy a tomar el proyecto de Mockito que postée hace meses, lo voy a dezippear.

joan@jomaora:~$ cd testGit/testMockito/
joan@jomaora:~/testGit/testMockito$ ls
pom.xml src

Teniendo el proyecto, ahora podemos agregarlo a GIT con el comando git status. Esto pondrá la jerarquía de archivos en este sistema de gestión de versiones. Una carpeta oculta .git será agregada:

joan@jomaora:~/testGit/testMockito$ git init
Initialized empty Git repository in /home/joan/testGit/testMockito/.git/


joan@jomaora:~/testGit/testMockito$ ll
total 20
drwxrwxr-x 4 joan joan 4096 août 6 11:50 ./
drwxrwxr-x 3 joan joan 4096 août 6 11:49 ../
drwxrwxr-x 7 joan joan 4096 août 6 11:50 .git/
-rw-r--r-- 1 joan joan 1819 févr. 22 20:57 pom.xml
drwxrwxr-x 4 joan joan 4096 août 6 11:49 src/

Esta carpeta .git cumple una función similar a la de las carpetas .svn que veíamos en las jerarquías bajo SVN, sólo que no se encuentra sino en la raíz del proyecto y no en cada subcarpeta como en SVN.

joan@jomaora:~/testGit/testMockito/.git$ tree
.
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
├── heads
└── tags
9 directories, 12 files

Para ver el estado de nuestra working copy, el comando a utilizar es git status. Este comando nos muestra los cambios de los archivos que ya estan bajo control de GIT, asi que los archivos que no han sido agregados y otras informaciones más.

joan@jomaora:~/testGit/testMockito$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# pom.xml
# src/
nothing added to commit but untracked files present (use "git add" to track)

Vamos a proceder a agregar los archivos para que este bajo el control de GIT, siguiendo el comando que se nos propone:

joan@jomaora:~/testGit/testMockito$ git add pom.xml src/
joan@jomaora:~/testGit/testMockito$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached ..." to unstage)
#
# new file: pom.xml
# new file: src/main/java/com/jomaora/app/App.java
# new file: src/main/java/com/jomaora/app/dao/BookDAO.java
# new file: src/main/java/com/jomaora/app/model/Author.java
# new file: src/main/java/com/jomaora/app/model/Book.java
# new file: src/main/java/com/jomaora/app/model/LibraryDictionnary.java
# new file: src/main/java/com/jomaora/app/service/LibrarySearchService.java
# new file: src/main/java/com/jomaora/app/service/LibrarySearchServiceImpl.java
# new file: src/main/java/com/jomaora/app/utils/AuthorConverter.java
# new file: src/test/java/com/jomaora/app/service/LibrarySearchServiceTest.java
#

Este git add repercute en cambios del lado de .git. En la subcarpeta objects, se pueden observar entradas que corresponden a los Objetos GIT que están bajo versión. Esos objetos son de 4 clases, Commits, Tree (Carpetas), Blobs (Contenidos de los archivos) y Tags. Al mismo tiempo hay un archivo index que se agrega. este archivo es muy importante porque contiene la información de lo que se va a commitear.

joan@jomaora:~/testGit/testMockito/.git$ tree
.
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── ...
├── index
├── info
│   └── exclude
├── objects
│   ├── 11
│   │   └── 21fda08b025b28de4f94a680696b1b94bcd203
│   ├── 28
│   │   └── 987d2aee9c3e72cef2aae3205dbcc0b9efea91
│   ├── 3e
│   │   └── 809f3a51ef1bc881157e9b660a4f134939507d
│   ├── 4a
│   │   └── 3e8b960b46b53cc8b15fc07b9be3f6f7e01c8e
│   ├── 5d
│   │   └── 314aa66831e25958afc182004544b0575701aa
│   ├── 79
│   │   └── e5463f47865cba35324af6a6ea8c16ef3e1de2
│   ├── ba
│   │   └── a8dbac543ef86367723be0be397b8072b72e51
│   ├── c4
│   │   └── 5d53cfe8b6b41b532cef0b4613100292874e91
│   ├── e5
│   │   └── 2f776b2149625ae03bbb82bf16c51442381c2e
│   ├── e9
│   │   └── 96d4e9fbd80adcec2d99d7039ee8c21e0032c5

│   ├── info
│   └── pack
└── refs
├── heads
└── tags
19 directories, 23 files

Ahora nos resta hacer el commit:

joan@jomaora:~/testGit/testMockito$ git commit -m "Adding files on Git repository"
[master (root-commit) e574777] Adding files on Git repository
10 files changed, 409 insertions(+)
create mode 100644 pom.xml
create mode 100644 src/main/java/com/jomaora/app/App.java
create mode 100644 src/main/java/com/jomaora/app/dao/BookDAO.java
create mode 100644 src/main/java/com/jomaora/app/model/Author.java
create mode 100644 src/main/java/com/jomaora/app/model/Book.java
create mode 100644 src/main/java/com/jomaora/app/model/LibraryDictionnary.java
create mode 100644 src/main/java/com/jomaora/app/service/LibrarySearchService.java
create mode 100644 src/main/java/com/.../service/LibrarySearchServiceImpl.java
create mode 100644 src/main/java/com/jomaora/app/utils/AuthorConverter.java
create mode 100644 src/test/java/com/.../service/LibrarySearchServiceTest.java

Del lado de .git los cambios se ven el la creación de una subcarpeta logs que contiene los mensajes de los commits,  y en la subcarpeta head aparece la referencia a la nueva branch creada: master.

joan@jomaora:~/testGit/testMockito/.git$ tree
.
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   └── ...
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│   └── heads
│   └── master
├── objects
│   ├── 01
│   │   ...
│   │   ...
│   ├── info
│   └── pack
└── refs
├── heads
│   └── master
└── tags

Ahora realicemos un cambio en la working copy. Para ver cuales son los impactos de los cambios, tal como se haría en SVN con los comandos svn status y svn diff, podemos hacer:

joan@jomaora:~/testGit/testMockito$ git status
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: src/main/java/com/jomaora/app/App.java
#
no changes added to commit (use "git add" and/or "git commit -a")

joan@jomaora:~/testGit/testMockito$ git diff
diff --git a/src/main/java/com/jomaora/app/App.java b/src/main/java/com/jomaora/app/App.java
index 28987d2..fd4fff4 100644
--- a/src/main/java/com/jomaora/app/App.java
+++ b/src/main/java/com/jomaora/app/App.java
@@ -1,8 +1,7 @@
package com.jomaora.app;
/**
- * Hello world!
- *
+ * Adding javadoc
*/
public class App
{

Commiteamos

joan@jomaora:~/testGit/testMockito$ git commit -a -m "Adding modifications"
[master d19631e] Adding modifications
1 file changed, 1 insertion(+), 2 deletions(-)

Como podemos ver, el mensaje resultado del commit nos indica sobre que branch estamos commiteando (master). El otro comando util es git log, que permite listar los commits de han ocurrido en master.

joan@jomaora:~/testGit/testMockito$ git log
commit d19631e828371823d0f9af3d6b5ba01ede63b39a
Author: Joan Ortega-Ardila <jmortega@ekino.com>
Date: Mon Aug 13 14:46:18 2012 +0200
Adding modifications

commit e574777049f566b9afa86b983f5fda4028ff0a6b
Author: Joan Ortega-Ardila <jmortega@ekino.com>
Date: Mon Aug 13 14:20:24 2012 +0200
Adding files on Git repository

Finalmente un último git status nos va a motrar que la working copy esta limpia.

joan@jomaora:~/testGit/testMockito$ git status
# On branch master
nothing to commit (working directory clean)

Categorías:Comandos Linux, Git Etiquetas: , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Hype Driven Development

coz' geeks love new stuff !

My experiments with SCRUM

Site to discuss Agile (Scrum, XP, etc) concepts and ideas.

CommitStrip

Mi propia cheatsheet...

Chris Aniszczyk's (zx) diatribe

work. life. open source. diatribes.

GermanTrevi

repositorio de mi mente...

A %d blogueros les gusta esto: