Se mejoran y añaden varios textos al idioma español de México

This commit is contained in:
Seth Karim Luis Martínez 2022-02-12 16:16:36 -06:00
parent ecb97070eb
commit 5dc63e841a
13 changed files with 616 additions and 11 deletions

View file

@ -1508,6 +1508,7 @@ exports.strings = {
'solved-level': {
'__desc__': 'When you solved a level',
'en_US': 'Solved!!\n:D',
'es_MX': '¡Resuelto!',
'de_DE': 'Gelöst!\n:D',
'zh_CN': '恭喜过关!!',
'zh_TW': '恭喜,本關解決了!!',
@ -1710,7 +1711,7 @@ exports.strings = {
'zh_CN': '您正在关卡中,这里有多种形式的帮助,请选择 "help level" (关卡帮助)或 "help general" (一般帮助)',
'zh_TW': '您正在進行關卡中,這裡有多種不同型式的幫助,請選擇 "help level" 來了解這個關卡,或者是選擇 "help general" 來學習如何使用 Learn GitBranching或者是選擇 "objective" 來學習如何解決這個關卡',
'es_AR': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elegí entre "help level" para aprender algo más sobre esta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.',
'es_MX': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elige entre "help level" para aprender algo más sobre ésta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.',
'es_MX': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elige entre "help level" para aprender algo más sobre ésta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "bjective" para aprender a resolver este nivel.',
'es_ES': 'Estás en un nivel, por lo que hay varios tipos de ayuda. Por favor elige "help level" para aprender más sobre esta lección, "help general" para ayuda sobre el uso de Learn GitBranching, o "objective" para aprender a resolver este nivel.',
'pt_BR': 'Você está em um nível, então há vários tipos de ajuda. Selecione "help level" para aprender mais sobre esta lição, "help general" para aprender a usar o Learn GitBranching, ou "objective" ver como resolver o nível.',
'gl' : 'Estás nun nivel, entón hai varios tipos de axuda. Selecione "help level" para aprender máis sobre esta lección, "gelp general" para aprender a usar o Learn Git Branching, ou "objective" para ver como resolver o nivel.',
@ -1802,6 +1803,7 @@ exports.strings = {
'zh_TW': '提示',
'zh_CN': '提示',
'es_ES': 'Objetivo',
'es_MX': 'Objetivo',
'gl' : 'Obxectivo',
'ru_RU': 'Задача',
'uk': 'Задача',
@ -1820,6 +1822,7 @@ exports.strings = {
'zh_TW': 'Git示範',
'zh_CN': 'Git示范',
'es_ES': 'Demostración de Git',
'es_MX': 'Demostración de Git',
'gl' : 'Demostración de Git',
'ru_RU': 'Git демо',
'uk' : 'Git демо',
@ -1954,7 +1957,7 @@ exports.strings = {
'zh_CN': '这个关卡没有介绍!',
'zh_TW': '這關沒有介紹!',
'es_AR': '¡No hay mensaje de inicio para este nivel!',
'es_MX': '¡No hay mensaje de inicio para éste nivel!',
'es_MX': '¡No hay mensaje de inicio para este nivel!',
'es_ES': '¡No hay mensaje de inicio para este nivel!',
'pt_BR': 'Não há mensagem de início para este nível!',
'gl' : '¡Non hai mensaxe de inicio para este nivel!',
@ -1977,7 +1980,7 @@ exports.strings = {
'zh_CN': "呃……,这关好像没有提示 :-/",
'zh_TW': "嗯‧‧‧這關沒有提示 :-/",
'es_AR': 'Mmm... Pareciera no haber pistas para este nivel :-/',
'es_MX': 'Mmm... Parece que no hay pistas para éste nivel. :-/',
'es_MX': 'Mmm... Parece que no hay pistas para Este nivel. :-/',
'es_ES': 'Mmm... Parece que no hay pistas para este nivel. :-/',
'pt_BR': 'Hmm, não existe nenhuma pista para este nível :-/',
'gl' : 'Hmm, non existe ningunha pista para este nivel :-/',
@ -2044,6 +2047,7 @@ exports.strings = {
'cancel-button': {
'__desc__': 'Cancel button label after completing a level',
'en_US': 'Cancel',
'es_MX': 'Cancelar',
'de_DE': 'Abbrechen',
'zh_TW': '取消',
'pl' : 'Powrót',
@ -2054,6 +2058,7 @@ exports.strings = {
'confirm-button': {
'__desc__': 'Confirm button label after completing a level',
'en_US': 'Confirm',
'es_MX': 'Confirmar',
'de_DE': 'Bestätigen',
'zh_TW': '確認',
'pl' : 'Dalej',
@ -2064,6 +2069,7 @@ exports.strings = {
'level-label': {
'__desc__': 'Label in the top of the left-side menu. Rembember to leave some space on the sides',
'en_US': ' Level ',
'es_MX': 'Nivel',
'de_DE': ' Level ',
'zh_TW': '關卡 ',
'it_IT': " Livello ",
@ -2073,6 +2079,7 @@ exports.strings = {
'command-helper-bar-levels': {
'__desc__': 'Levels command label in the bottom command helper bar.',
'en_US': 'Levels',
'es_MX': 'Niveles',
'de_DE': 'Levels',
'zh_TW': '關卡',
'it_IT': "Livelli",
@ -2082,6 +2089,7 @@ exports.strings = {
'command-helper-bar-solution': {
'__desc__': 'Solution command label in the bottom command helper bar.',
'en_US': 'Solution',
'es_MX': 'Solución',
'de_DE': 'Lösung',
'zh_TW': '解答',
'it_IT': "Soluzione",
@ -2091,6 +2099,7 @@ exports.strings = {
'command-helper-bar-reset': {
'__desc__': 'Reset command label in the bottom command helper bar.',
'en_US': 'Reset',
'es_MX': 'Reiniciar',
'de_DE': 'Zurücksetzen',
'zh_TW': '重新開始',
'it_IT': "Reset",
@ -2100,6 +2109,7 @@ exports.strings = {
'command-helper-bar-undo': {
'__desc__': 'Undo command label in the bottom command helper bar.',
'en_US': 'Undo',
'es_MX': 'Deshacer',
'de_DE': 'Rückgängig',
'zh_TW': '回到上一步',
'it_IT': "Annulla",
@ -2109,6 +2119,7 @@ exports.strings = {
'command-helper-bar-objective': {
'__desc__': 'Objective command label in the bottom command helper bar.',
'en_US': 'Objective',
'es_MX': 'Objetivo',
'de_DE': 'Zielvorgabe',
'zh_TW': '目標',
'it_IT': "Obiettivo",
@ -2118,6 +2129,7 @@ exports.strings = {
'command-helper-bar-help': {
'__desc__': 'Help command label in the bottom command helper bar.',
'en_US': 'Help',
'es_MX': 'Ayuda',
'de_DE': 'Hilfe',
'zh_TW': '幫助',
'it_IT': "Aiuto",
@ -2127,6 +2139,7 @@ exports.strings = {
'error-command-currently-not-supported': {
'__desc__': 'Message that appears in git console when command is not supported in the current environment.',
'en_US': 'That command is valid, but not supported in this current environment! Try entering a level or level builder to use that command',
'es_MX': '¡El comando es válido, pero no es suportado en este ambiente! Intenta ingresar un nivel o un constructor de niveles para usar ese comando',
'de_DE': 'Der Befehl ist gültig, aber in der aktuellen Umgebung nicht unterstützt! Rufe ein Level oder den Level-Editor auf, um diesen Befehl zu nutzen',
'zh_TW': '這項指令輸入正確,然而目前的環境不支援此指令。試著前往關卡或關卡建造器中使用此指令。',
'it_IT':
@ -2137,6 +2150,7 @@ exports.strings = {
'interactive-rebase-title': {
'__desc__': 'Title for the popup',
'en_US': 'Interactive Rebase',
'es_MX': 'Rebase interactivo',
'de_DE': 'Interaktives Rebase',
'zh_TW': '互動式 Rebase',
'it_IT': "Rebase interattivo",

View file

@ -380,7 +380,7 @@ exports.level = {
"Las ramas (branches) en Git son increíblemente livianas. Son sólo referencias a un commit específico - nada más. Por esto es que tantos entusiastas de Git siguen el mantra:",
"",
"```",
"branchea temprano, y branchea seguido",
"ramifica temprano, y ramifica seguido",
"```",
"",
"Como no hay consumo extra de almacenamiento ni memoria al hacer varias ramas, es más fácil dividir lógicamente tu trabajo que tener un par de ramas grandes.",
@ -398,7 +398,7 @@ exports.level = {
"Acá vamos a crear una rama nueva llamada `newImage`."
],
"afterMarkdowns": [
"Ahí está, ¡eso es todo lo que hay que hacer para branchear! La rama `newImage` ahora referencia al commit `C1`."
"Ahí está, ¡eso es todo lo que hay que hacer para ramificar! La rama `newImage` ahora hace referencia al commit `C1`."
],
"command": "git branch newImage",
"beforeCommand": ""

View file

@ -330,11 +330,11 @@ exports.level = {
"type": "ModalAlert",
"options": {
"markdowns": [
"## Mergeando ramas",
"## Mezclando ramas",
"",
"¡Genial! Ya sabemos cómo hacer commit y cómo crear ramas. Ahora tenemos que aprender algún modo de unificar el trabajo de dos ramas diferentes. Esto nos va a permitir abrir una nueva rama de desarrollo, implementar alguna nueva funcionalidad, y después unirla de nuevo con el trabajo principal.",
"¡Genial! Ya sabemos cómo hacer commit y cómo crear ramas. Ahora tenemos que aprender algún modo de unificar el trabajo de dos ramas diferentes. Esto nos va a permitir abrir una nueva rama de desarrollo, implementar alguna nueva funcionalidad y después unirla de nuevo con el trabajo principal.",
"",
"El primer método para combinarlas que vamos a explorar es `git merge`. Mergear en Git crea un commit especial que tiene dos padres diferentes. Un commit con dos padres esencialmente significa \"Quiero incluir todo el trabajo de este padre de acá y este otro padre de acá, *y* del conjunto de todos sus ancestros\"",
"El primer método para combinarlas que vamos a explorar es `git merge`. Mezclar en Git crea un commit especial que tiene dos padres diferentes. Un commit con dos padres esencialmente significa \"Quiero incluir todo el trabajo de este padre de acá y este otro padre de acá, *y* del conjunto de todos sus ancestros\"",
"",
"Es más simple visualizarlo, veámoslo a continuación"
]
@ -344,9 +344,9 @@ exports.level = {
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Acá tenemos dos ramas, y cada una tiene un commit que le es único. Esto significa que ninguna de las ramas incluye \"todo el trabajo\" que hay en nuestro repositorio. Hagamos un merge para solucionar eso.",
"Acá tenemos dos ramas y cada una tiene un commit único. Esto significa que ninguna de las ramas incluye \"todo el trabajo\" que hay en nuestro repositorio. Hagamos una mezcla para solucionar eso.",
"",
"Vamos a `merge`ar la rama `bugFix` a `main`."
"Vamos a `merge`(mezclar) la rama `bugFix` a `main`."
],
"afterMarkdowns": [
"¡Wooow! ¿Viste eso? Primero que nada, `main` ahora apunta a un commit que tiene dos padres. Si sigues las flechas por el árbol de commits empezando desde `main` vas a cruzarte con cada commit del repositorio hasta llegar a la raíz. Esto significa que `main` ahora contiene todo el trabajo que hay en el repositorio.",
@ -363,7 +363,7 @@ exports.level = {
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Mergeemos `main` a `bugFix`:"
"Merge (mezclemos) `main` a `bugFix`:"
],
"afterMarkdowns": [
"Como `bugFix` era un ancestro de `main`, git no tuvo que hacer ningún trabajo; simplemente movió `bugFix` al mismo commit al que estaba anexado `main`.",

View file

@ -20,6 +20,7 @@ exports.level = {
"de_DE": "Einen Commit pflücken",
"es_AR": "Tomando un único commit",
"es_ES": "Tomando un único commit",
"es_MX": "Tomando un único commit",
"pt_BR": "Pegando um único commit",
"gl": "Escollendo un único commit",
"ja": "一つのコミットのみを取得",
@ -206,6 +207,45 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Commits localmente apilados",
"",
"Esta es una situación 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 depuración y algunas sentencias para imprimir el estado de mi sistema.",
"",
"Todas estas cosas de imprimir y depurar 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 `main`. Si simplemente fast-forwardeo `main`, entonces `main` va a tener todos mis agregados de depuración, 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 `main` recibe el commit que `bugFix` referencia."
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -24,6 +24,7 @@ exports.level = {
"fr_FR": "Jongler avec les commits",
"es_AR": "Haciendo malabares con los commits",
"es_ES": "Haciendo malabares con los commits",
"es_MX": "Malabareando con las confirmaciones",
"pt_BR": "Malabarismo com commits",
"gl": "Argallando cos commits",
"ja": "コミットをやりくりする",
@ -195,6 +196,41 @@ exports.level = {
},
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Malabareando con las confirmaciones",
"",
"Esta es otra situación que sucede comúnmente. 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 las confirmaciones para que la que queremos cambiar quede arriba de las demás con `git rebase -i`",
"* Vamos a hacer `git commit --amend` para aplicar la ligera modificación",
"* Después vamos a reordenar las confirmaciones a como estaban con `git rebase -i`",
"* Finalmente, vamos a mover main a esta parte actualizada de nuestro árbol de confirmaciones 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 las confirmaciones dos veces, ambas 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 `main` tenga la misma estructura y diferencias relativas de apóstrofes te voy a dar el puntaje completo."
]
}
},
]
},
"pt_BR": {
"childViews": [
{

View file

@ -22,6 +22,7 @@ exports.level = {
"fr_FR": "Jongler avec les commits #2",
"es_AR": "Haciendo malabares con los commits #2",
"es_ES": "Haciendo malabares con los commits #2",
"es_MX": "Malabareando con las confirmaciones #2",
"pt_BR": "Malabarismo com commits #2",
"gl": "Argallando cos commits #2",
"de_DE": "Jonglieren mit Commits Teil 2",
@ -40,6 +41,7 @@ exports.level = {
"fr_FR": "N'oubliez pas d'appliquer les changements depuis la branche main",
"es_AR": "¡No te olvides de avanzar main a los cambios actualizados!",
"es_ES": "¡No te olvides de avanzar main a los cambios actualizados!",
"es_MX": "¡No te olvides de avanzar main a los cambios actualizados!",
"pt_BR": "Não se esqueça de avançar a referência do main para as mudanças efetuadas!",
"gl": "¡Non te esquezas de avanzar main ós cambios actualizados!",
"de_DE": "Vergiss nicht den main auf die aktuelle Version vorzuspulen",
@ -228,6 +230,49 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Malabareando con las confirmaciones #2",
"",
"*Si no completaste Malabareando con las confirmaciones #1 (el nivel anterior), hazlo antes de continuar*",
"",
"Como viste en el último nivel, usamos `rebase -i` para reordenar las confirmaciones. Una vez que la confirmación que queríamos cambiar se encontraba arriba de todo, pudimos `--amend` (enmendarlo) 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 demostración para refrescar la idea:"
],
"afterMarkdowns": [
"¡Bien! Sigamos..."
],
"command": "git cherry-pick C2",
"beforeCommand": "git checkout -b bugFix; git commit; git checkout main; 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 puntos a un árbol que coincida con el objetivo pero cuyos commits tengan todos un apóstrofe extra."
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -8,6 +8,7 @@ exports.level = {
"ja": "Gitのタグ",
"es_AR": "Tags en git",
"es_ES": "Tags en git",
"es_MX": "Tags de Git",
"pt_BR": "Tags no Git",
"gl": "Etiquetas en git",
"fr_FR": "Git Tags",
@ -28,6 +29,7 @@ exports.level = {
"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!",
"es_MX": "Puedes cambiar (checkout) directamente a la confirmación, ¡o simplemente cambiar (checkout) al 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 上",
@ -354,6 +356,58 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Tags en git",
"",
"Como aprendiste en lecciones anteriores, las ramas pueden moverse fácilmente y en general van referenciando distintas confirmaciones 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 mezclas (merges), ¿hay algún modo de marcar esas confirmaciones con algo más permanente que una rama?",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"¡Apuesto a que lo hay! Los tags de Git soportan exactamente este caso de uso -- marcan (bastante) permanentemente determinadas confirmaciones como \"hitos\" que puedes referenciar como a una rama.",
"",
"Aún más importante, los tags no avanzan cuando se crean nuevas confirmaciones. No puedes hacer checkout a un tag y completar el trabajo en ese tag - los tags son marcas fijas en el árbol de confirmaciones que designan ciertos puntos.",
"",
"Veamos cómo se ven los tags en práctica..."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Intentemos crear un tag en `C1`, que es la versión 1 de nuestro prototipo"
],
"afterMarkdowns": [
"¡Ahí está! Bastante simple. Nombramos al tag `v1` y referenciamos explícitamente a la confirmación `C1`. Si no especificas la confirmación 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 confirmar (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": [
{

View file

@ -13,6 +13,7 @@ exports.level = {
"ja": "cherry-pick入門",
"es_AR": "Introducción a cherry-pick",
"es_ES": "Introducción a cherry-pick",
"es_MX": "Introducción a cherry-pick",
"pt_BR": "Introdução ao cherry-pick",
"gl": "Introuducción a cherry-pick",
"zh_CN": "Git Cherry-pick",
@ -273,6 +274,63 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Moviendo el trabajo por ahí",
"",
"Hasta ahora hemos cubierto lo básico de Git -- hacer confirmaciones, crear ramas y movernos por el árbol de confirmaciones. Estos conceptos alcanzan para aprovechar el 90% del poder de los repositorios de Git y cubrir las necesidades principales de los desarrolladores.",
"",
"El 10% restante, sin embargo, puede ser bastante útil en flujos de trabajo complejos (o cuando te metiste en algún problema complicado). El próximo concepto que vamos a cubrir es el de \"mover el trabajo por ahí\" -- en otras palabras, una forma que tienen los desarrolladores de decir \"Quiero este trabajo aquí y este otro allí\" de una manera precisa, elocuente y flexible.",
"",
"Puede parecer un montón, pero es un concepto bastante simple."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Git Cherry-pick",
"",
"El primer comando en esta serie se llama `git cherry-pick`. Tiene la siguiente forma:",
"",
" `git cherry-pick <Commit1> <Commit2> <...>`",
"",
"Es una manera bastante directa de decir que quieres copiar una serie de commits sobre tu ubicación actual (`HEAD`). Personalmente amo `cherry-pick` porque hay muy poca magia involucrada y es bastante simple de entender.",
"",
"¡Veamos una demostración!",
""
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Aquí tenemos un repositorio donde tenemos algo de trabajo en la rama `side` que queremos copiar a `main`. Podríamos lograrlo con un rebase (y ya aprendimos cómo), pero veamos cómo se comporta cherry-pick."
],
"afterMarkdowns": [
"¡Eso es todo! Queríamos los commits `C2` y `C4` y Git los aplicó justo donde estábamos. ¡Tan simple como eso!"
],
"command": "git cherry-pick C2 C4",
"beforeCommand": "git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Para completar este nivel, simplemente copia algo de trabajo desde otras tres ramas a main. Puedes ver qué commits queremos en la visualización del objetivo.",
""
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -4,6 +4,7 @@ exports.level = {
"startTree": "{\"branches\":{\"main\":{\"target\":\"C2\",\"id\":\"main\"},\"bugFix\":{\"target\":\"C4\",\"id\":\"bugFix\"}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C2\":{\"parents\":[\"C1\"],\"id\":\"C2\"},\"C3\":{\"parents\":[\"C1\"],\"id\":\"C3\"},\"C4\":{\"parents\":[\"C3\"],\"id\":\"C4\"}},\"HEAD\":{\"target\":\"bugFix\",\"id\":\"HEAD\"}}",
"name": {
"en_US": "Detach yo' HEAD",
"es_MX": "Separa tu HEAD",
"es_AR": "Desatacheá tu HEAD",
"es_ES": "Desatachea tu HEAD",
"pt_BR": "Solte a sua cabeça",
@ -275,6 +276,84 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Moviéndonos por ahí en Git",
"",
"Antes de meternos en algunas de las funcionalidades más avanzadas de Git, es importante entender las distintas maneras de moverse por el árbol de confirmaciones que representa tu proyecto.",
"",
"Una vez que estés cómodo moviendote por ahí, tus poderes con los otros comandos de git ¡van a amplificarse!",
"",
"",
"",
"",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## HEAD",
"",
"Primero tenemos que hablar de \"HEAD\". HEAD es el nombre simbólico del commit sobre el que hemos hecho checkout -- es, básicamente, el commit sobre el que estás trabajando.",
"",
"HEAD siempre apunta al commit más reciente, reflejado en el árbol de commits. La mayoría de los comandos de git que hacen cambios al árbol de commits empiezan modificando HEAD.",
"",
"Normalmente HEAD apunta al nombre de una rama (como bugFix). Cuando creas un commit, el estado de bugFix se altera y este cambio es visible a través de HEAD."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Veámoslo en acción. A continuación vamos a ver a HEAD antes y después de un commit."
],
"afterMarkdowns": [
"¡Ves! HEAD estuvo oculta bajo nuestra rama `main` todo este tiempo."
],
"command": "git checkout C1; git checkout main; git commit; git checkout C2",
"beforeCommand": ""
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"### Separando HEAD",
"",
"Separar HEAD simplemente significa adjuntarla a un commit en lugar de a un branch. Así es como se ve de antemano:",
"",
"HEAD -> main -> C1",
""
],
"afterMarkdowns": [
"Y así queda ahora:",
"",
"HEAD -> C1"
],
"command": "git checkout C1",
"beforeCommand": ""
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Para completar este nivel, separemos HEAD de `bugFix` y juntémoslo en su lugar al commit.",
"",
"Especifica este commit por su hash. El hash de cada commit se muestra en el círculo que lo representa."
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -10,6 +10,7 @@ exports.level = {
"en_US": "you can use either branches or relative refs (HEAD~) to specify the rebase target",
"es_AR": "podés usar tanto ramas como referencias relativas (HEAD~) para especificar el objetivo del rebase",
"es_ES": "puedes usar tanto ramas como referencias relativas (HEAD~) para especificar el objetivo del rebase",
"es_MX": "puedes usar tanto ramas como referencias relativas (HEAD~) para especificar el objetivo del rebase",
"pt_BR": "Você pode usar ou ramos ou referências relativas (HEAD~) para especificar o alvo do rebase",
"gl": "Podes usar ramas ou referencias relativas (HEAD~) para especificar o obxectivo do rebase",
"de_DE": "Du kannst entweder Branches oder relative Ref-Angaben (z.B. HEAD~) benutzen, um das Ziel des Rebase anzugeben.",
@ -30,6 +31,7 @@ exports.level = {
"en_US": "Interactive Rebase Intro",
"es_AR": "Introducción al rebase interactivo",
"es_ES": "Introducción al rebase interactivo",
"es_MX": "Introducción al rebase interactivo",
"pt_BR": "Introdução ao rebase interativo",
"gl": "Introducción ó rebase interativo",
"de_DE": "Einführung Interaktives Rebase",
@ -439,6 +441,72 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Git rebase interactivo",
"",
"git cherry-pick es genial cuando sabes qué commits quieres (_y_ sabes sus hashes) -- es dificil superar la simpleza que provee.",
"",
"Pero ¿qué pasa cuando no sabes qué commits quieres? Por suerte ¡Git te cubre en esta situación también! Podemos usar el rebase interactivo para esto -- es la mejor manera de revisar una serie de commits que estás a punto de rebasear.",
"",
"Entremos en los detalles..."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Todo rebase interactivo significa usar el comando `rebase` con la opción `-i`.",
"",
"Si incluyes esta opción, git abrirá una UI para mostrarte qué commits están a punto de ser copiados sobre el objetivo del rebase. También muestra sus hashes y mensajes, que ayuda mucho para saber qué es cada commit.",
"",
"Para el git \"de verdad\", la UI signfica abrir un archivo en un editor de textos como `vim`. Para nuestro propósito, hice una pequeña interfaz que se comporta de ese mismo modo."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Cuando el diálogo de rebase interactivo se abre, tienes la capacidad de hacer 2 cosas:",
"",
"* Puedes reordenar las confirmaciones con solamente cambiar su orden en la UI (en nuestra ventana, eso significa arrastrar y soltar con el mouse).",
"* Puedes elegir mantener todas las confirmciones o ignorar algunas específicas. Cuando la ventana se abre, cada confirmación se asigna como incluido por medio del botón `pick` que está activo al lado. Para ignorar una confirmación, desactiva el botón `pick`.",
"",
"Vale la pena mencionar que en el rebase interactivo puedes hacer muchas más cosas como combinar confirmaciones, modificar los mensajes d elas confirmaciones e incluso editar las confirmaciones. Para nuestros propósitos nos centraremos en las dos operaciones anteriores.",
"",
"¡Genial! Veamos un ejemplo."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Cuando presiones el botón, va a aparecer una ventana de rebase interactivo. Reordena los commits (siéntete libre de ignorar alguno, también) ¡y observa el resultado!"
],
"afterMarkdowns": [
"¡Vientos! Git copió las cofirmaciones exactamente de la misma manera que lo especificaste en la UI."
],
"command": "git rebase -i HEAD~4 --aboveAll",
"beforeCommand": "git commit; git commit; git commit; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Para completar el nivel, haz un rebase interactivo y alcanza el orden que se muestra en la visualización objetivo. Recuerda que siempre puedes hacer `undo` y `reset` para arreglar errores :D"
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -9,6 +9,7 @@ exports.level = {
"zh_CN": "相对引用(^",
"zh_TW": "相對引用(^",
"es_AR": "Referencias relativas (^)",
"es_MX": "Referencias relativas (^)",
"es_ES": "Referencias relativas (^)",
"pt_BR": "Referências relativas (^)",
"gl": "Referencias relativas (^)",
@ -416,6 +417,81 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Referencias relativas",
"",
"Moverse por ahí en Git usando los hashes de los commits puede volverse un tanto tedioso. En el mundo real no vas a tener una visualización de commits tan linda en la terminal, así que vas a tener que usar `git log` para ver los hashes.",
"",
"Peor aún, los hashes en general son mucho más largos en el git real, también. Por ejemplo, el hash del commit que introduje en el nivel anterior es `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. No es algo particularmente fácil de nombrar...",
"",
"Lo interesante es que Git es bastante astuto con los hashes. Sólo requiere que especifiques una cantidad de caracteres suficientes para identificar unívocamente al commit. Entonces, yo podría simplemente tipear `fed2` en lugar de esa larga cadena de arriba."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Como ya dije, especificar los commits por su hash no es la manera más conveniente y por eso Git tiene referencias relativas. ¡Son geniales!",
"",
"Con las referencias relativas puedes arrancar de algún lugar memoralbe (como la rama `bugFix`, o `HEAD`) y trabajar desde ahí.",
"",
"Los commits relativos son poderosos, pero ahora vamos a presentar sólo dos formas simples:",
"",
"* Moverse un commit hacia atrás con `^`",
"* Moverse una cantidad de commits hacia atrás con `~<num>`"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Veamos el operador ^ primero. Cada vez que le agregas eso al nombre de una referencia, le estás diciendo a git que use el padre del commit especificado.",
"",
"Entonces, `main^` quiere decir que es equivalente a \"el primer padre de `main`\".",
"",
"`main^^` es el _abuelo_ (segunda generación de ancestros) de `main`",
"",
"Veamos el commit que está antes de main aquí."
],
"afterMarkdowns": [
"Vientos! Ahí está. Mucho más simple que escribir el hash de ese commit."
],
"command": "git checkout main^",
"beforeCommand": "git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"También puedes referenciar a `HEAD` como una referencia relativa. Usémoslo un par de veces para movernos hacia atrás en nuestro árbol."
],
"afterMarkdowns": [
"¡Fácil! Podemos volver en el tiempo con `HEAD^`"
],
"command": "git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",
"beforeCommand": "git commit; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Para completar este nivel, haz checkout sobre el padre del commit de `bugFix`. Esto va a detachear a `HEAD`.",
"",
"Puedes especificar el hash si quieres, pero mejor ¡trata de usar la referencia relativa!"
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -28,6 +28,7 @@ exports.level = {
"ja": "相対リファレンス その2 (~)",
"es_AR": "Referencias relativas #2 (~)",
"es_ES": "Referencias relativas #2 (~)",
"es_MX": "Referencias relativas #2 (~)",
"pt_BR": "Referências relativas #2 (~)",
"gl": "Referencias relativas #2 (~)",
"fr_FR": "Références relatives #2 (~)",
@ -249,6 +250,75 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### El operador \"~\"",
"",
"Digamos que quieres moverte un montón de niveles atrás en tu árbol de commits. Podría ser tedioso escribir `^` muchas veces y por eso Git tiene el operador ~.",
"",
"",
"El operador ~ (opcionalmente) toma la cantidad especificada de padres que quieres volver hacia atrás. Veámoslo en acción"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Especifiquemos una cantidad de confirmaciones hacia atrás con `~`."
],
"afterMarkdowns": [
"¡Vientos! Genial -- las referencias relativas son lo mejor."
],
"command": "git checkout HEAD~4",
"beforeCommand": "git commit; git commit; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Forzando las ramas",
"",
"Ahora que eres un experto en las referencias relativas, *usémoslas* para algo.",
"",
"Una de las formas más comunes en que uso las referencias relativas es para mover las ramas. Puedes reasignar directamente una rama a un commit usando la opción `-f`. Algo así como:",
"",
"`git branch -f main HEAD~3`",
"",
"Mueve (forzadamente) la rama main tres padres por detrás de HEAD."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Veamos ese comando previo en acción"
],
"afterMarkdowns": [
"¡Allá vamos! Las referencias relativas nos proporcionaron una manera breve de referenciar a `C1` y forzar la rama (`-f`) nos dio una manera rápida de mover la rama a esa ubicación"
],
"command": "git branch -f main HEAD~3",
"beforeCommand": "git commit; git commit; git commit; git checkout -b bugFix"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ahora que viste las referencias relativas y el forzar ramas combinados, usémoslos para resolver el siguiente nivel.",
"",
"Para completar este nivel, mueve `HEAD`, `main` y `bugFix` a sus destinos finales."
]
}
}
]
},
"pt_BR": {
"childViews": [
{

View file

@ -10,6 +10,7 @@ exports.level = {
"fr_FR": "Annuler des changements avec Git",
"es_AR": "Revirtiendo cambios en git",
"es_ES": "Revirtiendo cambios en git",
"es_MX": "Revirtiendo cambios en Git",
"pt_BR": "Revertendo mudanças no Git",
"gl": "Revertindo cambios en git",
"ko": "Git에서 작업 되돌리기",
@ -27,6 +28,7 @@ exports.level = {
"de_DE": "Beachte, dass revert und reset unterschiedliche Argumente benötigen",
"fr_FR": "Notez que `revert` et `reset` n'ont pas les mêmes arguments.",
"es_AR": "Notá que revert y reset toman parámetros distintos",
"es_MX": "Observa que revert y reset utilizan parámetros distintos",
"es_ES": "Observa que revert y reset utilizan parámetros distintos",
"pt_BR": "Lembre que revert e reset recebem parâmetros diferentes",
"gl": "Lembra que revert e reset usan parámetros distintos",
@ -231,6 +233,69 @@ exports.level = {
}
]
},
"es_MX": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Revirtiendo cambios en Git",
"",
"Hay varias maneras de revertir cambios en Git. Y tal como al confirmar, revertir cambios en Git tiene tanto un componente de bajo nivel (indexar archivos o fragmentos individualmente) como un componente de alto nivel (cómo son efectivamente revertidos los cambios). Nuestra aplicación se va a concentrar en esto último.",
"",
"Hay dos formas principales de deshacer cambios en Git -- uno es usando `git reset` y el otro es usando `git revert`. Vamos a ver cada uno de ellos a continuación",
""
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"## Git Reset",
"",
"`git reset` deshace los cambios moviendo la referencia de una rama hacia atrás en el tiempo a un commit anterior. En este sentido puedes imaginarlo como \"reescribir la historia\". `git reset` va a mover la rama hacia atrás, como si el commit nunca se hubiera hecho.",
"",
"Veamos cómo se ve eso:"
],
"afterMarkdowns": [
"¡Genial! git simplemente movió la referencia de la rama main atrás hacia `C1`. Ahora tu repositorio local está en un estado como si `C2` nunca hubiera ocurrido."
],
"command": "git reset HEAD~1",
"beforeCommand": "git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"## Git Revert",
"",
"Mientras que reiniciar (reset) los cambios funciona estupendamente para ramas locales en tu máquina, su método de \"reescribir la historia\" no funciona para ramas remotas que otros están usando.",
"",
"Para revertir cambios y *compartir* esa _revertida_ con otros, necesitamos usar `git revert`. Veámoslo en acción"
],
"afterMarkdowns": [
"Extraño. Hay un nuevo commit aplicado sobre el que queríamos revertir. Eso es porque este nuevo commit `C2'` introduce *cambios* - sólo que esos cambios son exactamente los necesarios para revertir los que introdujo `C2`.",
"",
"Cuando utilices revert, puedes hacer push sobre ese cambio para compartirlo con otros."
],
"command": "git revert HEAD",
"beforeCommand": "git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Para completar este nivel, revierte el commit más reciente, tanto en `local` como en `pushed`.",
"",
"Ten en cuenta que `pushed` es una rama remota y `local` es una rama local -- eso debería ayudarte a elegir qué métodos usar."
]
}
}
]
},
"pt_BR": {
"childViews": [
{