└── README.md /README.md: -------------------------------------------------------------------------------- 1 | チュートリアル 2 | ============== 3 | 4 | Git Challenge へようこそ! 5 | 6 | このチュートリアルでは、merge と CONFLICT 解決を学びます。 7 | 8 | Git Challenge の問題で扱うファイルは CSV (Comma-Separated Values) です。 9 | このリポジトリにも、`users.csv` という CSV ファイルが含まれています。 10 | 11 | では、`master` ブランチにチェックアウトし、この `users.csv` の先頭の3行をみてみましょう。 12 | 13 | ```sh-session 14 | $ git checkout master 15 | $ cat users.csv 16 | 103,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 17 | 48,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 18 | 6,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 19 | ... 20 | ``` 21 | 22 | この CSV には、全 100 人のユーザーの情報が記録されています(ユーザーの情報は架空のものです)。 23 | 24 | このユーザーの情報で特に重要なのは、先頭の列です。 25 | 先頭の列は、ユーザーの持つチップの数を示しています。 26 | 27 | たとえば、以下の行は「渡辺 心愛」さんが 103 枚のチップを持っていることを意味しています。 28 | 29 | ```csv 30 | 103,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 31 | ``` 32 | 33 | ユーザーは、他のユーザーにチップをあげたり、もらったりすることができます。 34 | たとえば、「田中 美羽」さんから「渡辺 心愛」さんへ 10 枚のチップが贈与されたとしましょう。 35 | すると、次のような diff が発生します。 36 | 37 | ```diff 38 | diff --git a/users.csv b/users.csv 39 | index 9d6ba74..2320034 100644 40 | --- a/users.csv 41 | +++ b/users.csv 42 | @@ -1,5 +1,5 @@ 43 | -103,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 44 | -48,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 45 | +113,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 46 | +38,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 47 | 6,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 48 | 134,4048db0f-2454-477a-870b-a007ea21df2b,松本 心愛,Ephraim.Weber@yahoo.com,6f1SkLgu2dy58sE,07614-8-7370 49 | 275,9f2fe7d1-a5b0-41b7-802c-8a7ed93baf48,斎藤 結愛,Alene88@gmail.com,NKe7ZYrTgzd0MF5,00271-1-8209 50 | ``` 51 | 52 | Git Challenge では、このようなユーザーの取引履歴を 1 commit として管理しています。 53 | 54 | では、このような commit の merge を体験してみましょう。 55 | merge 対象の commit は、`task-1` に用意してあります。 56 | 57 | これを `master` に merge してみましょう。 58 | 59 | ```sh-session 60 | $ git checkout task-1 61 | $ git checkout master 62 | $ git merge task-1 63 | ``` 64 | 65 | うまく merge できましたね! 66 | 67 | では、もう一回 merge を体験してみましょう。 68 | `task-2` に、もうひとつ作業履歴を用意してあります。 69 | 70 | ```sh-session 71 | $ git checkout task-2 72 | $ git checkout master 73 | $ git merge task-2 74 | Auto-merging users.csv 75 | CONFLICT (content): Merge conflict in users.csv 76 | Automatic merge failed; fix conflicts and then commit the result. 77 | ``` 78 | 79 | おや?エラーメッセージが表示されますね。 80 | 81 | このエラーは、`task-1` と `task-2` に、重複した変更がおこなわれたことを示しています(CONFLICT と呼びます)。 82 | まず、`task-2` の変更内容を確認してみましょう。 83 | 84 | ```sh-session 85 | $ git show task-2 86 | ``` 87 | 88 | `task-2` では、次のように取引されていたようです。 89 | 90 | ```diff 91 | diff --git a/users.csv b/users.csv 92 | index 9d6ba74..118f601 100644 93 | --- a/users.csv 94 | +++ b/users.csv 95 | @@ -1,6 +1,6 @@ 96 | -103,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 97 | +93,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 98 | 48,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 99 | -6,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 100 | +16,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 101 | 134,4048db0f-2454-477a-870b-a007ea21df2b,松本 心愛,Ephraim.Weber@yahoo.com,6f1SkLgu2dy58sE,07614-8-7370 102 | 275,9f2fe7d1-a5b0-41b7-802c-8a7ed93baf48,斎藤 結愛,Alene88@gmail.com,NKe7ZYrTgzd0MF5,00271-1-8209 103 | 51,64e200ea-710f-45c4-a9ff-7e6f8f8b077b,山口 結菜,Tod49@gmail.com,REOGU4yZdPhBIg7,097-523-9207 104 | ``` 105 | 106 | 先頭行の「渡辺 心愛」さんのチップに注目すると、`task-1` と `task-2` の両方で変更がされていることが確認できます。 107 | 108 | それでは、`task-1` と `task-2` の2つの取引をうまく解決してあげましょう。 109 | それぞれの取引の意図は次のとおりです。 110 | 111 | - `task-1`: 「田中 美羽」さんから「渡辺 心愛」さんへ 10 枚のチップを贈与 112 | - `task-2`: 「渡辺 心愛」さんから「斎藤 蓮」さんへ 10 枚のチップを贈与 113 | 114 | つまり、最終的な取引結果は、次のようになるはずですね。 115 | 116 | - 「渡辺 心愛」さんのチップ: `103 + 10 - 10 = 103` 117 | - 「田中 美羽」さんのチップ: `48 - 10 = 38` 118 | - 「斎藤 蓮」さんのチップ: `6 + 10 = 16` 119 | 120 | では、この CONFLICT の解決に移りましょう。 121 | 122 | `users.csv` をエディタで開くと、次のように CONFLICT した箇所に印がついています。 123 | 124 | ```csv 125 | <<<<<<< HEAD 126 | 113,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 127 | 38,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 128 | 6,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 129 | ======= 130 | 93,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 131 | 48,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 132 | 16,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 133 | >>>>>>> task-2 134 | ``` 135 | 136 | この部分を、下のように書きかえます。 137 | 138 | ``` 139 | 103,419e0896-52f1-4913-a43c-ec3ae62b66b6,渡辺 心愛,Nelda.Price69@hotmail.com,ytEMIatIxHF7r3D,026-292-3312 140 | 38,f6fc18cb-b7d3-4e6c-b4f2-2c9422933b9b,田中 美羽,Catalina0@yahoo.com,hf8T7uwgoGJ9CEt,02264-0-2048 141 | 16,64157d6b-d84d-417f-b44d-31775d6a134f,斎藤 蓮,Gladyce0@yahoo.com,IgZwbeINDXUV_i3,0059-96-2954 142 | ``` 143 | 144 | ファイルを保存したら、git に CONFLICT の解決を教えてあげます。 145 | 146 | ```sh-session 147 | $ git add users.csv 148 | $ git commit 149 | ``` 150 | 151 | 無事 CONFLICT を解決し、merge することができました! 152 | では、他の人がこの取引履歴を使えるように `master` を push しておきましょう。 153 | 154 | ```sh-session 155 | $ git push origin master 156 | ``` 157 | 158 | 正しく merge できていれば、[スコアボード](http://git-challenge-scoreboard.herokuapp.com)のバッジが passed に変化します。 159 | スコアボードを確認してみてください。 160 | 161 | 162 | 問題形式について 163 | ---------------- 164 | 165 | 問題形式についても確認しておきましょう。 166 | このチュートリアルに相当する問題は、次のように提示されます。 167 | 168 | --- 169 | 170 | ### 問題: チュートリアル 171 | 172 | `task-1` と `task-2` を `master` に merge してください。 173 | 174 | | 主要なブランチ | ブランチ名 | 175 | |:---------------------|:------------------| 176 | | リリースブランチ | `master` | 177 | | merge 対象のブランチ | `task-1` `task-2` | 178 | 179 | 180 | ### 正答条件 181 | 182 | - 解答は、`origin` の `master` に push してください 183 | - `task-1` と `task-2` のすべての差分が適用されている必要があります 184 | - push された新しい `master` の祖先に、問題開始時点の `master` が含まれる必要があります 185 | 186 | --- 187 | 188 | なお、解答の方法は、問題ごとに異なります。 189 | そのため、問題に書かれている正答条件をよく確認し、解答してください。 190 | 191 | 解答の正誤判定は、CIサーバー上のテストスクリプトによっておこなわれます。 192 | このテストスクリプトの判定結果は、スコアボードのバッジによって確認することができます。 193 | 正解の場合は、バッジは passed になります。 194 | 正解でない場合は、failed になります。 195 | 196 | また、いずれの問題も、複数回解答することが可能です。 197 | 198 | チュートリアルは以上になります。 199 | --------------------------------------------------------------------------------