diff --git a/src/levels/mixed/describe.js b/src/levels/mixed/describe.js index 1b7990e3..27fd8d5a 100644 --- a/src/levels/mixed/describe.js +++ b/src/levels/mixed/describe.js @@ -1,4 +1,4 @@ -exports.level = { +exports.level = { "goalTreeString": "{\"branches\":{\"master\":{\"target\":\"C2\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"side\":{\"target\":\"C4\",\"id\":\"side\",\"remoteTrackingBranchID\":null},\"bugFix\":{\"target\":\"C7\",\"id\":\"bugFix\",\"remoteTrackingBranchID\":null}},\"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\"},\"C5\":{\"parents\":[\"C3\"],\"id\":\"C5\"},\"C6\":{\"parents\":[\"C5\"],\"id\":\"C6\"},\"C7\":{\"parents\":[\"C6\"],\"id\":\"C7\"}},\"tags\":{\"v0\":{\"target\":\"C0\",\"id\":\"v0\",\"type\":\"tag\"},\"v1\":{\"target\":\"C3\",\"id\":\"v1\",\"type\":\"tag\"}},\"HEAD\":{\"target\":\"bugFix\",\"id\":\"HEAD\"}}", "solutionCommand": "git commit ", "startTree": "{\"branches\":{\"master\":{\"target\":\"C2\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"side\":{\"target\":\"C4\",\"id\":\"side\",\"remoteTrackingBranchID\":null},\"bugFix\":{\"target\":\"C6\",\"id\":\"bugFix\",\"remoteTrackingBranchID\":null}},\"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\"},\"C5\":{\"parents\":[\"C3\"],\"id\":\"C5\"},\"C6\":{\"parents\":[\"C5\"],\"id\":\"C6\"}},\"tags\":{\"v0\":{\"target\":\"C0\",\"id\":\"v0\",\"type\":\"tag\"},\"v1\":{\"target\":\"C3\",\"id\":\"v1\",\"type\":\"tag\"}},\"HEAD\":{\"target\":\"bugFix\",\"id\":\"HEAD\"}}", @@ -11,7 +11,8 @@ exports.level = { "pt_BR": "Git Describe", "zh_TW": "git describe", "zh_CN": "git describe", - "ru_RU": "Git describe" + "ru_RU": "Git describe", + "ko" : "Git describe(묘사)" }, "hint": { "en_US": "Just commit once on bugFix when you're ready to move on", @@ -22,7 +23,8 @@ exports.level = { "pt_BR": "Simplesmente commite uma vez em bugFix quando quiser parar de experimentar", "zh_TW": "當你要移動的時候,只要在 bugFix 上面 commit 就好了", "zh_CN": "当你要移动的时候,只要在 bugFix 上面 commit 就好了", - "ru_RU": "Когда закончишь, просто сделай commit" + "ru_RU": "Когда закончишь, просто сделай commit", + "ko" : "다음으로 넘어가고 싶으면 bugFix를 한번 커밋하면 됩니다." }, "startDialog": { "en_US": { @@ -591,6 +593,69 @@ exports.level = { } } ] + }, + "ko": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "### Git Describe", + "", + "커밋 트리에서 태그가 훌륭한 \"닻\"역할을 하기 때문에, git에는 여러분이 가장 가까운 \"닻(태그)\"에 비해 상대적으로 어디에 위치해있는지 *describe(묘사)*해주는 명령어가 있습니다. 이 명령어는 `git describe` 입니다!", + "", + "Git describe는 커밋 히스토리에서 앞 뒤로 여러 커밋을 이동하고 나서 커밋 트리에서 방향감각을 다시 찾는데 도움을 줍니다; 이런 상황은 git bisect(문제가 되는 커밋을 찾는 명령어라고 간단히 생각하자)를 하고 나서라던가 휴가를 다녀온 동료의 컴퓨터에 앉는경우가 있습니다." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Git describe 는 다음의 형태를 가지고 있습니다:", + "", + "`git describe `", + "", + "``에는 commit을 의미하는 그 어떤것이던 쓸 수 있습니다. 만약 ref를 특정 지어주지 않으면, git은 그냥 지금 체크아웃된곳을 사용합니다 (`HEAD`).", + "", + "명령어의 출력은 다음과 같은 형태로 나타납니다:", + "", + "`__g`", + "", + "`tag`는 가장 가까운 부모 태그를 나타냅니다. `numCommits`은 그 태그가 몇 커밋 멀리있는지를 나타냅니다. ``는 묘사하고있는 커밋의 해시를 나타냅니다." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "간단한 예제를 확인해 봅시다. 아래의 트리에서:" + ], + "afterMarkdowns": [ + "`git describe master` 명령은 다음을 출력합니다:", + "", + "`v1_2_gC2`", + "", + "`git describe side`는 다음을 출력합니다:", + "", + "`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": [ + "이정도면 git describe를 충분히 활용할 수 있습니다! 이 레벨의 몇 지점을 describe 명령어를 통해 확인해보면서 느낌을 익혀 봅시다.", + "", + "준비가 되면 커밋을 한번해서 레벨을 종료하세요. 자유롭게 연습해보세요 :P" + ] + } + } + ] } } }; diff --git a/src/levels/mixed/tags.js b/src/levels/mixed/tags.js index ac512415..aad7a2f7 100644 --- a/src/levels/mixed/tags.js +++ b/src/levels/mixed/tags.js @@ -1,4 +1,4 @@ -exports.level = { +exports.level = { "goalTreeString": "{\"branches\":{\"master\":{\"target\":\"C5\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"side\":{\"target\":\"C3\",\"id\":\"side\",\"remoteTrackingBranchID\":null}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C2\":{\"parents\":[\"C1\"],\"id\":\"C2\"},\"C3\":{\"parents\":[\"C2\"],\"id\":\"C3\"},\"C4\":{\"parents\":[\"C1\"],\"id\":\"C4\"},\"C5\":{\"parents\":[\"C2\",\"C4\"],\"id\":\"C5\"}},\"tags\":{\"v1\":{\"target\":\"C2\",\"id\":\"v1\",\"type\":\"tag\"},\"v0\":{\"target\":\"C1\",\"id\":\"v0\",\"type\":\"tag\"}},\"HEAD\":{\"target\":\"C2\",\"id\":\"HEAD\"}}", "solutionCommand": "git tag v1 side~1;git tag v0 master~2;git checkout v1", "startTree": "{\"branches\":{\"master\":{\"target\":\"C5\",\"id\":\"master\",\"remoteTrackingBranchID\":null},\"side\":{\"target\":\"C3\",\"id\":\"side\",\"remoteTrackingBranchID\":null}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C2\":{\"parents\":[\"C1\"],\"id\":\"C2\"},\"C3\":{\"parents\":[\"C2\"],\"id\":\"C3\"},\"C4\":{\"parents\":[\"C1\"],\"id\":\"C4\"},\"C5\":{\"parents\":[\"C2\",\"C4\"],\"id\":\"C5\"}},\"tags\":{},\"HEAD\":{\"target\":\"master\",\"id\":\"HEAD\"}}", @@ -11,7 +11,8 @@ exports.level = { "fr_FR": "Git Tags", "zh_CN": "Git Tags", "zh_TW": "git tag", - "ru_RU": "git tag" + "ru_RU": "git tag", + "ko" : "Git 태그" }, "hint": { "en_US": "you can either check out the commit directly or simply checkout the tag!", @@ -22,7 +23,8 @@ exports.level = { "pt_BR": "Você pode fazer checkout diretamente no commit ou na tag correspondente!", "zh_TW": "你可以直接 checkout 到 commit 上,或是簡單的 checkout 到 tag 上", "zh_CN": "你可以直接 checkout 到 commit 上,或是简单的 checkout 到 tag 上", - "ru_RU": "Можно сделать checkout напрямую на коммит или же на тег" + "ru_RU": "Можно сделать checkout напрямую на коммит или же на тег", + "ko" : "커밋을 직접 또는 태그를 이용해서 체크아웃할수 있습니다!" }, "startDialog": { "en_US": { @@ -492,6 +494,58 @@ exports.level = { } } ] + }, + "ko": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Git 태그", + "", + "이전 강의에서 배웠듯이, 브랜치는 이동하기 쉽습니다. 작업의 완료, 진행에따라 이리저리 이동하면서 서로다른 커밋을 참조하게 됩니다. 브랜치는 쉽게 변하며 임시적인 것입니다 항상 바뀌고 있죠.", + "", + "이런 상황에서, 여러분은 여러분의 프로젝트의 역사(작업 이력)에서 중요한 지점들에 *영구적으로* 표시를 할 방법이 없을까 궁금할것입니다. 주요 릴리즈나 큰 브랜치 합병(merge)이 있을때가 그런 상황이겠군요. 이런 상황에 커밋들을 표시할 브랜치보다 영구적인 방법이 있을까요?", + "" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "당연히 있습니다! Git 태그는 딱 이런 상황을 위해 존재합니다 -- Git 태그는 특정 커밋들을 브랜치로 참조하듯이 영구적인 \"milestone(이정표)\"으로 표시합니다.", + "", + "중요한 점은, Git 태그는 커밋들이 추가적으로 생성되어도 절대 움직이지 않는다는 것입니다. 여러분은 태그를 \"체크아웃\"한 후에 그 태그에서 어떤 작업을 완료할 수 없습니다 -- 태그는 커밋 트리에서 특정 지점을 표시하기위한 닻같은 역할을 합니다.", + "", + "자 태그가 무엇을 하는지 예제를 통해 알아봅시다" + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + " 프로토타입의 첫 버전인 `C1`에 태그를 만들어 봅시다." + ], + "afterMarkdowns": [ + "자! 아주 쉽죠. 우리는 태그의 이름을 `v1`이라고 지었고 커밋 `C1`을 지정해서 참조했습니다. 만약 커밋을 지정해주지 않으면 git은 `HEAD`가 있는지점에 태그를 붙일 것입니다." + ], + "command": "git tag v1 C1", + "beforeCommand": "git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "이번 레벨에서는 goal에 나타난것과 같이 태그를 만들고 `v1`을 체크아웃하면 됩니다. 분리된 `HEAD` 상태로 변하는것을 확인 해 보십시오 -- 이것은 `v1` 태그에 직접 커밋을 할 수 없기 때문입니다.", + "", + "다음 레벨에서는 태그의 더 흥미로운 활용 방법을 확인해 볼 것입니다." + ] + } + } + ] } } }; diff --git a/src/levels/rampup/cherryPick.js b/src/levels/rampup/cherryPick.js index c84fd176..49320d4e 100644 --- a/src/levels/rampup/cherryPick.js +++ b/src/levels/rampup/cherryPick.js @@ -1,4 +1,4 @@ -exports.level = { +exports.level = { "goalTreeString": "%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C7%27%22%2C%22id%22%3A%22master%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22bugFix%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C5%22%2C%22id%22%3A%22side%22%7D%2C%22another%22%3A%7B%22target%22%3A%22C7%22%2C%22id%22%3A%22another%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C6%22%7D%2C%22C7%22%3A%7B%22parents%22%3A%5B%22C6%22%5D%2C%22id%22%3A%22C7%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%2C%22C7%27%22%3A%7B%22parents%22%3A%5B%22C4%27%22%5D%2C%22id%22%3A%22C7%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D", "solutionCommand": "git cherry-pick C3 C4 C7", "compareOnlyMasterHashAgnostic": true, @@ -16,7 +16,7 @@ exports.level = { "zh_CN": "介绍 Cherry-pick", "zh_TW": "介紹 cherry-pick", "ru_RU": "Введение в Cherry-pick", - "ko": "Cherry-pick 소개" + "ko" : "Cherry-pick 소개" }, "hint": { "fr_FR": "git cherry-pick suivis par les noms de commits", @@ -28,7 +28,7 @@ exports.level = { "zh_CN": "git cherry-pick 后面跟着 commit 的名字", "zh_TW": "git cherry-pick 後面要接著 commit 的名稱", "ru_RU": "git cherry-pick основывается на именах коммитов!", - "ko": "커밋의 이름들로 git cherry-pick 하세요!" + "ko" : "커밋의 이름들로 git cherry-pick 하세요!" }, "startDialog": { "en_US": { diff --git a/src/levels/rampup/interactiveRebase.js b/src/levels/rampup/interactiveRebase.js index 5ed85a1f..0cbba391 100644 --- a/src/levels/rampup/interactiveRebase.js +++ b/src/levels/rampup/interactiveRebase.js @@ -1,4 +1,4 @@ -exports.level = { +exports.level = { "goalTreeString": "%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C4%27%22%2C%22id%22%3A%22master%22%7D%2C%22overHere%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22overHere%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C5%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C5%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C5%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D", "solutionCommand": "git rebase -i overHere --solution-ordering C3,C5,C4", "compareOnlyMasterHashAgnostic": true, @@ -16,7 +16,7 @@ exports.level = { "zh_TW": "你可以指定 branch 或者是相對位置(HEAD~)來表示 rebase 的目標", "ru_RU": "Можно использовать либо ветки, либо относительные ссылки (HEAD~), чтобы указать цель для Rebase", "ja" : "リベースする対象の指定には、ブランチ名や相対リファレンス(HEAD~)が使えます", - "ko" : "리베이스할 타겟으로 브랜치나 상대 참조(HEAD~)를 사용할 수 있습니다" + "ko" : "리베이스할 타겟으로 브랜치나 상대 참조(HEAD~)를 사용할 수 있습니다" }, "name": { "en_US": "Interactive Rebase Intro", @@ -28,7 +28,7 @@ exports.level = { "zh_CN": "Rebase 交互命令介绍 ", "zh_TW": "介紹互動式的 rebase", "ru_RU": "Введение в интерактивный Rebase", - "ko": "인터랙티브 리베이스 소개" + "ko" : "인터랙티브 리베이스 소개" }, "startDialog": { "en_US": {