├── .gitignore ├── README.md ├── handouts ├── 01-shell-vim-for-git.md ├── 01-shell-vim-for-git.pdf ├── 02-git-start.md ├── 02-git-start.pdf ├── 03-cowork-with-git.md ├── 03-cowork-with-git.pdf └── README.md ├── img ├── addrmorigin.png ├── collaborators.png ├── fork1.png ├── fork2.png ├── fork3.png ├── issue1.png ├── issue2.png ├── issue3.png ├── pr1.png ├── pr2.png ├── pr3.png ├── pr4.png ├── pr5.png ├── pr6.png ├── pr7.png ├── projects1.png ├── star.png ├── thankforme.jpg └── watch.png └── resources └── fizzbuzz.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Custom 2 | .hidden/* 3 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Essential git 2 | 3 | ## Blog post 4 | 5 | https://ulgoon.github.io/2019/09/09/01-git-first/ 6 | 7 | https://ulgoon.github.io/2019/09/10/02-git-alone/ 8 | 9 | ### Index 10 | 11 | - ch01. tools for git 12 | 13 | - ch02. add, commit, push 14 | 15 | - ch03. clone, pull, fetch 16 | 17 | - ch04. branch 18 | 19 | - ch05. collaborate with git 20 | 21 | ### asciinema 22 | 23 | https://asciinema.org/a/QmgWXWwf8VhBfS0pF7jxrCv8Y 24 | 25 | https://asciinema.org/a/207171 26 | 27 | ### Timestamp 28 | - 200504: bottle 29 | -------------------------------------------------------------------------------- /handouts/01-shell-vim-for-git.md: -------------------------------------------------------------------------------- 1 | --- 2 | marp: true 3 | --- 4 | 5 | 6 | # Shell, vim command for git 7 | 8 | ## Fastcampus Programming SCHOOL 9 | 10 | --- 11 | 12 | 18 | 19 | ## 최우영 20 | 21 | - Co-founder, CTO(disceptio) 22 | - Solution Architect, Web Developer, Instructor 23 | - Skills: Python, Golang, Julia, Node.js, Google tag manager ... 24 | 25 | ### Contacts 26 | 27 | 1. blog: https://ulgoon.github.io/ 28 | 2. github: https://github.com/ulgoon/ 29 | 3. email: me@ulgoon.com 30 | 4. discord: @ulgoon 31 | 32 | --- 33 | 34 | ## Introduce 35 | 36 | --- 37 | 38 | ## Goal(1) 39 | 40 | - Linux의 역사를 이해한다 41 | - CLI에 대한 공포를 극복하고 Shell과 친구가 된다 42 | - Linux Shell 커맨드를 학습하여 능숙하게 이를 활용할 수 있다 43 | - Vim 텍스트 에디터를 이용하여 커밋메시지를 작성하고, 파일 수정을 할 수 있다 44 | 45 | --- 46 | 47 | ## Goal(2) 48 | 49 | - git을 이해하고, git과 github이 다름을 인지한다 50 | - git을 활용하여 나의 소스코드를 관리할 수 있다 51 | - 나의 커리어를 Swag 할 수 있는 블로그를 git을 활용하여 관리할 수 있다. 52 | - git의 branch model을 활용해 능숙하게 코드관리할 수 있다 53 | - git으로 타인과 협업하며, 다른 프로젝트에 기여할 수 있다 54 | 55 | --- 56 | 57 | ## Contents 58 | 59 | - Introduction to Linux, Shell 60 | - Shell commands 61 | - Vim commands 62 | 63 | --- 64 | 65 | ## Before Linux(1) 66 | 67 | ![](http://www.unix.org/u30logo/unix_logo.gif) 68 | 69 | - 1965년 데니스 리치, 켄 톰슨 외 x명이 AT&T Bell 연구소에서 PDP-7 기반 어셈블리어로 작성한 UNIX를 개발 70 | 71 | --- 72 | 73 | ## Before Linux(2) 74 | 75 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Ken_Thompson_and_Dennis_Ritchie.jpg/270px-Ken_Thompson_and_Dennis_Ritchie.jpg) 76 | 77 | - 1973년 데니스 리치와 켄 톰슨이 C를 개발한 뒤, C 기반 UNIX 재작성 78 | 79 | --- 80 | 81 | ## Before Linux(3) 82 | 83 | ![](http://i1-news.softpedia-static.com/images/news2/Richard-Stallman-Says-He-Created-GNU-Which-Is-Called-Often-Linux-482416-2.jpg) 84 | - 1984년 리차드 스톨먼이 오픈 소프트웨어 자유성 확보를 위한 GNU 프로젝트 돌입 85 | 86 | --- 87 | 88 | ### Meaning of GNU 89 | 90 | GNU == `G`NU is `N`ot `U`nix 91 | 92 | --- 93 | 94 | ## Before Linux(4) 95 | 96 | ![](http://i.imgur.com/SMYPY.jpg) 97 | 98 | - But, GNU 프로젝트에는 커널이 없었고.. 99 | 100 | --- 101 | 102 | ### Kernel 103 | 104 | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Kernel_Layout.svg/380px-Kernel_Layout.svg.png) 105 | 106 | - 하드웨어와 응용프로그램을 이어주는 운영체제의 핵심 시스템소프트웨어 107 | 108 | --- 109 | 110 | ## Linus Torvalds 111 | 112 | https://www.youtube.com/embed/IVpOyKCNZYw 113 | 114 | - 헬싱키 대학생이던 리누스 토발즈는 앤디 타넨바움의 MINIX를 개조한 Linux를 발표 115 | - 0.1 - bash(GNU Bourne Again SHell), gcc(UNIX 기반 C 컴파일러) 116 | 117 | --- 118 | 119 | ## Linux 120 | 121 | - 리누스 토발즈가 작성한 커널 혹은 GNU 프로젝트의 라이브러리와 도구가 포함된 운영체제 122 | - PC와 모바일, 서버, 임베디드 시스템 등 다양한 분야에서 활용 123 | - Redhat, Debian, Ubuntu, Android 등 다양한 배포판이 존재 124 | 125 | --- 126 | 127 | ## Shell 128 | 129 | - 운영체제의 커널과 사용자를 이어주는 소프트웨어 130 | 131 | - sh(Bourne Shell): AT&T Bell 연구소의 Steve Bourne이 작성한 유닉스 쉘 132 | - csh: 버클리의 Bill Joy가 작성한 유닉스 쉘(C언어랑 비슷한 모양) 133 | - bash(Bourne Again Shell): Brian Fox가 작성한 유닉스 쉘 134 | - 다양한 운영체제에서 기본 쉘로 채택 135 | - zsh: Paul Falstad가 작성한 유닉스 쉘 136 | - sh 확장형 쉘 137 | - 현재까지 가장 완벽한 쉘 138 | 139 | --- 140 | 141 | ## Let's learn bash 142 | 143 | --- 144 | 145 | ## Shell Command Basic(1) 146 | 147 | ```shell 148 | $ cd documents 149 | 150 | $ mkdir dev # - make directory dev 151 | $ cd dev # - change directory 152 | $ cd .. # - go up 153 | $ pwd # - print working directory 154 | 155 | $ ls 156 | $ ls -al 157 | 158 | $ touch hello.py # - create hello.py 159 | $ exit # - terminate shell 160 | ``` 161 | 162 | --- 163 | 164 | ## chmod 165 | 166 | > 파일의 권한을 설정할 때 사용 167 | 168 | `drwxr-xr-x` 169 | `d` or `-`: directory or file 170 | (user)(group)(other) 171 | `r`: read 172 | `w`: write 173 | `x`: execute 174 | `-`: no permission 175 | 176 | --- 177 | 178 | ## chmod 179 | 180 | `$ chmod [옵션] (8진수) (파일명)` 181 | 8진수 182 | 0: 000 183 | 1: 001 184 | 2: 010 185 | 3: 011 186 | 4: 100 187 | 5: 101 188 | 6: 110 189 | 7: 111 190 | 191 | --- 192 | 193 | ## Shell Command Basic(2) 194 | 195 | ```shell 196 | $ mv hello.py dev 197 | $ cp hello.py dev 198 | 199 | $ rm hello.py 200 | $ rm -rf dev/ 201 | 202 | $ cat README.md 203 | $ head README.md 204 | $ tail -20 README.md 205 | $ cat README.md > README.txt 206 | $ open README.md # use explorer instead open on windows 207 | ``` 208 | 209 | --- 210 | 211 | ## Vim 212 | 213 | ![](https://www.vim.sexy/img/Vimlogo.svg) 214 | 215 | --- 216 | 217 | # TODO 218 | 219 | 1. documents/dev에서 fastcampus 디렉토리를 만듭니다 220 | 2. 새파일 index.html을 만들어주세요 221 | 3. vim으로 내부 작업을 한뒤 저장하여 cat 명령어로 저장을 확인합니다. 222 | 4. index.html을 style.css로 이름을 변경합니다. 223 | 224 | --- 225 | 226 | ![height:600px](https://kldp.org/files/vi-vim-cheat-sheet-ko.png) 227 | 228 | --- 229 | 230 | ## Vim Basic 231 | 232 | `h,j,k,l - move cursor` 233 | `i - insert mode` 234 | `v - visual mode` 235 | `d - delete` 236 | `y - yank` 237 | `p - paste` 238 | `u - undo` 239 | `r - replace` 240 | `$ - move end of line` 241 | `^ - move start of line` 242 | `:q - quit` 243 | `:q! - quit w/o write(no warning)` 244 | `:wq - write and quit` 245 | `:{number} - move to {number}th line` 246 | 247 | --- 248 | 249 | ### write `hello.py` with Vim 250 | 251 | `$ vim` 252 | `$ vim hello.py` 253 | 254 | `i` 255 | `-- insert --` 256 | type `print("hello python!")` 257 | press `esc` to escape 258 | 259 | `:wq` 260 | 261 | `$ python hello.py` 262 | 263 | --- 264 | 265 | ### copy & paste 266 | 267 | `$ vim hello.py` 268 | 269 | `v` 270 | `-- visual --` 271 | 블록지정 후 `y` 272 | `p` 273 | 274 | press `esc` to escape 275 | `:wq` 276 | 277 | `$ python hello.py` 278 | 279 | --- 280 | 281 | ### Use Vim in real world! 282 | 283 | - [vim advanture](https://vim-adventures.com/) 284 | - [vimium](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=en) 285 | - [vs code vim](https://github.com/VSCodeVim/Vim) 286 | 287 | 288 | 289 | 290 | -------------------------------------------------------------------------------- /handouts/01-shell-vim-for-git.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/handouts/01-shell-vim-for-git.pdf -------------------------------------------------------------------------------- /handouts/02-git-start.md: -------------------------------------------------------------------------------- 1 | --- 2 | marp: true 3 | --- 4 | 5 | 6 | # git (1) 7 | 8 | ## Fastcampus Programming SCHOOL 9 | 10 | --- 11 | 12 | 18 | 19 | ![height:400px](https://git-scm.com/images/logos/downloads/Git-Logo-2Color.png) 20 | 21 | --- 22 | 23 | ## VCS (Version Control System) 24 | 25 | == SCM (Source Code Management) 26 | < SCM (Software Configuration Management: 형상관리) 27 | 28 | --- 29 | 30 | ## chronicle of git 31 | 32 | ![](https://www.blogcdn.com/www.engadget.com/media/2009/10/linus-torvalds-gives-windows-7-a-big-thumbs-up.jpg) 33 | 34 | --- 35 | 36 | ## chronicle of git 37 | 38 | - Linux Kernal을 만들기 위해 Subversion을 쓰다 화가 난 리누스 토발즈는 2주만에 git이라는 버전관리 시스템을 만듦 39 | [git official repo](https://github.com/git/git) 40 | 41 | --- 42 | 43 | ## Characteristics of git 44 | 45 | - 빠른속도, 단순한 구조 46 | - 분산형 저장소 지원 47 | - 비선형적 개발(수천개의 브랜치) 가능 48 | 49 | --- 50 | 51 | ## Pros of git 52 | 53 | - **중간-발표자료_최종_진짜최종_15-4(교수님이 맘에들어함)_언제까지??_이걸로갑시다.ppt** 54 | 55 | - 소스코드 주고받기 없이 동시작업이 가능해져 생산성이 증가 56 | - 수정내용은 **commit** 단위로 관리, 배포 뿐 아니라 원하는 시점으로 **Checkout** 가능 57 | - 새로운 기능 추가는 **Branch**로 개발하여 편안한 실험이 가능하며, 성공적으로 개발이 완료되면 **Merge**하여 반영 58 | - 인터넷이 연결되지 않아도 개발할 수 있음 59 | 60 | --- 61 | 62 | ## git GUI Clients 63 | 64 | - git GUI 65 | - sourcetree 66 | - kraken 67 | - smartGit 68 | 69 | --- 70 | 71 | ## CLI first 72 | 73 | - Source code를 Cloud Platform에서 사용할 경우, CLI 커맨드로 버전관리를 수행해야 합니다. 74 | - CLI 커맨드로 git을 사용할 줄 알면, GUI 도구가 제공하는 기능에 대한 이해가 빠릅니다. 75 | - 확인용도로 GUI를 참고하는 것은 Good^^ 76 | 77 | --- 78 | 79 | ## git objects 80 | 81 | - Blob: 파일 하나의 내용에 대한 정보 82 | - Tree: Blob이나 subtree의 메타데이터(디렉토리 위치, 속성, 이름 등) 83 | - Commit: 커밋 순간의 스냅샷 84 | 85 | --- 86 | 87 | ## git Process and Command 88 | 89 | ![](https://i.stack.imgur.com/MgaV9.png) 90 | 91 | --- 92 | 93 | ## Useful package manager for mac 94 | 95 | http://brew.sh/index_ko.html 96 | 97 | --- 98 | 99 | ### install git 100 | 101 | - for windows 102 | https://gitforwindows.org/ 103 | 104 | - for MacOS 105 | `$ brew install git` 106 | - for Ubuntu 107 | `$ sudo apt-get install git` 108 | 109 | `$ git --version` 으로 정상적으로 설치되었는지를 확인 110 | 111 | ### Optional 112 | 113 | - github CLI 114 | https://cli.github.com/ 115 | 116 | --- 117 | 118 | ## git is not equal to github 119 | 120 | ![](http://1.bp.blogspot.com/-WY2YpNr3W6g/UY6tZAc-H3I/AAAAAAAABLY/xJ9x3wIY8V8/s1600/Github2.png) 121 | 122 | --- 123 | 124 | ### sign up github 125 | 126 | https://github.com/ 127 | 128 | **important!!** 129 | 130 | - 가입할 `email`과 `username`은 멋지게 131 | - ~~private repo를 원한다면 $7/month~~ 132 | 133 | --- 134 | 135 | ## Useful blog post 136 | [https://ulgoon.github.io/2019/09/09/01-git-first/](https://ulgoon.github.io/2019/09/09/01-git-first/) 137 | 138 | --- 139 | 140 | ## Important github User Interface 141 | 142 | --- 143 | 144 | ### Star 145 | 146 | ![](../img/star.png) 147 | 148 | ### watch 149 | 150 | ![](../img/watch.png) 151 | 152 | --- 153 | 154 | ## Set configuration 155 | 156 | terminal 157 | 158 | ```shell 159 | $ git config --global user.name "{github username}" 160 | $ git config --global user.email "{github email address}" 161 | $ git config --global core.editor "vim" 162 | $ git config --global core.pager "cat" 163 | $ git config --list 164 | ``` 165 | 166 | - optional 167 | `$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"` 168 | 169 | --- 170 | 171 | ## My First Repo 172 | 173 | Let's make your first repo with github 174 | 175 | --- 176 | ## My First Repo(1) 177 | 178 | [Let's Create New repo](https://github.com/new) 179 | 180 | --- 181 | 182 | ## My First Repo(2) 183 | 184 | ```shell 185 | $ mkdir first-repo && cd first-repo 186 | $ git init 187 | $ git remote add origin https://github.com/{username}/{reponame}.git 188 | $ touch README.md 189 | $ git add README.md 190 | $ git commit -m "docs: Create README.md" 191 | $ git push -u origin master 192 | ``` 193 | 194 | --- 195 | 196 | > Caution: Do not `git init` on any other directories 197 | 198 | --- 199 | 200 | ## Second push to My First Repo 201 | 202 | ```shell 203 | # make some change on README.md 204 | $ git add . 205 | $ git commit 206 | $ git push origin master 207 | ``` 208 | 209 | --- 210 | 211 | ## Commit Convention 212 | 213 | - 커밋 제목은 50자 이내로 요약하여 작성한다 214 | - 제목과 내용사이 한 칸 215 | - prefix를 사용하여 한 눈에 커밋의 용도를 알기 쉽게 한다 216 | 217 | ```text 218 | feat: features 219 | docs: documentations 220 | conf: configurations 221 | test: test 222 | fix: bug-fix 223 | refactor: refactoring 224 | ci: Continuous Integration 225 | build: Build 226 | perf: Performance 227 | ``` 228 | 229 | --- 230 | 231 | ### Commit Convention - example 232 | 233 | ```text 234 | feat: Create server.py to start flask project 235 | docs: Create README.md 236 | conf: poetry init 237 | test: User model CRUD test complete 238 | ``` 239 | 240 | --- 241 | 242 | ## Start Project with `git clone` 243 | 244 | --- 245 | 246 | ## start project with clone 247 | 248 | - github에서 repo를 생성합니다. 249 | 250 | ```shell 251 | $ git clone {repo address} 252 | $ git add . 253 | $ git commit 254 | $ git push 255 | ``` 256 | 257 | --- 258 | 259 | ## My First Github Pages 260 | 261 | github 저장소를 활용해 정적인 사이트 호스팅이 가능 262 | 263 | `username`.github.io 264 | http://tech.kakao.com/ 265 | https://spoqa.github.io/ 266 | 267 | --- 268 | 269 | ### sample index page 270 | 271 | After create new repo throuch github, 272 | 273 | `$ git clone https://github.com/username/username.github.io.git` 274 | 275 | Create New file `index.html` 276 | 277 | `$ git add .` 278 | `$ git commit -m "first page"` 279 | `$ git push origin master` 280 | 281 | --- 282 | 283 | ### sample index page 284 | 285 | ```html 286 | 287 | 288 | 289 | 290 | My first gh page 291 | 292 | 293 |

Home

294 |

Hello, there!

295 | 296 | 297 | ``` 298 | 299 | --- 300 | 301 | ### Static Site Generator 302 | 303 | - [Jekyll](https://jekyllrb.com/): Ruby 기반 정적인 블로그 생성기 304 | - 설치와 사용이 쉬움 305 | - 사용자가 많았음 306 | - [Hugo](https://gohugo.io/): Golang 기반 정적인 블로그 생성기 307 | - 빠른 속도로 사이트를 생성 308 | - 사용자 증가 중 309 | - [Hexo](https://hexo.io/): Node.js 기반 정적인 블로그 생성기 310 | - Node.js를 안다면 커스터마이즈가 쉬움 311 | - 빠른 속도로 사용자 증가 중 312 | 313 | **Recommand** 314 | `Hexo` > `Jekyll` > `Hugo` 315 | 316 | --- 317 | 318 | ## Let's use Hexo 319 | 320 | [![asciicast height:400px](https://asciinema.org/a/233626.svg)](https://asciinema.org/a/233626) 321 | 322 | --- 323 | 324 | ### Requirements 325 | 326 | 1. git 327 | 2. node.js(https://nodejs.org/en/) 328 | 329 | `$ npm install -g hexo-cli` 330 | 331 | --- 332 | 333 | ## Init hexo project 334 | 335 | ```shell 336 | $ hexo init 337 | $ cd 338 | $ npm install 339 | ``` 340 | 341 | ## clean && generate static files 342 | 343 | `$ hexo clean && hexo generate` 344 | 345 | ## Run hexo server 346 | 347 | `$ hexo server` 348 | 349 | --- 350 | 351 | ## deploy 352 | 353 | `$ npm install hexo-deployer-git --save` 354 | 355 | ```yaml 356 | deploy: 357 | type: git 358 | repo: branch: [branch] #published 359 | message: 360 | ``` 361 | 362 | --- 363 | 364 | ## .gitignore and .gitattributes 365 | 366 | ### .gitignore: 특정파일 추적을 하고 싶지 않을 경우 367 | 368 | ```yaml 369 | *.java 370 | *.py[cod] 371 | ``` 372 | 373 | ### .gitattributes: 파일단위, 디렉토리 별 다른 설정을 부여하고 싶을 경우 374 | 375 | ```yaml 376 | # Avoid conflicts in pbxproj files 377 | *.pbxproj binary merge=union 378 | 379 | # Always diff strings files as text 380 | *.strings text diff 381 | ``` 382 | 383 | - reference: [https://thoughtbot.com/blog/xcode-and-git-bridging-the-gap](https://thoughtbot.com/blog/xcode-and-git-bridging-the-gap) 384 | 385 | 386 | 387 | 388 | -------------------------------------------------------------------------------- /handouts/02-git-start.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/handouts/02-git-start.pdf -------------------------------------------------------------------------------- /handouts/03-cowork-with-git.md: -------------------------------------------------------------------------------- 1 | --- 2 | marp: true 3 | --- 4 | 5 | 6 | # git (2) 7 | 8 | ## Fastcampus Programming SCHOOL 9 | 10 | --- 11 | 12 | 18 | 19 | ## Branch 20 | 21 | --- 22 | 23 | ## What is branch? 24 | 25 | --- 26 | 27 | ## What is branch?(1) 28 | 29 | ![height:500px](https://www.sideshowtoy.com/assets/products/3005011-groot/lg/marvel-guardians-of-the-galaxy-groot-premium-format-3005011-02.jpg) 30 | 31 | --- 32 | 33 | ## What is branch?(2) 34 | 35 | 분기점을 생성하고 독립적으로 코드를 변경할 수 있도록 도와주는 모델 36 | 37 | ex) 38 | 39 | master branch 40 | 41 | ```python 42 | print('hello world!') 43 | ``` 44 | 45 | another branch 46 | 47 | ```python 48 | for i in range(1,10): 49 | print('hello world for the %s times!' % i) 50 | ``` 51 | 52 | --- 53 | 54 | ## Branch(1) 55 | 56 | Show available local branch 57 | `$ git branch` 58 | 59 | Show available remote branch 60 | `$ git branch -r` 61 | 62 | Show available All branch 63 | `$ git branch -a` 64 | 65 | --- 66 | 67 | ## Branch(2) 68 | 69 | Create branch 70 | `$ git branch stem` 71 | 72 | Checkout branch 73 | `$ git checkout stem` 74 | 75 | Create & Checkout branch 76 | `$ git checkout -b new-stem` 77 | 78 | make changes inside readme.md 79 | `$ git commit -a -m 'edit readme.md'` 80 | `$ git checkout master` 81 | 82 | merge branch 83 | `$ git merge stem` 84 | 85 | --- 86 | 87 | ## Branch(3) 88 | 89 | delete branch 90 | `$ git branch -D stem` 91 | 92 | push with specified remote branch 93 | `$ git push origin stem` 94 | 95 | see the difference between two branches 96 | `$ git diff master stem` 97 | 98 | --- 99 | 100 | ## Branch asciinema 101 | 102 | [![asciicast height:400px](https://asciinema.org/a/qRmUXvtrkXS6Y09H9TM1hVAhT.svg)](https://asciinema.org/a/qRmUXvtrkXS6Y09H9TM1hVAhT) 103 | 104 | --- 105 | 106 | ## branching models 107 | 108 | - git flow 109 | - (hotfix)- `master` -(release)- `develop` - feature 110 | - pros: 가장 많이 적용, 각 단계가 명확히 구분 111 | - cons: 복잡.. 112 | - github flow 113 | - `master` - feature 114 | - pros: 브랜치 모델 단순화, `master`의 모든 커밋은 deployable 115 | - cons: CI 의존성 높음. 누구 하나라도 실수했다간..(pull request로 방지) 116 | - gitlab flow 117 | - `production` - `pre-production` - `master` - feature 118 | - pros: deploy, issue에 대한 대응이 가능하도록 보완 119 | - cons: git flow와 반대 (`master`-develop, `production`-master) 120 | 121 | --- 122 | 123 | ## git flow strategy 124 | 125 | ![](https://b.kisscc0.com/20180815/saq/kisscc0-github-branching-workflow-diagram-1492474981-svg-5b74286bb0f1a7.6096632915343391797248.png) 126 | 127 | --- 128 | 129 | ## use git flow easily! 130 | 131 | [Link](https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html) 132 | 133 | ![](https://danielkummer.github.io/git-flow-cheatsheet/img/git-flow-commands.png) 134 | 135 | --- 136 | 137 | ## Collaborate with your Co-worker 138 | 139 | --- 140 | 141 | ## Method 1: Collaboration 142 | 143 | Add Collaborator 144 | ![](../img/collaborators.png) 145 | 146 | --- 147 | 148 | ## Collaboration 149 | 150 | Add, Commit and Push like you own it. 151 | 152 | --- 153 | 154 | ## Method 2: Fork and Merge 155 | 156 | ![](../img/fork1.png) 157 | 158 | --- 159 | 160 | ## Fork and Merge 161 | 162 | ![](../img/fork2.png) 163 | 164 | --- 165 | 166 | ## Fork and Merge 167 | 168 | ![](../img/fork3.png) 169 | 170 | --- 171 | 172 | ## Fork and Merge 173 | 174 | `$ git clone https://github.com/username/forked-repo.git` 175 | 176 | --- 177 | 178 | ## Fork and Merge 179 | 180 | `$ git branch -a` 181 | `$ git checkout -b new-feature` 182 | 183 | --- 184 | 185 | ## Fork and Merge 186 | 187 | Make some change 188 | 189 | `$ git add file` 190 | `$ git commit -m "commit message"` 191 | `$ git push origin new-feature` 192 | 193 | --- 194 | 195 | ## Fork and Merge 196 | 197 | ![](../img/pr1.png) 198 | 199 | --- 200 | 201 | ## Fork and Merge 202 | 203 | ![](../img/pr2.png) 204 | 205 | --- 206 | 207 | ## Fork and Merge 208 | 209 | ![](../img/pr3.png) 210 | 211 | --- 212 | 213 | ## Fork and Merge 214 | 215 | ![](../img/pr4.png) 216 | 217 | --- 218 | 219 | ## Fork and Merge 220 | 221 | ![](../img/pr5.png) 222 | 223 | --- 224 | 225 | ## Fork and Merge 226 | 227 | ![](../img/pr6.png) 228 | 229 | --- 230 | 231 | ## Fork and Merge 232 | 233 | ![](../img/pr7.png) 234 | 235 | --- 236 | 237 | 1. 팀장이 자기 소유의 repo를 만든다 238 | 2. clone 하여 약간의 작업 후 add, commit, push 239 | 3. notice 받은 팀원은 fork 하여 자신의 소유가 된 repo를 clone 240 | 4. 작업할 내용을 미리 issue 등록 241 | 4-1. or 팀장이 강제 issue 생성 후 작업지시 242 | 5. `$ git remote add pmorigin {pm의 repo 주소}` 하여 미리 등록 243 | 6. feature branch 생성 후 작업, add, commit(with issue no) 244 | 7. master로 merge 한 후, 나의 master로 push 245 | 8. pull request 생성 246 | 9. 팀장은 확인 후 merge(conflict, file change 확인 필수) 247 | 248 | --- 249 | 250 | ## volvocars main page clone with git flow 251 | 252 | 1. role 분배(40분안에 클론하려면 어떻게 역할을 나눠야 할까) 253 | 2. 위의 과정 반복 254 | 255 | --- 256 | 257 | ## continuous pull 258 | 259 | --- 260 | 261 | ## continuous pull 262 | 263 | `$ git remote add upstream https://github.com/anotheruser/original-repo.git` 264 | 265 | `$ git fetch upstream` 266 | `$ git merge upstream/master` 267 | 268 | --- 269 | 270 | ## How to move files 271 | 272 | ### Don't 273 | 274 | ```shell 275 | $ mv style.css static/css 276 | ``` 277 | -> deleted: 278 | -> untracked files: 279 | 280 | ### Do 281 | 282 | ```shell 283 | $ git mv style.css static/css 284 | ``` 285 | -> renamed: 286 | 287 | --- 288 | 289 | ## Issue & Projects 290 | 291 | Issue: 프로젝트, 레포와 관계된 모든 해야할 일과 버그, 개선사항 등을 기록 292 | 293 | Projects: 해야할 일의 진도에 따른 구성과 우선순위 지정 294 | 295 | --- 296 | 297 | ### Issue(1) 298 | 299 | ![height:400px](../img/issue1.png) 300 | 301 | --- 302 | 303 | ### Issue(2) 304 | 305 | ![height:400px](../img/issue2.png) 306 | 307 | --- 308 | 309 | ### Issue(3-1) 310 | 311 | ![height:550px](../img/issue3.png) 312 | 313 | --- 314 | 315 | ### Issue(3-2) 316 | 317 | - Assignees: 이 이슈에 대한 책임인원 318 | - Labels: 이슈의 종류 319 | - Projects: 이슈를 배당할 프로젝트 320 | - Milestone: 이슈에 해당하는 중요 시점 지정 321 | 322 | --- 323 | 324 | ### Projects 325 | 326 | --- 327 | 328 | ### Projects(2) 329 | 330 | ![](../img/projects1.png) 331 | 332 | 333 | 334 | 335 | -------------------------------------------------------------------------------- /handouts/03-cowork-with-git.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/handouts/03-cowork-with-git.pdf -------------------------------------------------------------------------------- /handouts/README.md: -------------------------------------------------------------------------------- 1 | # Essential git 2 | 3 | ## git practice repository for all 4 | 5 | ### Index 6 | 7 | TODO: list item, img, link 8 | 9 | - Item 1 10 | - Item 2 11 | 12 | 1. Ordered Item 1 13 | 2. Ordered Item 2 14 | 3. Ordered Item 3 15 | 16 | ## Requirements 17 | 18 | - Python 19 | - node.js 20 | - express 21 | - react.js 22 | 23 | ### Images 24 | 25 | ![fastcampus](https://www.filepicker.io/api/file/GiggkOYEQvi3VyxKUJ0b) 26 | 27 | `` 28 | 29 | ### Links 30 | 31 | [Go to google](https://www.google.com) 32 | 33 | `Go to google` 34 | 35 | 44 | -------------------------------------------------------------------------------- /img/addrmorigin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/addrmorigin.png -------------------------------------------------------------------------------- /img/collaborators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/collaborators.png -------------------------------------------------------------------------------- /img/fork1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/fork1.png -------------------------------------------------------------------------------- /img/fork2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/fork2.png -------------------------------------------------------------------------------- /img/fork3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/fork3.png -------------------------------------------------------------------------------- /img/issue1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/issue1.png -------------------------------------------------------------------------------- /img/issue2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/issue2.png -------------------------------------------------------------------------------- /img/issue3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/issue3.png -------------------------------------------------------------------------------- /img/pr1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr1.png -------------------------------------------------------------------------------- /img/pr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr2.png -------------------------------------------------------------------------------- /img/pr3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr3.png -------------------------------------------------------------------------------- /img/pr4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr4.png -------------------------------------------------------------------------------- /img/pr5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr5.png -------------------------------------------------------------------------------- /img/pr6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr6.png -------------------------------------------------------------------------------- /img/pr7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/pr7.png -------------------------------------------------------------------------------- /img/projects1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/projects1.png -------------------------------------------------------------------------------- /img/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/star.png -------------------------------------------------------------------------------- /img/thankforme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/thankforme.jpg -------------------------------------------------------------------------------- /img/watch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ulgoon/essential-git/ed480734ce8582645b1f1e05634c6538f86c19ff/img/watch.png -------------------------------------------------------------------------------- /resources/fizzbuzz.py: -------------------------------------------------------------------------------- 1 | print([i for i in range(1,100+1)]) 2 | --------------------------------------------------------------------------------