Ejemplo¶
Esta página une toda la sección recreando cómo se inició este mismo proyecto,
nlp-esperantilo — desde una carpeta vacía hasta un repositorio subido a
GitHub, con una rama y un conflicto de fusión por el camino.
Puedes seguirlo en una carpeta vacía y reproducir cada paso. Los comandos son las
líneas que empiezan por $; todo lo demás es salida. Los hashes provienen de una
ejecución concreta — los tuyos serán distintos, porque un hash se calcula a partir
del contenido, el autor y la fecha.
Qué necesitas
Git instalado (git --version debería imprimir una versión) y, para el
último paso, una cuenta de GitHub. Configura tu identidad una vez, para que
tus commits se te atribuyan a ti:
1. Crear el repositorio¶
Empieza en una carpeta vacía y conviértela en un repositorio Git:
$ mkdir nlp-esperantilo
$ cd nlp-esperantilo
$ git init
Initialized empty Git repository in /home/user/nlp-esperantilo/.git/
Antes de añadir nada, crea un .gitignore para que los archivos generados
nunca entren en el historial (véase Comandos § .gitignore):
2. Añadir archivos y hacer el primer commit¶
Crea un primer archivo — el README del proyecto:
Comprueba el estado. Git ve dos archivos nuevos que aún no rastrea:
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
README.md
nothing added to commit but untracked files present
Prepara ambos archivos y registra el primer commit:
$ git add .
$ git commit -m "Initial commit"
[main (root-commit) 29434cf] Initial commit
2 files changed, 4 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
Añade un poco más al README y haz un segundo commit, para tener algo de historial:
$ printf '\nA rule-based NLP library for Esperanto.\n' >> README.md
$ git add README.md
$ git commit -m "Add README"
[main 7b0978f] Add README
1 file changed, 2 insertions(+)
3. Inspeccionar el estado¶
Tres comandos responden a "¿dónde estoy?":
$ git log --oneline
7b0978f Add README
29434cf Initial commit
$ git status
On branch main
nothing to commit, working tree clean
$ git diff
git log muestra los dos commits, git status confirma que no hay nada
pendiente, y git diff no imprime nada porque no hay cambios sin confirmar. Este
es el punto de partida limpio para trabajo nuevo.
4. Crear una rama y trabajar en ella¶
El trabajo nuevo va en su propia rama, no directamente en main. Crea una y
cámbiate a ella:
Añade el documento de diseño de la documentación y confírmalo:
$ printf '# DOCS DESIGN\n\nStructure of the documentation.\n' > docs-design.md
$ git add docs-design.md
$ git commit -m "Add docs design"
[docs-design 5f46a63] Add docs design
1 file changed, 3 insertions(+)
La rama docs-design está ahora un commit por delante de main. Nada en main
cambió — puedes cambiar de una a otra para comprobarlo:
$ git checkout main
Switched to branch 'main'
$ ls
README.md # docs-design.md no está aquí; vive en la otra rama
$ git checkout docs-design
Switched to branch 'docs-design'
5. Fusionar la rama de vuelta y resolver un conflicto¶
Para provocar un conflicto, haremos que ambas ramas cambien la misma línea del README.
En main, ajusta la línea de descripción:
$ git checkout main
$ printf '# NLP Esperantilo\n\nAn NLP library for the Esperanto language.\n' > README.md
$ git commit -am "Reword README description"
[main a1b2c3d] Reword README description
En docs-design, cambia la misma línea de otra forma:
$ git checkout docs-design
$ printf '# NLP Esperantilo\n\nA rule-based NLP toolkit for Esperanto.\n' > README.md
$ git commit -am "Reword README description"
[docs-design e4f5a6b] Reword README description
Ahora fusiona docs-design en main. Git no puede decidir qué redacción gana:
$ git checkout main
$ git merge docs-design
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
Abre README.md. Git ha marcado la región en conflicto:
# NLP Esperantilo
<<<<<<< HEAD
An NLP library for the Esperanto language.
=======
A rule-based NLP toolkit for Esperanto.
>>>>>>> docs-design
- Todo lo que está entre
<<<<<<< HEADy=======es tu versión (main). - Todo lo que está entre
=======y>>>>>>> docs-designes la versión entrante.
Resuélvelo editando el archivo hasta dejar el texto final que quieres y borrando las tres líneas de marcadores:
Luego prepara el archivo resuelto y completa la fusión:
$ git add README.md
$ git commit -m "Merge docs-design into main"
[main 4d9b2fe] Merge docs-design into main
El historial muestra ahora ambas líneas de trabajo unidas por un commit de fusión:
$ git log --oneline --graph
* 4d9b2fe Merge docs-design into main
|\
| * e4f5a6b Reword README description
* | a1b2c3d Reword README description
|/
* 7b0978f Add README
* 29434cf Initial commit
La rama docs-design ha cumplido su propósito y puede borrarse:
6. Conectar un remoto y subir (push)¶
Hasta ahora todo vive en tu máquina. Para compartirlo, crea un repositorio vacío
en GitHub (véase la sección de GitHub), luego
conéctalo como remoto origin y haz push:
$ git remote add origin https://github.com/jparisu/nlp-esperantilo.git
$ git push -u origin main
Enumerating objects: 12, done.
Writing objects: 100% (12/12), 1.24 KiB, done.
To https://github.com/jparisu/nlp-esperantilo.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
La opción -u vincula tu main local con origin/main, así que a partir de
ahora bastan un simple git push y git pull.
Resumen¶
En una sesión corta has usado todas las ideas centrales de esta sección:
initpara crear un repositorio y.gitignorepara mantenerlo limpio,addycommitpara registrar instantáneas,status,logydiffpara inspeccionar el estado,branch/checkoutpara trabajar de forma aislada,merge—incluido resolver un conflicto— para juntar el trabajo,remoteypushpara compartirlo con el mundo.
Este es exactamente el ciclo que repetirás, una y otra vez, durante el resto del proyecto. El siguiente paso es hacerlo en equipo, que es de lo que trata la sección de GitHub.