diff --git a/src/levels/remote/pushArgs.js b/src/levels/remote/pushArgs.js index cd5b6fb4..eeb86f39 100644 --- a/src/levels/remote/pushArgs.js +++ b/src/levels/remote/pushArgs.js @@ -14,7 +14,8 @@ exports.level = { "de_DE": "Optionen für Git Push", "ja" : "Git pushの引数", "fr_FR": "Arguments de git push", - "ru_RU": "Аргументы git push" + "ru_RU": "Аргументы git push", + "ko" : "git push의 인자들" }, "hint": { "en_US": "You can always look at the last slide of the dialog with \"objective\"", @@ -25,7 +26,8 @@ exports.level = { "de_DE": "Du kannst dir die Zielsetzung des Levels immer wieder mit \"objective\" anzeigen lassen", "ja" : "ダイアログの最後のスライドを参照するには\"objective\"を実行", "fr_FR": "Vous pouvez toujours regarder le dernier slide des dialogues en tapant \"objective\".", - "ru_RU": "Вы всегда можете ознакомиться с последним слайдом, воспользовавшись \"objective\"." + "ru_RU": "Вы всегда можете ознакомиться с последним слайдом, воспользовавшись \"objective\".", + "ko" : "대화창의 마지막 슬라이드를 \"objective\"로 다시 볼 수 있습니다." }, "startDialog": { "en_US": { @@ -607,6 +609,81 @@ exports.level = { } } ] + }, + "ko": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Push의 인자들", + "", + "좋습니다! 여러분은 이제 원격 추적 브랜치도 알고 있기 때문에 이제 git push, fetch, pull이 어떻게 작동하는지에 관한 숨겨져있는 미스테리를 풀어나갈 준비가 되었습니다. 한번에 하나의 명령어를 알아보도록하겠는데 이것들이 가지고있는 컨셉은 아주 비슷해요.", + "", + "먼저 `git push`입니다. 여러분은 push를 하면 git이 push를 할 대상으로 원격저장소, 브랜치를 현재 작업중인 브랜치에 설정된 속성(\"추적\" 대상)을 통해 알아낸다는것을 이전 추적 레슨에서 배웠습니다. 이것은 인자를 넣지않고 실행할 때 일어나는것 입니다, 그런데 git push에 다음과 같은 형식으로 선택적으로 인자를 사용할수도 있습니다:", + "", + "`git push `", + "", + "" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "``인자가 무엇을 의미할것 같나요? 세부사항은 알아보기 전에 예시부터 봅시다. 다음 명령어를 보세요:", + "", + "`git push origin master`", + "", + "해석해 보면:", + "", + "*내 저장소에 있는 \"master\"라는 이름의 브랜치로 가서 모든 커밋들을 수집합니다, 그다음 \"origin\"의 \"master\"브랜치로 가서 이 브랜치에 부족한 커밋들을 채워 넣고 완료 되면 알려줍니다.*", + "", + "`master`를 \"place\"인자로 지정해서 우리가 git에게 *어디서부터* 커밋이 오는지, 그리고 *어디로* 커밋이 가야하는지 알려줍니다. 두 저장소간에 동기화 작업을 할 \"장소\"를 지정해 주는것이라고 볼 수 있습니다.", + "", + "git이 알아야 할 것은 다 알려줬기 때문에(두 인자를 모두 지정했죠), git은 현재 우리가 체크아웃한 브랜치는 무시하고 명령을 수행합니다." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "인자를 지정해주는 예제를 눈으로 직접 확인해 봅시다. 이 예제에서 우리가 체크아웃한 곳이 어디인지를 주의하며 봅시다." + ], + "afterMarkdowns": [ + "됬네요! 지정해준 인자들에 의해 원격 저장소의 `master`가 갱신 되었습니다." + ], + "command": "git checkout C0; git push origin master", + "beforeCommand": "git clone; git commit" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "인자를 지정하지 않으면 어떻게 될까요?" + ], + "afterMarkdowns": [ + "명령이 실패하며(보시다시피), `HEAD`가 원격저장소를 추적하는 브랜치에 체크아웃 되있지 않기 때문이죠." + ], + "command": "git checkout C0; git push", + "beforeCommand": "git clone; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "좋습니다, 이번 레벨에서는 원격저장소의 `foo`, `master`브랜치 모두 갱신해봅시다. 이번 문제는 `git checkout`이 비활성화 되있다는 점이 특징이죠!", + "", + "*노트: 원격 브랜치들은 `o/`접두어로 분류되어 있습니다. `origin/`으로 생략없이 표현하면 UI에 안맞아서 이렇게 표현했어요. ", + "그래서... 원격저장소 이름은 원래처럼 `origin`으로 써주세요.*" + ] + } + } + ] } } }; diff --git a/src/levels/remote/pushArgs2.js b/src/levels/remote/pushArgs2.js index 899436ad..5716c791 100644 --- a/src/levels/remote/pushArgs2.js +++ b/src/levels/remote/pushArgs2.js @@ -11,7 +11,8 @@ exports.level = { "de_DE": "Optionen für Git Push -- noch mehr!", "ja" : "Git pushの引数 -- 拡張編!", "fr_FR": "Arguments de git push -- toujours plus !", - "ru_RU": "Аргументы для push -- расширенная версия!" + "ru_RU": "Аргументы для push -- расширенная версия!", + "ko" : "git push 인자 -- 확장판!" }, "hint": { "en_US": "Remember you can admit defeat and type in \"show solution\" :P", @@ -22,7 +23,8 @@ exports.level = { "de_DE": "Vergiss nicht dass du aufgeben kannst, indem du \"show solution\" eingibst :P", "ja" : "降参して解説を見るには\"show solution\"を実行できるのをお忘れなく", "fr_FR": "N'oubliez pas que vous pouvez toujours déclarer forfait avec \"show solution\" :P", - "ru_RU": "Помните, Вы всегда можете признать своё поражение, набрав команду \"show solution\" (показать решение) :P" + "ru_RU": "Помните, Вы всегда можете признать своё поражение, набрав команду \"show solution\" (показать решение) :P", + "ko" : "혹시 아세요? 패배를 인정하고 \"show solution\"을 입력할 수 있다는 걸요 :P" }, "startDialog": { "en_US": { @@ -584,6 +586,76 @@ exports.level = { } } ] + }, + "ko": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## `` 인자에 대한 세부사항들", + "", + "", + "기억하세요? 이전 강의에서 우리는 `master`를 커밋의 근원이되는 *source*와 목적지가 되는 *destination*으로 명령어의 인자로 넣어줌으로써 지정해줬습니다.", + "여러분은 이런 생각이 들 수 있어요 -- 내가 source와 destination이 다르길 원하면 어떻게 해야되지? 로컬의 `foo` 브랜치에서 원격의 `bar` 브랜치로 커밋을 push하고 싶으면 어떻게 해야 되지?", + "", + "사실 git에서는 그게 불가능합니다... 네 농담이고! 당연 가능합니다 :)... git의 어마무시하게 유연합니다(지나칠정도로요).", + "", + "어떻게 하는지는 다음 슬라이드에서 확인해봅시다..." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "source와 destination을 모두 지정하기 위해서는, 이렇게 간단히 두개를 콜론을 사이에 두고 표현하면 됩니다.", + "", + "`git push origin :`", + "", + "이것을 일반적으로 colon refspec(콜론 참조스펙)이라고 부릅니다. 참조스펙은 그냥 \"git이 알아낼 수 있는 위치\"를 이름 붙여서 말하는거에요 (브랜치 'foo'라던가 HEAD~1 라던가)", + "", + "source와 destination을 따로 지정할 수 있게 되면서, 이제 원격관련 명령어를 좀 멋지고 정확히 사용할수 있게 되었어요. 데모를 봅시다!" + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "기억하세요, `source`는 git이 이해하는 아무 위치를 말합니다.:" + ], + "afterMarkdowns": [ + "워 뭔가 잘 안쓸것 같은 명령이지만 잘 됩니다 -- git은 `foo^`의 위치를 알아내서 원격 저장소에 아직 반영되지 않은 커밋들을 업로드하고 destination 브랜치를 갱신했습니다." + ], + "command": "git push origin foo^:master", + "beforeCommand": "git clone; go -b foo; git commit; git commit" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "만약 여러분이 push하고 싶은 destination(목적지)가 없으면 어떻게하죠? 아무 문제 없어요! git이 만들 새 브랜치 이름을 지어주면 git이 원격 저장소에 새 브랜치를 만들어 줄거에요." + ], + "afterMarkdowns": [ + "좋네요, 번지르르 삐까뻔쩍 :D" + ], + "command": "git push origin master:newBranch", + "beforeCommand": "git clone; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "이번 레벨에서는, goal 시각화에 나오는 것처럼 만들어 주세요 인자의 형식은 다음과 같다는걸 기억하세요:", + "", + "`:`" + ] + } + } + ] } } };