1 / 81

What is git & How to use git

What is git & How to use git. By Nakhyun Choi ( bbashong ). 가여운 프로그래머가 한명있다 . 이창원 (21 세 , 남 ) 그에게는 두가지 고민이 있다 . 첫 번째 고민. 내가 개발하고 있는 프로그램 A 가 잘못 되었을 때 과거의 어떤 시점으로 다시 되돌아가고 싶어 !. 그의 해결법. 프로젝트에 변경 사항이 있을 때 마다 프로젝트 폴더 전체를 복사해서 다른이름으로 저장해두자 !

mareo
Download Presentation

What is git & How to use git

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. What is git &How to use git By Nakhyun Choi (bbashong)

  2. 가여운 프로그래머가 한명있다. • 이창원 (21세, 남) • 그에게는 두가지 고민이 있다.

  3. 첫 번째 고민 • 내가 개발하고 있는 프로그램 A가 잘못 되었을 때 과거의 어떤 시점으로 다시 되돌아가고 싶어!

  4. 그의 해결법 • 프로젝트에 변경 사항이 있을 때 마다 프로젝트 폴더 전체를 복사해서 다른이름으로 저장해두자! • 조금 많이 귀찮겠지만 개발하다 삐끗해서 전체 프로젝트를 날리는 것 보단 났겠지..

  5. 두 번째 고민 • 다른 프로그래머인 박보영(43세, 남) 씨와 같은 프로젝트를 함께 진행하고 싶어!

  6. 그의 해결법 • 프로젝트에 변경사항이 있을 때 마다 전체 프로젝트 폴더를 서로에게 Email로 보내서 싱크를 맞추자!

  7. 어떻게 됬을까? • 처음 서너번은 잘 프로젝트를 복사해 두었지만 너무 귀찮아서 안하게 되었다. • 몇달 뒤, 개발중 치명적인 버그가 생겨서 다시 예전으로 돌아가려 했지만 코드가 너무 꼬여 처음부터 다시 짜게 되었다. • 프로젝트에 신입 팀원이 10명 추가되었다. • 이제 그는 프로그램을 한번 수정할 때 마다 11명의 팀원에게 메일을 보내야 한다다. • 이제 그는 11명의 팀원이 보낸 메일을 받아야 한다.

  8. 좀 더 멋진 해결법이 없을까? • VCS(Version Control System)을 사용한다.

  9. VCS(Version control System)? • 각 파일, 전체 프로젝트를 이전 상태로 되돌릴 수 있다. • 시간에 따라 수정 내용을 비교해 볼 수 있다. • 누가 문제를 일으켰는지 추적해 볼 수 있다. • CVCS나 DVCS를 사용하면 쉽게 다른 프로그래머와 협업할 수 있다.

  10. CVCS vs DVCS • CVCS(Centralized VCS) : 중앙 집중식 버전 관리 시스템 • DVCS(Distributed VCS) : 분산형 버전 관리 시스템

  11. CVCS의 특징 • 모든 파일을 관리하는 서버가 따로있고 많은 클라이언트가 이 중앙 서버에서 파일을 받아서 사용한다(Checkout). • 관리하기가 쉽다 • Subversion이 대표적인 예이다.

  12. But, • 만약 중앙서버가 한시간 동안 다운되면 아무도 다른사람과 협업할 수 없고 했던 일을 백업할 수도 없다. • 만약 중앙서버의 하드디스크에 문제가 생기면 프로젝트를 복구할 수 없다.

  13. DVCS의 특징 • 전체 저장소를 클라이언트가 가지고 있다. • 중앙서버가 다운되거나 인터넷을 사용 할 수 없어도 충분히 작업을 진행할 수 있다. • 중앙서버의 하드디스크에 문제가생겨도 클라이언트의 저장소로 복구할 수 있다. • 대표적으로 동아리에서 자주 사용되는 mercurial(hg)와 git이 있다.

  14. git? • DVCS이다. • 리눅스의 창시자인 리누스 토발즈가 원래 사용하고 있던 BitKeeper라는 VCS를 사용할 수 없게 되면서 직접 VCS를 개발하였다.

  15. git? • Git은 다음과같은 4가지 목표를 가지고 개발되었다. • 빠른 속도 • 단순한 구조 • 비 선형적인 개발(동시 다발적인 수천개의 branch) • 완벽한 분산

  16. Git을 배우려면 Subversion이나 Perforce 같은 다른 VCS를 사용하던 경험을 지워버려야 한다. (물론 다른 vcs를 사용한 경험이 있는 사람만)

  17. 차이점이 아닌 snapshot

  18. 일반적인 vcs

  19. git

  20. 거의 모든 명령을 로컬에서 실행한다. • 다른 vcs에 비해 미친듯이 빠른 속도를 가진다. • 오프라인 상태에서도 commit 하고 비교할 수 있다.

  21. Git은 무조건 데이터를 추가하기만한다 • git으로 무얼하던 데이터는 추가되기만 한다. • 손실되는 데이터는 절대 없다. • 프로젝트가 망가질 걱정 없이 재미있는 실험들을 해볼 수 있다.(물론 git을 잘 쓸 줄 알면)

  22. 세가지 상태

  23. Git기본설정 설치는 그냥 apt-get 하면 됩니다. 따라해보세요emacs 쓸줄 모르잖아요..

  24. Git의 3가지 설정 파일 • /etc/gitconfig파일: 시스템의 모든 사용자와 모든 저장소에 적용되는 설정이다. git config --system 옵션으로 이 파일을 읽고 쓸 수 있다. • ~/.gitconfig파일: 특정 사용자에게만 적용되는 설정이다. git config --global 옵션 으로 이 파일을 읽고 쓸 수 있다. • .git/config: 이 파일은 Git Directory에 있고 특정 저장소(혹은 현재 작업 중인 프로 젝트)에만 적용된다. 각 설정은 역순으로 우선시 된다. 그래서 .git/config가 /etc/ gitconfig보다 우선한다.

  25. 사용자 정보 • $ git config --global user.name"John Doe"$ git config --global\user.emailjohndoe@example.com

  26. 편집기 • $ git config --global core.editorvi

  27. Diff 도구 • $ git config --global merge.toolvimdiff

  28. 설정 확인 • $ git config --list

  29. Tip • git source code 의 contrib/completion 의git-completion.bash를 홈디렉에 숨김파일로 복사하고 • .bashrc file에 source ~/.git-completion.bash 을 추가하면 자동완성을 사용할 수 있다. • Git-completion.bash를 찾기 귀찮으면 arari서버의 bbashong홈디렉에 있으니 복사해가면됨.

  30. git의 기초 지금부터 하는 모든 내용은 remote 서버와 관련 없이, 인터넷 연결 없이,local에서 할 수 있는 내용 들 입니다.remote서버에 연결해서 협업하는 부분은 더 뒤에 설명할 것 입니다.

  31. 저장소 clone하기 • $git clone yourID@arari.sparcs.org:/arari.git • Ssh프로토콜로 git repository를 클론한다.

  32. 하지만 이번 실습에선! • 서버에서 받지 말고 각자 개인의 repository를 만들어서 실습을 해봅시다. • working directory를 만들고 그 directory 안에서 • $gitinit

  33. 기억하세요 • 아까 말씀드린 git에서 file의 3가지 상태를 기억하세요.

  34. 실습 • 다같이 arari.sparcs.org로 ssh접속을 해보고 저를 따라해보세요

  35. 기본 명령어 • git status • git add • git commit& git commit -a • Staged의 개념 • 파일 무시하기 (.gitignore file)

  36. diff 사용법 • git diff : staged된 data와 working directory의 data를 비교한다 • git diff --cached or git diff --staged : 저장소에 commit된 data와 staged된 data를 비교한다.

  37. 파일 삭제와 이름 변경 • gitrm • git mv

  38. commit log 확인 • git log • 옵션 설명-p 각 커밋에 적용된 패치를 보여준다.--stat 각 커밋에서 수정된 파일의 통계정보를 보여준다.--shortstat `--stat` 명령의 결과 중에서 수정한 파일, 추가된 줄, 삭제된 줄만 보여준다.--name-only 커밋 정보중에서 수정된 파일의 목록만 보여준다.--name-s tatus수정된 파일의 목록을 보여줄 뿐만 아니라 파일을 추가한 것인지, 수정한 것인지, 삭제한 것 인지도 보여준다.--abbrev-commit 40자 짜리 SHA-1 체크섬을 전부 보여주는 것이 아니라 처음 몇 자만 보여준다. --relative-date 정확한 시간을 보여주는 것이 아니라 `2 주전`처럼 상대적인 형식으로 보여준다. --graph 브랜치와 머지 히스토리 정보까지 아스키 그래프로 보여준다.--pretty 지정한 형식으로 보여준다. 이 옵션에는 oneline, short, full, fuller, format이 있다. format 은 원하는 형식으로 출력하고자 할 때 사용한다.

  39. log format argument • Option Description of Output %H Commit hash%h Abbreviated commit hash %T Tree hash • %t Abbreviated tree hash%P Parent hashes%p Abbreviated parent hashes%an Author name%ae Author e-mail%ad Author date (format respects the –date= option) %ar Author date, relative%cn Committer name%ce Committer email%cd Committer date%cr Committer date, relative%s Subject

  40. 조회 제한 • -(n) 최근 n 개의 커밋만 조회한다.--since, --after 명시한 날짜 이후의 커밋만 검색한다. --until, --before 명시한 날짜 이전의 커밋만 조회한다. --author 입력한 저자의 커밋만 보여준다.--committer 입력한 커미터의 커밋만 보여준다. • git log hash.value

  41. 커밋 수정하기 • $git commit --amend • $gitreset HEAD <file>.. • $git checkout <file>

  42. branch git의 핵심 git의 앙꼬

  43. branch란? • commit사이를 자유롭게 움직이며 특정 commit을 가리키는 포인터 같은 것이다.

  44. initial condition

  45. $git branch testing

  46. $git checkout testing

  47. some commit

  48. $git checkout master

  49. commit again

  50. merge의 개념 • 1. 작업 중인 웹사이트가 있다.2. 새로운 이슈를 처리할 새 Branch를 하나 생성.3. 새로 만든 Branch에서 작업 중. • 그런데 작업도중에 hotfix를 당장 만들어야 하는 일이 생겼다. • 1. 새로운 이슈를 처리하기 이전의 운영(Production) 브랜치로 복원. 2. Hotfix 브랜치를 새로 하나 생성.3. 수정한 Hotfix 테스트를 마치고 운영 브랜치로 Merge.4. 다시 작업하던 브랜치로 옮겨가서 하던 일 진행.

More Related