Skip to content

Commit 07ec5ca

Browse files
committed
Ajustando estructura.
1 parent a0ed8d7 commit 07ec5ca

8 files changed

+356
-383
lines changed

README.md

Lines changed: 18 additions & 383 deletions
Large diffs are not rendered by default.

creacion_gestion_ramas.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<div align = "center">
2+
<img src = "imagenes/logo_git.png" width = "70" height = "70" />
3+
</div>
4+
5+
# Creación y gestión de ramas.
6+
7+
El manejo de *ramas* es muy sencillo en *Git* y básicamente se reduce a 3 comandos:
8+
9+
* `git branch [nombre-rama]` **crea** la rama `nombre-rama`. Si se omite el parámetro `nombre-rama` el comando muestra todas las ramas del repositorio.
10+
* `git checkout [nombre-rama]` nos **cambia** a la rama `nombre-rama`.
11+
* `git checkout -b [nombre-rama]` **crea** la rama `nombre-rama` y nos **cambia** de una vez a la rama.
12+
* `git checkout -d [nombre-rama]` **elimina** la rama [nombre-rama].
13+
* `git merge [nombre-rama]` **combina** la rama activa con [nombre-rama].
14+
15+
Siempre vamos a tener una rama `master` que será la rama principal. Supongamos que creamos la rama `desarrollo` para hacer pruebas:
16+
```bash
17+
$ git checkout -b desarrollo
18+
```
19+
En `desarrollo` creamos nuevos archivos y modificamos archivos ya existentes. Para **unir** (*merge*) estos cambios a la rama `master` primero tenemos que hacer *commit* en `desarrollo` y luego **cambiarnos** a la rama `master` así:
20+
```bash
21+
$ git commit -am "Agregando cambios finales a desarrollo."
22+
$ git checkout master
23+
```
24+
Estando ya en la rama `master` podemos **unir** (*merge*) los cambios en la rama `desarrollo` así:
25+
```bash
26+
$ git merge desarrollo
27+
```
28+
Luego si todo fue OK podemos eliminar la rama `desarrollo` así:
29+
```bash
30+
$ git checkout -d desarrollo
31+
```
32+
Cuando se hace un *merge* es posible que hayan conflictos al tratar de cambiar archivos que ya tengan otros cambios, estos conflictos deberán **resolverse manualmente** antes de intentar un nuevo *merge*. Para obtener más información sobre el manejo de las ramas podemos ir [**aquí**](https://git-scm.com/book/es/v2/Ramificaciones-en-Git-¿Qué-es-una-rama%3F).
33+
34+
<a href = "README.md">[IR AL ÍNDICE]</a>

flujo_trabajo_local.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<div align = "center">
2+
<img src = "imagenes/logo_git.png" width = "70" height = "70" />
3+
</div>
4+
5+
# Flujo de trabajo local.
6+
7+
Los archivos en un repositorio local *Git* pasan por 3 fases diferentes:
8+
9+
1. **_Working Directory_** (Directorio de Trabajo).
10+
2. **_Staging Área_** (Área de Preparación o *Index*).
11+
3. **_Git Directory_** (Directorio Git o *HEAD*).
12+
13+
La siguiente figura muestra el esquema de flujo de trabajo local de *Git*:
14+
15+
<p align = "center"><img src = "imagenes/git_flujo_trabajo.png"/></p>
16+
17+
## Fase 1: *Working Directory*.
18+
19+
En esta fase podemos hacer cualquier cambio en los archivos sin afectar nuestro repositorio (*Git Directory*). En cuanto modificamos algo en nuestro código, éste tendrá status de *modificado*. Si ejecutamos el comando `git status` nos mostrará qué archivos han sido modificados (creados o eliminados).
20+
21+
Una vez que hemos hecho los cambios necesarios, pasamos nuestros archivos al *Staging Area* (*Index*) con el comando `git add [archivos]`. Si existen más archivos modificados que queramos pasar podemos listarlos con `git add archivo1.py archivo2.py ...`, o también con el comando `git add .` agregamos **todos** los archivos modificados del *Working Directory* al *Staging Area*.
22+
23+
Cuando se pasan los archivos del *Working Directory* al *Staging Area*, se cambia el estado del código de *modificado* a *preparado*. Para **deshacer** los cambios en el *Working Directory* con el último *commit* debe usarse el comando `git checkout -- [archivo]`. Los archivos que estén en el *Staging Area* no serán modificados.
24+
25+
## Fase 2: *Staging Area* (*Index*).
26+
27+
Para pasar nuestro código del *Staging Area* al *Git Directory* lo hacemos con el comando `git commit -m "[descripción del commit]"`. Hay distintas modalidades para el comando `git commit`que pueden leerse [**aquí**](https://git-scm.com/book/es/v2/Fundamentos-de-Git-Guardando-cambios-en-el-Repositorio). Cuando hacemos el `commit` el código pasa del estado *preparado* a *confirmado*. Para **devolver** un archivo del *Staging Área* al *Working Directory* debe ejecutarse `git reset HEAD [archivo]`.
28+
29+
## Fase 3: *Git Directory* (*HEAD*).
30+
31+
Una vez que el código esta *confirmado* ya está listo para actualizarse en un servidor remoto de *Git* (*GitHub*, *GitLab*, *Bitbucket*, etc.) como veremos más adelante.
32+
33+
## Ignorar archivos.
34+
35+
A veces será deseable que *Git* no añada algunos archivos o directorios al *Working Directory*, o que simplemente estos archivos o directorios no aparezcan como no rastreados. Este suele ser el caso de archivos generados automáticamente o archivos de backup, etc. En estos casos, puedes crear un archivo llamado `.gitignore` que liste los archivos o patrones de nombres de archivos para evitar que estos sean tomados en cuenta por *Git*. Podemos encontrar varios ejemplos del archivo `.gitignore` [**aquí**](https://git-scm.com/book/es/v2/Fundamentos-de-Git-Guardando-cambios-en-el-Repositorio).
36+
37+
En general, el **flujo de trabajo local** básico en *Git* podríamos resumirlo de la siguiente manera:
38+
39+
1. Modificamos una serie de archivos en el *Working Directory*.
40+
2. Preparamos los archivos añadiéndolos al *Staging Area* con `git add`.
41+
3. Confirmamos los cambios con `git commit`, pasando así los archivos al *Git Directory*, creando una copia instantánea y permanente en nuestro directorio de *Git*.
42+
43+
En algunos casos la Fase 2, pasar los archivos al *Staging Area*, puede **omitirse** del *flujo de trabajo*, de tal manera que podemos pasar los archivos **directamente** del *Working Directory* al *Git Directory* añadiendo la opción `-a` al comando `git commit`.
44+
45+
## Ejemplos de flujo de trabajo local.
46+
47+
1. Agrega el archivo del *Working Directory* al *Staging Area* y luego al *Git Directory* (ruta completa):
48+
```bash
49+
$ git add archivo1.py
50+
$ git commit -m "Corrección de error."
51+
```
52+
2. Agrega los archivos del *Working Directory* al *Staging Area* y luego al *Git Directory* (ruta completa):
53+
```bash
54+
$ git add archivo1.py archivo2.py archivo3.py
55+
$ git commit -m "Agregando nueva función."
56+
```
57+
3. Agrega **todos** los cambios del *Working Directory* al *Staging Area* y luego al *Git Directory* (ruta completa):
58+
```bash
59+
$ git add .
60+
$ git commit -m "Se refactorizó las clases no asociadas."
61+
```
62+
4. Agrega todos los cambios del *Working Directory* **directamente** al *Git Directory* (se omite la Fase 2, pero ruta completa):
63+
```bash
64+
$ git commit -am "Cambio de formatos."
65+
```
66+
5. Agrega los `archivo1.py` y `archivo2.py` del *Working Directory* al *Git Directory*, luego se arrepiente y devuelve el archivo1.py al *Working Area* para finalmente pasar solo el archivo2.py al *Git Directory* (ruta incompleta):
67+
```bash
68+
$ git add archivo1.py archivo2.py
69+
$ git reset HEAD archivo1.py
70+
$ git commit -m "Corrección del error en el archivo2.py"
71+
```
72+
6. Igual que el ejemplo anterior, luego del *commit* modifica el `archivo2.py`, se arrepiente de los cambios y lo restituye con la versión del repositorio:
73+
```bash
74+
$ git add archivo1.py archivo2.py
75+
$ git reset HEAD archivo1.py
76+
$ git commit -m "Corrección del error en el archivo2.py"
77+
# luego modifica el archivo2.py en el *Working Directory*
78+
$ git checkout -- archivo2.py
79+
```
80+
Como podemos notar, en el *flujo de trabajo* local básico solo manejamos 4 comandos:
81+
1. `git add` para pasar los cambios del *Working Directory* al *Staging Area*.
82+
2. `git commit` para pasar los cambios del *Staging Area* al *Git Directory*.
83+
3. `git reset HEAD` para **retroceder** y pasar los cambios del *Staging Area* al *Working Directory*
84+
4. `git checkout --` para **retroceder** y pasar los cambios del *Git Directory* al *Working Directory*.
85+
86+
<a href = "README.md">[IR AL ÍNDICE]</a>

git_instalacion_configuracion.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<div align = "center">
2+
<img src = "imagenes/logo_git.png" width = "70" height = "70" />
3+
</div>
4+
5+
# ¿Qué es GIT?
6+
7+
[GIT](https://git-scm.com/book/es/v2) es un [sistema de control de versiones](https://es.wikipedia.org/wiki/Control_de_versiones) que nos permite:
8+
9+
1. Trabajar en equipo de forma remota, simple y óptima mientras desarrollamos software.
10+
11+
2. Controlar y hacer seguimiento de todos los cambios en el código fuente, pudiendo volver atrás en el tiempo y abrir diferentes ramas de desarrollo.
12+
13+
<a href = "#indice">[IR AL ÍNDICE]</a>
14+
15+
<a name = "instalacion"></a>
16+
17+
## Instalación y configuración.
18+
19+
Para instalar *Git* en un sistema operativo *Linux* con paquetería *apt* (*Debian*, *Ubuntu*, *Linux Mint*, etc) basta con ejecutar el siguiente comando desde la terminal:
20+
21+
```bash
22+
$ sudo apt-get install git
23+
```
24+
Para la instalación en otros sistemas operativos se puede consultar [**aquí**](https://git-scm.com/book/es/v2/Inicio---Sobre-el-Control-de-Versiones-Instalación-de-Git).
25+
26+
Luego de la instalación deberán establecerse las **variables de configuración** de *Git* para personalizar el entorno de trabajo. Es necesario hacer esta configuración **solamente una vez** en el computador, ya que estas variables se mantendrán entre actualizaciones. También se pueden cambiar estas variables en cualquier momento, volviendo a ejecutar los comandos correspondientes.
27+
28+
*Git* trae una herramienta llamada `git config`, que nos permite establecer y obtener las variables de configuración las cuales controlan el aspecto y funcionamiento de *Git.*
29+
30+
## Estableciendo la identidad del usuario.
31+
32+
Lo primero que debe hacerse luego de instalar *Git* es **establecer la identidad del usuario**. Esto es importante porque los *commits* de *Git* usan esta información de manera automática en todos los *commits* que se hagan en el repositorio.
33+
34+
Las principales variables de configuración son el **nombre de usuario** y el **email**. Para establecer estas variables hay que ejecutar en la terminal las siguientes instrucciones:
35+
36+
```bash
37+
$ git config --global user.name "Pedro Pérez"
38+
$ git config --global user.email pedro.perez@gmail.com
39+
```
40+
Para comprobar la configuración se puede usar el comando `git config --list`, el cual mostrará los cambios recientes además de las variables de configuración adicionales:
41+
42+
```bash
43+
$ git config --list
44+
user.name=Pedro Pérez
45+
user.email=pedro.perez@gmail.com
46+
color.status=auto
47+
color.branch=auto
48+
color.interactive=auto
49+
color.diff=auto
50+
```
51+
Opcionalmente también pueden establecerse el **editor** por defecto a usar para los *commits*, y establecer mostrar sólo una línea por cada `commit` en la traza:
52+
```bash
53+
$ git config --global core.editor [nombre-editor]
54+
$ git config --global format.pretty oneline
55+
```
56+
57+
## Obteniendo ayuda.
58+
59+
Para obtener ayuda sobre cualquier comando de *Git* podemos usar:
60+
```bash
61+
$ git help [comando]
62+
```
63+
Sin embargo, existen dos formas adicionales para obtener ayuda de *Git* que se pueden consultar [**aquí**](https://git-scm.com/book/es/v2/Inicio---Sobre-el-Control-de-Versiones-¿Cómo-obtener-ayuda%3F)
64+
65+
<a href = "#README.md">[IR AL ÍNDICE]</a>

herramientas_aadicionales.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<div align = "center">
2+
<img src = "imagenes/logo_git.png" width = "70" height = "70" />
3+
</div>
4+
5+
# Herramientas adicionales Git.
6+
7+
Los 4 comandos de la sección anterior son básicos para el *flujo de trabajo* local y de algún modo son suficientes, pero existen 3 comandos adicionales que **complementan** las tareas: `git diff`, `git log` y `git tag`.
8+
9+
## Observando las diferencias entre archivos.
10+
11+
Siempre es posible ver los cambios o diferencias de los archivos en las distintas fases, por ejemplo:
12+
* `git diff` muestra las diferencias entre los archivos entre el *Working Directory* y *Staging Area*.
13+
* `git diff --staged` muestra las diferencias entre los archivos entre el *Staging Area* y el *Git Directory*.
14+
15+
El comando `git diff` tiene múltiples opciones que pueden leerse [**aquí**](https://git-scm.com/book/es/v2/Fundamentos-de-Git-Guardando-cambios-en-el-Repositorio).
16+
17+
## Observando la historia de commits.
18+
19+
También siempre es posible ver el *historial* de cambios del repositorio *Git Directory* con el comando `git log`. Este comando tiene múltiples opciones las cuales pueden leerse [**aquí**](https://git-scm.com/book/es/v2/Fundamentos-de-Git-Ver-el-Historial-de-Confirmaciones).
20+
21+
## Añadiendo tags a los commits.
22+
23+
Cuando vemos el historial de los *commits* con `git log` podemos ver algo como esto:
24+
```bash
25+
commit eece07985eec4d1ccad5cd8022e6a806086dcbd2
26+
Author: Edgard Decena <edecena@gmail.com>
27+
Date: Thu Sep 26 04:37:46 2019 -0400
28+
29+
Más ejemplos y resumiendo el flujo de trabajo local básico.
30+
31+
commit 81d19320683852a928d35759b7173b098ac1d126
32+
Author: Edgard Decena <edecena@gmail.com>
33+
Date: Wed Sep 25 23:38:10 2019 -0400
34+
35+
Correcciones varias.
36+
37+
commit c0961e1ee659f56713e7389fc1e293ff1f68883b
38+
Author: Edgard Decena <edecena@gmail.com>
39+
Date: Wed Sep 25 23:34:52 2019 -0400
40+
41+
Agregando subtítulos de diff, log y tag. Arreglos varios.
42+
```
43+
Sin embargo se recomienda crear **etiquetas** (*tags*) para aquellos *commits* que marquen un *hito* o que sean importantes, como por ejemplo una **versión** del software. Para crear las etiquetas se usa el comando `git tag`. Veamos el siguiente ejemplo:
44+
```bash
45+
$ git tag 1.0.0 eece07985e
46+
```
47+
Agrega la etiqueta `1.0.0` al primer *commit*, el marcado con el hash `eece07985eec4d1ccad5cd8022e6a806086dcbd2`. Nótese que en el ejemplo solo usamos los 10 primeros caracteres del hash. El comando `git tag` tiene múltiples opciones las cuales pueden leerse [**aquí**](https://git-scm.com/book/es/v2/Fundamentos-de-Git-Etiquetado).
48+
49+
<a href = "README.md">[IR AL ÍNDICE]</a>

participando_github.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<div align = "center">
2+
<img src = "imagenes/logo_git.png" width = "70" height = "70" />
3+
</div>
4+
5+
# Participando en proyectos de GitHub.
6+
7+
Para contribuir en un proyecto de *GitHub* en el que no tengas permisos de escritura (*push*), debes *bifurcar* (hacer un *fork*) sobre el repositorio correspondiente. Esto consiste básicamente en crear una copia completa del repositorio, totalmente bajo tu control, que se almacenará en tu cuenta de *GitHub* y en la cual podrás escribir sin limitaciones.
8+
9+
De esta forma, los proyectos no necesitan añadir colaboradores con acceso *push*. Los usuarios pueden simplemente *bifurcar* un proyecto, enviar sus cambios **a la copia** en su repositorio en *GitHub* y luego remitir esos cambios al propietario del repositorio original para su revisión mediante la creación de un *Pull Request*. Esto permite abrir una discusión para la revisión del código, donde propietario y usuarios pueden comunicarse acerca de los cambios y, en última instancia, el propietario original puede aceptarlos e integrarlos o no en el proyecto original cuando lo considere conveniente. Para más información sobre el proceso de contribución en los proyectos de *GitHub* puede consultar [**aquí.**](https://git-scm.com/book/es/v2/GitHub-Participando-en-Proyectos)
10+
11+
La plataforma *GitHub* tiene una amplia guía de documentación de servicios, tal y como se muestran en la siguiente lista:
12+
13+
* [Understanding the *GitHub* flow.](https://guides.github.com/introduction/flow/)
14+
* [Hello World.](https://guides.github.com/activities/hello-world/)
15+
* [Getting Started with *GitHub* Pages.](https://guides.github.com/features/pages/)
16+
* [Git Handbook.](https://guides.github.com/introduction/git-handbook/)
17+
* [Forking Projects.](https://guides.github.com/activities/forking/)
18+
* [Be Social.](https://guides.github.com/activities/socialize/)
19+
* [Making Your Code Citable.](https://guides.github.com/activities/citable-code/)
20+
* [Mastering Issues.](https://guides.github.com/features/issues/)
21+
* [Mastering Markdown.](https://guides.github.com/features/mastering-markdown/)
22+
* [Documenting your projects on *GitHub*.](https://guides.github.com/features/wikis/)
23+
24+
<a href = "README.md">[IR AL ÍNDICE]</a>

repositorios_locales.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<div align = "center">
2+
<img src = "imagenes/logo_git.png" width = "70" height = "70" />
3+
</div>
4+
5+
# Creando repositorios locales.
6+
7+
Con *Git* se pueden crear nuevos repositorios básicamente de dos maneras:
8+
9+
1. Convirtiendo una carpeta (directorio) en repositorio ejecutando la instrucción `git init` dentro del directorio; o también, si el directorio no existe, puede crearse con el comando `git init [nuevo-repositorio]` que automáticamente creará el directorio con el nombre `nuevo-repositorio`.
10+
11+
2. La otra forma de crear un nuevo repositorio es *clonándolo* desde otra ubicación con el comando `git clone [nombre-repositorio] [dirección URL/URI]`. Por defecto *Git* establece [nombre-repositorio] a *origin* si no se especifica. Por ejemplo, para clonar este repositorio localmente basta con hacer `git clone https://github.com/ejdecena/tutorial_git.git`, el cual creará un directorio local con el nombre de *tutorial_git*. Si se quiere clonar el repositorio a un directorio con otro nombre distinto al original, se puede especificar un tercer parámetro al comando `git clone [nombre-repositorio] [dirección URL/URI] [nombre-directorio]`. Por ejemplo el comando `git clone https://github.com/ejdecena/tutorial_git.git mi_repo` creará el directorio `mi_repo` con el repositorio clonado.
12+
13+
<a href = "README.md">[IR AL ÍNDICE]</a>

0 commit comments

Comments
 (0)