diff --git a/src/levels/mixed/describe.js b/src/levels/mixed/describe.js index 0bef2010..24df2e35 100644 --- a/src/levels/mixed/describe.js +++ b/src/levels/mixed/describe.js @@ -8,6 +8,7 @@ exports.level = { "de_DE": "Git Describe", "ja" : "Git Describe", "es_AR": "Git Describe", + "es_ES": "Git Describe", "pt_BR": "Git Describe", "gl" : "Git Describe", "zh_TW": "git describe", @@ -22,6 +23,7 @@ exports.level = { "de_DE": "Committe nur einmal auf bugFix, wenn du soweit bist", "ja" : "次に進む準備が整ったなら、bugFixに対して一回commitしてください", "es_AR": "Simplemente commiteá una vez en bugFix cuando estés listo para seguir", + "es_ES": "Simplemente crea un commit en la rama bugFix cuando estés listo para seguir", "pt_BR": "Simplesmente commite uma vez em bugFix quando quiser parar de experimentar", "gl" : "Simplemente fai commit en bugFix cando estés listo para continuar.", "zh_TW": "當你要移動的時候,只要在 bugFix 上面 commit 就好了", @@ -348,6 +350,69 @@ exports.level = { } ] }, + "es_ES": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "### Git Describe", + "", + "Como los tags sirven tanto para marcar \"hitos\" en el código, git tiene un comando para *describir* (_describe_) dónde estás relativo al \"hito\" más cercano (digamos, \"tag\"). Y ese comamndo se llama ¡`git describe`!", + "", + "Git describe puede ayudarte a saber dónde estás después de que te hayas movido varios commits hacia adelante o atrás en la historia. Esto puede pasarte después de que termines un git bisect (una búsqueda que te ayuda a debuggear problemas) o cuando te sientas delante de la computadora de un compañero de trabajo que acaba de volver de unas vacaciones." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Git describe tiene la siguiente forma:", + "", + "`git describe `", + "", + "Donde `` es cualquier cosa que git puede resolver a un commit. Si no especificas ninguna referencia, git simplemente usa el commit en el que estás parado ahora (`HEAD`).", + "", + "La salida de ese comando se ve así:", + "", + "`__g`", + "", + "Donde `tag` es el tag más cercano en la historia, `numCommits` dice a cuántos commits de ese tag estás, y `` es el hash del commit que estás describiendo." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Veamos un ejemplo breve. Para este árbol de commits:" + ], + "afterMarkdowns": [ + "El comando `git describe master` mostraría:", + "", + "`v1_2_gC2`", + "", + "Mientras que `git describe side` debería mostrar:", + "", + "`v2_1_gC4`" + ], + "command": "git tag v2 C3", + "beforeCommand": "git commit; go -b side HEAD~1; gc; gc; git tag v1 C0" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "¡Eso es prácticamente todo lo que hay sobre git describe! Prueba con algunas referencias en este nivel para familiarizarte con el comando.", + "", + "Cuando estés listo, crea un commit para terminar el nivel. Te estamos dando una gratis :P" + ] + } + } + ] + }, "pt_BR": { "childViews": [ { diff --git a/src/levels/mixed/grabbingOneCommit.js b/src/levels/mixed/grabbingOneCommit.js index 42e748d3..86400368 100644 --- a/src/levels/mixed/grabbingOneCommit.js +++ b/src/levels/mixed/grabbingOneCommit.js @@ -19,6 +19,7 @@ exports.level = { "fr_FR": "Choisir seulement 1 commit", "de_DE": "Einen Commit pflücken", "es_AR": "Tomando un único commit", + "es_ES": "Tomando un único commit", "pt_BR": "Pegando um único commit", "gl" : "Escollendo un único commit", "ja": "一つのコミットのみを取得", @@ -32,6 +33,7 @@ exports.level = { "de_DE": "Vergiss nicht: hier kommst du mit interaktivem Rebase oder Cherry-Picking weiter", "fr_FR": "Souvenez-vous, les rebases interactifs ou cherry-pick sont vos amis ici.", "es_AR": "Acordate, el rebase interactivo o cherry-pick son tus amigos acá", + "es_ES": "Recuerda, el rebase interactivo y el cherry-pick son tus amigos", "pt_BR": "Lembre-se, o rebase interativo ou o cherry-pick são seus amigos aqui", "gl" : "Recorda, o rebase interativo ou cherry-pick é un dos teus colegas aquí", "ja": "このレベルではインタラクティブモードのrebaseやcherry-pickがクリアのカギです", @@ -157,6 +159,45 @@ exports.level = { } ] }, + "es_ES": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Commits localmente stackeados", + "", + "Esta es una escena que suele pasar cuando uno desarrolla: estoy tratando de encontrar un bug bastante escurridizo. Para ayudar en mi tarea de detective, agrego un par de comandos de debug, y algunas sentencias para imprimir el estado de mi sistema.", + "", + "Todas estas cosas de imprimir y debuggear estan en su propia rama. Finalmente encuentro el problema, lo soluciono, ¡y disfruto!", + "", + "El único problema es que ahora necesito llevar mi `bugFix` a la rama `master`. Si simplemente fast-forwardeo `master`, entonces `master` va a tener todos mis agregados de debugging, lo cual no es deseable. Tiene que haber otro modo..." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Necesitamos decirle a git que sólo copie uno de los commits. Esto es tal como los niveles anteriores de mover commits por ahí -- podemos usar los mismos comandos:", + "", + "* `git rebase -i`", + "* `git cherry-pick`", + "", + "Para conseguir este resultado." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Este es un nivel más avanzado, así que debes decidir cuál de los dos comandos quieres usar, pero para completar el nivel asegurate de que `master` recibe el commit que `bugFix` referencia." + ] + } + } + ] + }, "pt_BR": { "childViews": [ { diff --git a/src/levels/mixed/jugglingCommits.js b/src/levels/mixed/jugglingCommits.js index 747a518e..f4b254c8 100644 --- a/src/levels/mixed/jugglingCommits.js +++ b/src/levels/mixed/jugglingCommits.js @@ -23,6 +23,7 @@ exports.level = { "de_DE": "Jonglieren mit Commits", "fr_FR": "Jongler avec les commits", "es_AR": "Haciendo malabares con los commits", + "es_ES": "Haciendo malabares con los commits", "pt_BR": "Malabarismo com commits", "gl" : "Argallando cos commits", "ja": "コミットをやりくりする", @@ -36,6 +37,7 @@ exports.level = { "de_DE": "Der erste Befehl ist git rebase -i HEAD~2", "fr_FR": "La première commande est git rebase -i HEAD~2", "es_AR": "El primer comando es git rebase -i HEAD~2", + "es_ES": "El primer comando es git rebase -i HEAD~2", "pt_BR": "O primeiro comando é git rebase -i HEAD~2", "gl" : "O primeiro comando é git rebase -i HEAD~2", "ja": "最初に打つコマンドはgit rebase -i HEAD~2", @@ -150,6 +152,41 @@ exports.level = { }, ] }, + "es_ES": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Haciendo malabares con los commits", + "", + "Esta es otra situación algo común. Tienes algunos cambios (`newImage`) y otro conjunto de cambios (`caption`) que están relacionados, entonces están apilados en tu repositorio uno encima del otro (es decir, uno después del otro).", + "", + "El tema es que a veces tienes que hacer una pequeña modificación a un commit previo. En este caso, la gente de diseño requiere que cambiemos ligeramente las dimensiones de `newImage`, ¡incluso aunque ese commit ya se encuentre atrás en nuestra historia!" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Superaremos esta dificultad haciendo lo siguiente:", + "", + "* Vamos a reordenar los commits para que el que queremos cambiar quede arriba de los demás con `git rebase -i`", + "* Vamos a hacer `commit --amend` para aplicar la ligera modificación", + "* Después vamos a reordenar los commits a como estaban con `git rebase -i`", + "* Finalmente, vamos a mover master a esta parte actualizada de nuestro árbol de commits para terminar el nivel (usando el método que prefieras)", + "", + "Hay varias maneras de lograr este objetivo en general (ya te veo haciéndole ojitos al cherry-pick), y veremos algunos más después, pero por ahora concentrémonos en esta técnica.", + "", + "Por último, presta atención al estado final -- como movemos los commits dos veces, ambos quedan con un apóstrofe. El commit que corregimos tiene un apóstrofe extra, y así nos queda nuestro árbol final", + "", + "Habiendo dicho eso, puedo comparar los niveles basándome ahora en la estructura y las diferencias relativas de apóstrofes. Mientras que tu rama `master` tenga la misma estructura y diferencias relativas de apóstrofes, te voy a dar el puntaje completo" + ] + } + }, + ] + }, "pt_BR": { "childViews": [ { diff --git a/src/levels/mixed/jugglingCommits2.js b/src/levels/mixed/jugglingCommits2.js index 29a97a31..bfac0c16 100644 --- a/src/levels/mixed/jugglingCommits2.js +++ b/src/levels/mixed/jugglingCommits2.js @@ -21,6 +21,7 @@ exports.level = { "en_US": "Juggling Commits #2", "fr_FR": "Jongler avec les commits #2", "es_AR": "Haciendo malabares con los commits #2", + "es_ES": "Haciendo malabares con los commits #2", "pt_BR": "Malabarismo com commits #2", "gl" : "Argallando cos commits #2", "de_DE": "Jonglieren mit Commits Teil 2", @@ -34,6 +35,7 @@ exports.level = { "en_US": "Don't forget to forward master to the updated changes!", "fr_FR": "N'oubliez pas d'appliquer les changements depuis la branche master", "es_AR": "¡No te olvides de avanzar master a los cambios actualizados!", + "es_ES": "¡No te olvides de avanzar master a los cambios actualizados!", "pt_BR": "Não se esqueça de avançar a referência do master para as mudanças efetuadas!", "gl" : "¡Non te esquezas de avanzar master ós cambios actualizados!", "de_DE": "Vergiss nicht den master auf die aktuelle Version vorzuspulen", @@ -174,6 +176,49 @@ exports.level = { } ] }, + "es_ES": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Haciendo malabares con los commits #2", + "", + "*Si no completaste Haciendo malabares con los commits #1 (el nivel anterior), hazlo antes de continuar*", + "", + "Como viste en el último nivel, usamos `rebase -i` para reordenar los commits. Una vez que el commit que queríamos cambiar se encontraba arriba de todo, pudimos `--amend`earlo fácilmente y reordenarlo a como queríamos.", + "", + "El único problema con esto es que hay mucho reordenamiento, que puede generar conflictos al rebasear. Veamos otro método usando `git cherry-pick`" + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Recuerda que git cherry-pick va a traer un commit de cualquier parte del árbol sobre HEAD (siempre que ese otro commit no sea un ancestro de HEAD).", + "", + "Una pequeña demo para refrescar la idea:" + ], + "afterMarkdowns": [ + "¡Bien! Sigamos..." + ], + "command": "git cherry-pick C2", + "beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Entonces, en este nivel vamos a lograr el mismo objetivo de corregir `C2`, pero sin usar `rebase -i`. Te dejo a ti el darte cuenta cómo :D", + "", + "Recuerda, la cantidad exacta de apóstrofes (') en el commit no es importante, sólo la diferencia relativa. Por ejemplo, le voy a dar una puntuación a un árbol que coincida con el objetivo pero cuyos commits tengan todos un apóstrofe extra" + ] + } + } + ] + }, "pt_BR": { "childViews": [ { diff --git a/src/levels/mixed/tags.js b/src/levels/mixed/tags.js index 511d62f0..860ddcfb 100644 --- a/src/levels/mixed/tags.js +++ b/src/levels/mixed/tags.js @@ -7,6 +7,7 @@ exports.level = { "de_DE": "Git Tags", "ja" : "Gitのタグ", "es_AR": "Tags en git", + "es_ES": "Tags en git", "pt_BR": "Tags no Git", "gl" : "Etiquetas en git", "fr_FR": "Git Tags", @@ -22,6 +23,7 @@ exports.level = { "de_DE": "Du kannst den Checkout entweder direkt auf den Commit oder das Tag machen.", "ja" : "コミットを直接チェックアウトできますが、簡単にタグでチェックアウトすることも可能!", "es_AR": "Podés checkoutear directamente el commit, ¡o simplemente el tag!", + "es_ES": "Puedes hacer checkout directamente el commit, ¡o simplemente el tag!", "pt_BR": "Você pode fazer checkout diretamente no commit ou na tag correspondente!", "gl" : "Podes saltar directamente ó commit, ¡ou a etiqueta, que é máis doado!", "zh_TW": "你可以直接 checkout 到 commit 上,或是簡單的 checkout 到 tag 上", @@ -291,6 +293,58 @@ exports.level = { } ] }, + "es_ES": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Tags en git", + "", + "Como aprendiste en lecciones anteriores, las ramas pueden moverse fácilmente, y en general van referenciando distintos commits a medida que el trabajo se va completando en ellas. Las ramas cambian fácilmente, suelen ser temporales, y siempre cambiantes.", + "", + "Si ese es el caso, te podrías estar preguntando si hay una manera de marcar *permanentemente* puntos en la historia de tu proyecto. Para cosas como releases mayores o grandes merges, ¿hay algún modo de marcar esos commits con algo más permanente que un branch?", + "" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "¡Seguro que hay! Los tags de git soportan exactamente este caso de uso -- marcan (bastante) permanentemente determinados commits como \"hitos\" que puedes referenciar como a un branch.", + "", + "Aún más importante, los tags no avanzan cuando se crean nuevos commits. No puedes hacer checkout a un tag y completar el trabajo en ese tag - los tags son marcas fijas en el árbol de commits que designan ciertos puntos.", + "", + "Veamos cómo se ven los tags en práctica..." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Creemos un tag en `C1`, que es nuestro prototipo de la versión 1" + ], + "afterMarkdowns": [ + "¡Ahí está! Bastante simple. Nombramos al tag `v1` y referenciamos explícitamente al commit `C1`. Si no especificas el commit, git va a usar al apuntado por `HEAD`" + ], + "command": "git tag v1 C1", + "beforeCommand": "git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Para este nivel, simplemente crea los tags en la visualización final y después haz checkout con `v1`. Observa cómo entras en el estado detached -- esto es porque no puedes hacer commit directamente sobre el tag `v1`.", + "", + "En el próximo nivel vamos a examinar un caso de uso más interesante para los tags." + ] + } + } + ] + }, "pt_BR": { "childViews": [ {