|
| 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> |
0 commit comments