├── README.md ├── docs └── joker.md └── images ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── forked-repository.png ├── github-fork.png └── triangular-workflows.png /README.md: -------------------------------------------------------------------------------- 1 | # Git에 대한 이해 & 설치 2 | 3 | [Book](https://git-scm.com/book/ko/v2) 4 | 5 | - [GitHub](http://github.com) 계정 만들기 6 | - [Sourcetree](https://www.sourcetreeapp.com/) 를 설치 7 | - 작업은 반드시 터미널에서 진행합니다. Sourcetree와 같은 GUI도구는 중간에 과정을 생략합니다. 8 | - 그러나 뭔가를 할 때마다 Sourcetree를 계속 보시면 Git에 대해 알 수 있고, 무슨 일이 벌어지고 있는지도 알 수 있습니다. 9 | 10 | ## Git Style Guide 숙지 11 | 12 | [ikaruce/git-style-guide](https://github.com/ikaruce/git-style-guide) 13 | 14 | ## 터미널 환경 설정 15 | 16 | - Windows 17 | - WSL2를 공부하고 설치. 18 | - Windows terminal 설치. 19 | - Git 명령어 수행은 CLI 환경인 terminal에서 진행. 20 | - [WSL란?](https://docs.microsoft.com/ko-kr/windows/wsl/about) 21 | - [WSL 설치 및 WSL 2로 업데이트](https://docs.microsoft.com/ko-kr/windows/wsl/install-win10) 22 | - Mac 23 | - iterm2 설치 후 iterm 터미널에서 진행 24 | - `brew install --cask iterm2` 25 | 26 | ## 시작하기 27 | 28 | ### 새 저장소 만들고 시작하기 29 | 30 | ```bash 31 | mkdir <생성하고 싶은 디렉토리 이름> 32 | cd <생성한 디렉토리 이름> 33 | git init 34 | 35 | # 예) 36 | ~ $ mkdir test 37 | ~ $ cd test 38 | ~/test $ git init 39 | ``` 40 | 41 | ### 원격 저장소를 가져와서 시작하기 42 | 43 | ```bash 44 | git clone <원격 저장소 주소> 45 | 46 | # 예) git clone https://github.com/wholemann/daily-coding-dojo.git 47 | ``` 48 | 49 | ### Sourcetree에 저장소 폴더 추가하기 50 | 51 | Sourcetree를 실행해 방금 만들거나 가져온 폴더를 추가합니다. 52 | 53 | 뭔가를 할 때마다 Sourcetree를 계속 보시면 Git에 대해 알 수 있고, 무슨 일이 벌어지고 있는지도 알 수 있습니다. 54 | 55 | ## 원격 저장소 추가하기 56 | 57 | ### 원격 저장소 목록 확인 58 | 59 | ```bash 60 | git remote 61 | ``` 62 | 63 | ### 원격 저장소 정보 자세히 보기 64 | 65 | ```bash 66 | git remote -v 67 | ``` 68 | 69 | ### origin 원격 저장소 추가 70 | 71 | 주의) clone으로 원격 저장소를 가져오면 origin 원격 저장소가 이미 추가된 상태입니다. 72 | 73 | 아래는 git init 후 수동으로 원격 저장소를 추가할 때 사용하는 방법입니다. 74 | 75 | ```bash 76 | git remote add origin <내 계정의 repository 주소> 77 | 78 | git fetch origin 79 | ``` 80 | 81 | ### upstream 원격 저장소 추가 82 | 83 | ```bash 84 | git remote add upstream 85 | 86 | git fetch upstream 87 | ``` 88 | 89 | ## Pull Request를 이용한 협업 시작하기 90 | 91 | ![triangular-workflows](images/triangular-workflows.png) 92 | 93 | - upstream - PR을 보내고 싶은 repository(회사에선 우리팀 repository) 94 | - origin - upstream에서 내 계정으로 fork한 repository 95 | 96 | ### Step #0 97 | 98 | 먼저 PR(Pull Request)를 보내고 싶은 repository를 fork 합니다. 99 | fork를 하면 본인 계정의 GitHub에 동일한 repository가 복사됩니다. 100 | 101 | ![github-fork](images/github-fork.png) 102 | 103 | 내 계정에 동일한 repository가 복제된 걸 확인할 수 있습니다. 아래 이미지처럼 초록색 버튼을 클릭하면 104 | 나오는 창에서 주소를 복사합니다. 105 | 106 | ![forked-repository](images/forked-repository.png) 107 | 108 | 복사한 주소를 이용하면 내 로컬 머신에서 clone 할 수 있습니다. 109 | 110 | 주의) clone으로 원격 저장소를 가져오면 origin 원격 저장소가 이미 추가된 상태입니다. 111 | 112 | ```bash 113 | git clone <내 계정에 fork된 repository 주소> 114 | 115 | git remote add upstream 116 | 117 | # 예) 118 | git clone https://github.com/wholemann/git-training.git 119 | 120 | git remote add upstream https://github.com/CodeSoom/git-training.git 121 | ``` 122 | 123 | PR을 보내는 과정에서 원격 저장소는 upstream. origin 2개가 필요합니다. 124 | 로컬 머신(내 컴퓨터) 관점에서 보면 내 계정의 repository도 원격이고, 125 | upstream의 repository도 원격입니다. 126 | 127 | - upstream - PR을 보내고 싶은 repository(회사에선 우리팀 repository) 128 | - origin - upstream에서 내 계정으로 fork한 repository 129 | 130 | `git remote -v` 를 통해 upstream과 origin이 아래와 같은지 확인합니다. 131 | 132 | ```bash 133 | ~/codesoom/git-training $ git remote -v 134 | origin git@github.com:wholemann/git-training.git (fetch) 135 | origin git@github.com:wholemann/git-training.git (push) 136 | upstream git@github.com:CodeSoom/git-training.git (fetch) 137 | upstream git@github.com:CodeSoom/git-training.git (push) 138 | ``` 139 | 140 | ### Step #1 - 작업 브랜치 만들기 141 | 142 | ```bash 143 | git switch -c <브랜치 이름> upstream/main 144 | ``` 145 | 146 | upstream/main는 붙여서 쓰고, 가운데 슬래시(/)가 들어갑니다. 147 | 148 | 브랜치 이름은 작업한 내용을 표현해야 합니다. ex) login-oauth-apply 149 | 150 | ### Step #2 - upstream 원격 저장소의 최신 상태를 반영하기 151 | 152 | #### git fetch 153 | 154 | [fetch(가져오기)](https://backlog.com/git-tutorial/kr/stepup/stepup3_2.html) 155 | 156 | #### git rebase 157 | 158 | [rebase로 병합하기](https://backlog.com/git-tutorial/kr/stepup/stepup2_8.html) 159 | 160 | ```bash 161 | git fetch upstream 162 | 163 | git rebase upstream/main 164 | ``` 165 | 166 | ### Step #3 - 작업하기 167 | 168 | 원하는 작업을 이 시점에 합니다. 169 | 170 | ### Step #4 - 커밋 171 | 172 | 뭔가 바뀐 점을 추가합니다. 173 | 174 | 새 파일을 추가하는 게 아니라, 파일 추가/변경/삭제란 “바뀐 점”을 추가합니다. 175 | 176 | ```bash 177 | git add . 178 | ``` 179 | 180 | 방금 추가한 바뀐 점을 커밋합니다. 181 | 182 | 가능하면 메시지를 우리가 나중에 찾아볼 수 있는 형태로 씁니다. 183 | 184 | ```bash 185 | git commit 186 | ``` 187 | 188 | ### Git commit message style guide 189 | 190 | 반드시 숙지하고 지키려고 노력합시다. 191 | 192 | [좋은 git 커밋 메시지를 작성하기 위한 8가지 약속](https://djkeh.github.io/articles/How-to-write-a-git-commit-message-kor/) 193 | 194 | [Commit Message Style Guide For Git](https://commit.style/) 195 | 196 | git commit 에디터는 vi 에디터를 기본적으로 씁니다. 197 | 198 | 주의) git commit -m "message" 는 쓰지 마세요. -m은 anti pattern입니다. 199 | 200 | [Vi 에디터를 이용한 커밋 메시지 작성 방법](https://cau-dosc.github.io/how-to-write-commit-messages-using-vi.html) 201 | 202 | ### Step #5 - origin 원격 저장소에 작업 브랜치 올리기 203 | 204 | ```bash 205 | git push origin <브랜치 이름> 206 | ``` 207 | 208 | origin과 <브랜치 이름> 사이엔 공백이 들어갑니다. 209 | 210 | ### Step #6 - Pull Request 211 | 212 | GitHub에서 New Pull Request를 합니다. 213 | 214 | ![images/1.png](images/1.png) 215 | 216 | ![images/2.png](images/2.png) 217 | 218 | ![images/3.png](images/3.png) 219 | 220 | ![images/4.png](images/4.png) 221 | 222 | ![images/5.png](images/5.png) 223 | 224 | ## 작업 수정하기 225 | 226 | Pull Request를 했지만 수정하고 싶을 때가 있습니다. 코드 리뷰 내용을 보고 반영하기 위해 고칠 때가 많은데, 해당 브랜치에 가서 Commit을 추가하고 Push만 하면 됩니다. 227 | 228 | ### Step #1 - 해당 브랜치로 이동하기 229 | 230 | ```bash 231 | git switch <브랜치 이름> 232 | ``` 233 | 234 | ### Step #2 - 수정하기 235 | 236 | 변경 작업을 이 시점에 합니다. 237 | 238 | ### Step #3 - 커밋 239 | 240 | 뭔가 바뀐 점을 추가합니다. 241 | 242 | 새 파일을 추가하는 게 아니라, 파일 추가/변경/삭제란 “바뀐 점”을 추가합니다. 243 | 244 | ```bash 245 | git add . 246 | ``` 247 | 248 | 방금 추가한 바뀐 점을 커밋합니다. 249 | 250 | 가능하면 메시지를 우리가 나중에 찾아볼 수 있는 형태로 씁니다. 251 | 252 | ```bash 253 | git commit 254 | ``` 255 | 256 | ### Step #4 - origin 원격 저장소에 작업 브랜치 올리기 257 | 258 | ```bash 259 | git push origin <브랜치 이름> 260 | ``` 261 | 262 | ### Step #5 - Pull Request가 바뀐 것 확인하기 263 | 264 | 뭔가 새로운 작업을 하지 않아도 Pull Request가 바뀐 것을 확인할 수 있습니다. 265 | 266 | ## Merge된 브랜치 정리하기 267 | 268 | ### Step #1 - 내 컴퓨터의 main 브랜치에 최신 코드 반영하기 269 | 270 | #### main 브랜치로 이동 271 | 272 | ```bash 273 | git switch main 274 | ``` 275 | 276 | #### 최신 코드 반영 277 | 278 | ```bash 279 | git fetch upstream 280 | 281 | git rebase upstream/main 282 | ``` 283 | 284 | #### origin 원격 저장소에 main 브랜치를 올려보기 (필수는 아니지만 기분이 좋아짐) 285 | 286 | ```bash 287 | git push origin main 288 | ``` 289 | 290 | ### Step #2 - Merge된 브랜치 확인 291 | 292 | 내 컴퓨터에 있는 브랜치 중 Merge된 것 보기 293 | 294 | 이 목록에 main도 포함된다는 점에 주의! 295 | 296 | ```bash 297 | git branch --merge 298 | ``` 299 | 300 | 내 컴퓨터와 원격 저장소에 있는 브랜치 중 Merge된 것 보기 301 | 302 | 이 목록에 main도 포함된다는 점에 주의! 303 | 304 | ```bash 305 | git branch -a --merge 306 | ``` 307 | 308 | ### Step #3 - 내 컴퓨터의 브랜치 삭제 309 | 310 | #### 안전하게 삭제 311 | 312 | ```bash 313 | git branch -d <브랜치 이름> 314 | ``` 315 | 316 | #### 강제로 삭제 317 | 318 | ```bash 319 | git branch -D <브랜치 이름> 320 | ``` 321 | 322 | ### Step #4 - fork된 나의 원격 저장소 브랜치 삭제 323 | 324 | ```bash 325 | git push origin :<브랜치 이름> 326 | ``` 327 | 328 | ## PR 트레이닝 미션 329 | 330 | [https://github.com/CodeSoom/git-training](https://github.com/CodeSoom/git-training) 331 | 332 | [Pull Request를 이용한 협업 시작하기](#Pull-Request를-이용한-협업-시작하기)를 참고하여, 333 | 각자 이니셜로 만든 문서 파일(예) `csh.md`)을 추가하여 위의 repository에 334 | Pull Request를 날려봅니다. 335 | 336 | ## 참고 자료 337 | 338 | - https://github.com/Taeung/git-training 339 | -------------------------------------------------------------------------------- /docs/joker.md: -------------------------------------------------------------------------------- 1 | # Ashal aka JOKER 2 | 3 | 코딩의 신 아샬이다 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/1.png -------------------------------------------------------------------------------- /images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/2.png -------------------------------------------------------------------------------- /images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/3.png -------------------------------------------------------------------------------- /images/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/4.png -------------------------------------------------------------------------------- /images/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/5.png -------------------------------------------------------------------------------- /images/forked-repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/forked-repository.png -------------------------------------------------------------------------------- /images/github-fork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/github-fork.png -------------------------------------------------------------------------------- /images/triangular-workflows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeSoom/git-training/bacbf6312defa3866ecef61d61417b74b6426096/images/triangular-workflows.png --------------------------------------------------------------------------------