Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Git 기본

724 views

Published on

git 사내 교육을 위해 작성한 자료입니다. 공부를 하면서 개인적으로 생각했던 부분들도 있어서 오류가 있을 수 있습니다. 그런 부분들은 댓글 남겨주시면 수정하도록 하겠습니다.

Published in: Software
  • Have you ever used the help of ⇒ www.HelpWriting.net ⇐? They can help you with any type of writing - from personal statement to research paper. Due to this service you'll save your time and get an essay without plagiarism.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Writing a good research paper isn't easy and it's the fruit of hard work. For help you can check writing expert. Check out, please ⇒ www.WritePaper.info ⇐ I think they are the best
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Git 기본

  1. 1. Git 강현욱
  2. 2. 버전 관리? 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템. WINDOWS - 백업. MAC - TIME MACHINE
  3. 3. 기존의 버전 관리 로컬 버전 관리- local VCS (Version Control System) • 간단한 데이터 베이스를 통한 변경 관리. 중앙 집중식 버전 관리 - CVCS (Centralized VCS) • CVS • SVN (Subversion)
  4. 4. 분산 버전 관리 시스템 - DVCS (Distributed VCS) Git Mecurial Darcs
  5. 5. 기존과의 차이점 저장소의 위치
  6. 6. Git 상태 Modified working directory Staged staging area Committed git directory(repository)
  7. 7. Git 설치 맥용 다운로드. https://git-scm.com/download/mac 윈도우용 다운로드. http://msysgit.github.io
  8. 8. Git 최초 설정. git config --global user.name “John Doe” git config --global user.email johndoe@example.com git config --list --global
  9. 9. cd ~/.ssh ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/we/.ssh/id_rsa): test_git Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in test_git. Your public key has been saved in test_git.pub. ……
  10. 10. vi ~/.ssh/config Host gitlab —> alias HostName gitlab.com —> original host IdentityFile ~/.ssh/test_git
  11. 11. cat ~/.ssh/test_git.pub Title 은 추후 관리 용이한 이름으로 적절히 지정
  12. 12. Git 저장소 만들기. git init git add --all git commit -m ‘first commit’ git remote add origin git://github.com/my/project.git *git remote add [name] [url]
  13. 13. 기존 저장소 Clone git clone git://github.com/my/project.git [project_dir]
  14. 14. 최초 설정 및 저장소 만들기 시 연
  15. 15. .gitignore ✓ 아무것도 없는 줄이나, #로 시작하는 줄은 무시한다. ✓ 표준 Glob패턴을 사용한다. ✓ 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한 다. ✓ 느낌표(!)로시작하는 패턴의 파일은 무시하지 않는다. ๏ **/ 스타일의 문법은 Git 1.8.2 버전 이상에서 사용 가능.
  16. 16. #acomment-이줄은무시한다. #확장자가.a인파일무시 *.a # 윗 줄에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않는다. !lib.a # 루트 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리 에 있는 파일은 무시하지 않는다. /TODO # build/ 디렉토리에 있는 모든 파일은 무시한다. build/ # `doc/notes.txt`같은 파일은 무시하고 doc/server/arch.txt같은 파일은 무시하지 않 는다. doc/*.txt # `doc` 디렉토리 아래의 모든 .txt 파일을 무시한다. doc/**/*.txt
  17. 17. Commit 기존 버전 관리 시스템에서의 Version Snapshot
  18. 18. touch README touch LICENSE touch test.rb git add --all or git add . git commit -m ‘abc txt commit’
  19. 19. git branch testing
  20. 20. git checkout testing
  21. 21. touch abc git add abc git commit -m ‘test commit’
  22. 22. Git branch 버전 관리 시스템의 기본. 빠른 속도 제공. 얼마든지 새로운 브랜치를 사용하여 테스트 가능.
  23. 23. branch는 commit 의 포인터
  24. 24. git branch test1 git checkout test1 -> git checkout -b test1
  25. 25. git tag branch 와 유사하지만 포인터가 이동하지 않는다. 종류는 2가지 Lightweight, Annotated
  26. 26. Lightweight -> 단순 태그. Annotated -> tagger, date, message 등의 정보 및 서명도 가능. git tag v2.1.0 [commit checksum] git tag -a v2.1.0 -m ‘메시지 저장’ [commit checksum]
  27. 27. branch, tag, commit 시연
  28. 28. git push 리모트 저장소에 현재 브랜치를 올리는 작업. git remote add [리모트 저장소명] [url] git push [리모트 저장소명] [브랜치명]
  29. 29. git fetch 리모트 저장소의 최신 정보를 가져오는 작업. git fetch [리모트 저장소] ex > git fetch origin origin 의 모든 브랜치 정보를 가져온다.
  30. 30. git pull git fetch + git merge 작업을 하는 역할. 현재 checkout 된 브랜치의 리모트 저장소에 tracking 중인 브랜치를 찾아서 merge 까지 동시에 진행. git pull {[리모트 저장소명] [브랜치명]}
  31. 31. ✓ 추천하지 않는 기능.(정책에 따라 다름) ✓ 로컬과 리모트에 있는 tracked브랜치에서 다른 사 람이 다른 작업을 진행 중이었다면, fast-forward 가 아닌 merge 가 진행되어 복잡한 히스토리 구성 . 추천 ✓ git fetch 후 git rebase
  32. 32. push, fetch, pull 시연
  33. 33. Git merge 서로 다른 commit 시점(version)의 통합. git checkout master git merge testing
  34. 34. 단, 두 브랜치 모두에 해당하진 않는 다.
  35. 35. git merge testing 결과는?
  36. 36. merge 는 통합 따라서, 가. master == testing 나. master != testing
  37. 37. ✓ commit 시점과 branch 는 같지 않다. ✓ branch 는 단지 commit 시점의 checksum을 가리 키고 있는 포인터일 뿐. ✓ 중요한 것은 commit 시점. ✓ git merge testing 은 git merge 6d5bfac3 과 동일 하다. (단, 자동으로 생성되는 메시지는 달라짐.)
  38. 38. merge != branch + branch merge = commit + commit
  39. 39. conflict merge, rebase 과정에서 일어나는 충돌. 해결 후에 commit 가능.
  40. 40. git merge test1 Auto-merging conflict CONFLICT (content): Merge conflict in conflict Automatic merge failed; fix conflicts and then commit the result. git status On branch test2 You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: conflict no changes added to commit (use "git add" and/or "git commit -a")
  41. 41. conflict test <<<<<<< HEAD hello world!! ======= hello world >>>>>>> test1 my name is git!
  42. 42. git add conflict git commit -m ‘conflict end’
  43. 43. conflict 해결 이력은 남지 않음 (source tree 상에서) = 남의 수정본을 날릴 수 있음 충돌이 발생한 경우에는 merge 하려는 commit 의 author와 같이 해결
  44. 44. git rebase ✓ merge 와 같은 통합 작업 용도. ✓ 차이점은 별도의 branch를 하나의 branch로 통합 가능. ✓ 개인 성향 또는 정책 문제로 merge, rebase 중 하 나가 맞고 다른 하나가 틀리다고 볼 수는 없음. ✓ 히스토리가 깔끔해진다는 장점을 가지고 있음.
  45. 45. git rebase master First, rewinding head to replay your work on top of it... Applying: 3 Applying: 4
  46. 46. 공개 저장소에 Push한 commit을 Rebase 금지 이유는?
  47. 47. merge, conflict, rebase 시연
  48. 48. git cherry-pick ✓ 특정 시점의 commit 버전만 가져오고 싶은 경우. ✓ 일반적으로 많이 사용하지는 않지만 알면 유용한 기능. ✓ git cherry-pick [commit checksum]
  49. 49. git stash ✓ commit 이 아닌 상태로 워킹 디렉토리 파일 임시 저장. ★ 저장 대상 ➡ modified 이면서 tracked 상태인 파일. ➡ Staging Area 에 있는 파일.
  50. 50. git stash Saved working directory and index state WIP on test1: 2bd4187 4 HEAD is now at 2bd4187 4 git stash list stash@{0}: WIP on test1: 2bd4187 4 타 브랜치로 이동 후 기타 작업 ~~~ git stash save ‘mysql work’ stash@{0}: On test1:mysql work
  51. 51. git stash apply On branch test1 Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: test.txt no changes added to commit (use "git add" and/or "git commit -a") git stash drop stash@{0}
  52. 52. git stash pop - 적용과 동시에 삭제, 충돌 시에는 삭제 안함. - stash 에서 가장 최신 것으로 자동 적용 수동 선택 불가. git stash apply stash@{1} && git stash drop stash@{1}
  53. 53. cherry-pick, stash 시연
  54. 54. git reset ✓ 특정 commit 시점으로 되돌아갈 때 사용. ✓ 이미 push 한 commit 은 금지. ✓ 로컬에서만 commit 한 경우 사용. ✓ 세가지 옵션이 있음 hard, soft, mixed.
  55. 55. git reset --[hard or soft or mixed] [브랜치명 or commit key] ✓ hard > 모든 상태를 그 commit 시점으로 되돌림.(untracked file 은 유지) ✓ soft > 모든 상태를 되돌리고 현재 working directory와 되돌리고자 하는 시 점 사이의 모든 수정 사항이 staging 영역까지 복구되어 나오는 방식. ✓ mixed > soft 와 같지만 모두 unstaging 영역으로 들어감.
  56. 56. git revert ✓ 특정 commit 시점에 수정된 부분을 되돌릴 경우. ✓ 이미 push 한 경우라도 사용 가능. (기존 commit 을 없애는 것이 아닌 추가하는 것이기 때문) ๏ 주의 여러개의 브랜치를 사용 중에 한 곳에서 revert 를 하면 그 revert 가 최신이 되어서 추후 merge 를 하거나 하면 모든 브랜치에서 수 정 내용이 사라짐.
  57. 57. git revert [브랜치 명 or commit checksum]
  58. 58. reset, revert 시연
  59. 59. Git FLOW ✓ Vincent Driessen 브랜칭 모델 *Git 브랜칭 모델의 표준. ✓ 새롭게 시작하려는데 어떻게 해 야할지 모르는 경우. ✓ 전략을 세워도 자신이 없을 경우. ✓ 얼마든지 응용 가능.
  60. 60. master - release 에서 테스트가 완료된 소스를 머지하여 운영에 배 포하는 브랜치. develop - 최신 소스의 저장 + 배포할 소스의 머지. feature - 기능의 단위로 이루어진 브랜치. release - 배포하기 전 최종 테스트를 진행하기 위한 브랜치. hotfix - master 에서 급하게 수정해야 할 것들 -> 다른 어떤 기능보 다 먼저 배포되어야 할 기능.
  61. 61. commit 메시지 제목은 간략하게 중요 내용만 포함. (50자 이내) 내용은 상세하게. 마지막에는 ‘.’ 또는 ‘ ’공백을 넣어준다.(한글일 경우)
  62. 62. 2337 - 수정 페이지에서 세션 타임아웃 시 에러 페이지 노출. - 수정 페이지로 들어갈 때 상세 페이지의 URI 를 가지고 가도록 수정. - 필수 인자가 없을 경우 rollbackUri 로 이동. rollbackUril 가 없으 면 '/' 으로 이동. - amdDept 로 잘못된 부분을 amdTeam 으로 수정.
  63. 63. Q/A
  64. 64. 감사합니다.

×