SlideShare a Scribd company logo
1 of 73
Git
강현욱
버전 관리?
파일의 변화를 시간에 따라 기록했다가 나중에 특정
시점의 버전을 다시 꺼내올 수 있는 시스템.
WINDOWS - 백업.
MAC - TIME MACHINE
기존의 버전 관리
로컬 버전 관리- local VCS (Version Control System)
• 간단한 데이터 베이스를 통한 변경 관리.
중앙 집중식 버전 관리 - CVCS (Centralized VCS)
• CVS
• SVN (Subversion)
분산 버전 관리 시스템 - DVCS (Distributed VCS)
Git
Mecurial
Darcs
기존과의 차이점
저장소의 위치
Git 상태
Modified
working directory
Staged
staging area
Committed
git directory(repository)
Git 설치
맥용 다운로드.
https://git-scm.com/download/mac
윈도우용 다운로드.
http://msysgit.github.io
Git 최초 설정.
git config --global user.name “John Doe”
git config --global user.email
johndoe@example.com
git config --list --global
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.
……
vi ~/.ssh/config
Host gitlab —> alias
HostName gitlab.com —> original host
IdentityFile ~/.ssh/test_git
cat ~/.ssh/test_git.pub
Title 은 추후 관리 용이한 이름으로 적절히 지정
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]
기존 저장소 Clone
git clone git://github.com/my/project.git [project_dir]
최초 설정 및 저장소 만들기 시
연
.gitignore
✓ 아무것도 없는 줄이나, #로 시작하는 줄은 무시한다.
✓ 표준 Glob패턴을 사용한다.
✓ 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한
다.
✓ 느낌표(!)로시작하는 패턴의 파일은 무시하지 않는다.
๏ **/ 스타일의 문법은 Git 1.8.2 버전 이상에서 사용 가능.
#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
Commit
기존 버전 관리 시스템에서의 Version
Snapshot
touch README
touch LICENSE
touch test.rb
git add --all or git add .
git commit -m ‘abc txt commit’
git branch testing
git checkout testing
touch abc
git add abc
git commit -m ‘test commit’
Git branch
버전 관리 시스템의 기본.
빠른 속도 제공.
얼마든지 새로운 브랜치를 사용하여 테스트 가능.
branch는 commit 의 포인터
git branch test1
git checkout test1
->
git checkout -b test1
git tag
branch 와 유사하지만 포인터가 이동하지 않는다.
종류는 2가지 Lightweight, Annotated
Lightweight -> 단순 태그.
Annotated -> tagger, date, message 등의 정보 및
서명도 가능.
git tag v2.1.0 [commit checksum]
git tag -a v2.1.0 -m ‘메시지 저장’ [commit
checksum]
branch, tag, commit
시연
git push
리모트 저장소에 현재 브랜치를 올리는 작업.
git remote add [리모트 저장소명] [url]
git push [리모트 저장소명] [브랜치명]
git fetch
리모트 저장소의 최신 정보를 가져오는 작업.
git fetch [리모트 저장소]
ex > git fetch origin
origin 의 모든 브랜치 정보를 가져온다.
git pull
git fetch + git merge 작업을 하는 역할.
현재 checkout 된 브랜치의 리모트 저장소에
tracking 중인 브랜치를 찾아서 merge 까지 동시에
진행.
git pull {[리모트 저장소명] [브랜치명]}
✓ 추천하지 않는 기능.(정책에 따라 다름)
✓ 로컬과 리모트에 있는 tracked브랜치에서 다른 사
람이 다른 작업을 진행 중이었다면, fast-forward
가 아닌 merge 가 진행되어 복잡한 히스토리 구성
.
추천
✓ git fetch 후 git rebase
push, fetch, pull
시연
Git merge
서로 다른 commit 시점(version)의 통합.
git checkout master
git merge testing
단, 두 브랜치 모두에 해당하진 않는
다.
git merge testing
결과는?
merge 는 통합 따라서,
가. master == testing
나. master != testing
✓ commit 시점과 branch 는 같지 않다.
✓ branch 는 단지 commit 시점의 checksum을 가리
키고 있는 포인터일 뿐.
✓ 중요한 것은 commit 시점.
✓ git merge testing 은 git merge 6d5bfac3 과 동일
하다.
(단, 자동으로 생성되는 메시지는 달라짐.)
merge != branch + branch
merge = commit + commit
conflict
merge, rebase 과정에서 일어나는 충돌.
해결 후에 commit 가능.
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")
conflict test
<<<<<<< HEAD
hello world!!
=======
hello world
>>>>>>> test1
my name is git!
git add conflict
git commit -m ‘conflict end’
conflict 해결 이력은 남지 않음
(source tree 상에서)
=
남의 수정본을 날릴 수 있음
충돌이 발생한 경우에는
merge 하려는
commit 의 author와 같이 해결
git rebase
✓ merge 와 같은 통합 작업 용도.
✓ 차이점은 별도의 branch를 하나의 branch로 통합
가능.
✓ 개인 성향 또는 정책 문제로 merge, rebase 중 하
나가 맞고 다른 하나가 틀리다고 볼 수는 없음.
✓ 히스토리가 깔끔해진다는 장점을 가지고 있음.
git rebase master
First, rewinding head to replay your work on top of it...
Applying: 3
Applying: 4
공개 저장소에 Push한 commit을 Rebase
금지
이유는?
merge, conflict, rebase 시연
git cherry-pick
✓ 특정 시점의 commit 버전만 가져오고 싶은 경우.
✓ 일반적으로 많이 사용하지는 않지만 알면 유용한
기능.
✓ git cherry-pick [commit checksum]
git stash
✓ commit 이 아닌 상태로 워킹 디렉토리 파일 임시
저장.
★ 저장 대상
➡ modified 이면서 tracked 상태인 파일.
➡ Staging Area 에 있는 파일.
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
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}
git stash pop
- 적용과 동시에 삭제, 충돌 시에는 삭제 안함.
- stash 에서 가장 최신 것으로 자동 적용 수동 선택 불가.
git stash apply stash@{1} && git stash drop
stash@{1}
cherry-pick, stash 시연
git reset
✓ 특정 commit 시점으로 되돌아갈 때 사용.
✓ 이미 push 한 commit 은 금지.
✓ 로컬에서만 commit 한 경우 사용.
✓ 세가지 옵션이 있음 hard, soft, mixed.
git reset --[hard or soft or mixed] [브랜치명 or
commit key]
✓ hard > 모든 상태를 그 commit 시점으로 되돌림.(untracked file 은 유지)
✓ soft > 모든 상태를 되돌리고 현재 working directory와 되돌리고자 하는 시
점 사이의 모든 수정 사항이 staging 영역까지 복구되어 나오는 방식.
✓ mixed > soft 와 같지만 모두 unstaging 영역으로 들어감.
git revert
✓ 특정 commit 시점에 수정된 부분을 되돌릴 경우.
✓ 이미 push 한 경우라도 사용 가능.
(기존 commit 을 없애는 것이 아닌 추가하는 것이기 때문)
๏ 주의
여러개의 브랜치를 사용 중에 한 곳에서 revert 를 하면 그 revert
가 최신이 되어서 추후 merge 를 하거나 하면 모든 브랜치에서 수
정 내용이 사라짐.
git revert [브랜치 명 or commit checksum]
reset, revert 시연
Git FLOW
✓ Vincent Driessen 브랜칭
모델
*Git 브랜칭 모델의 표준.
✓ 새롭게 시작하려는데 어떻게 해
야할지 모르는 경우.
✓ 전략을 세워도 자신이 없을 경우.
✓ 얼마든지 응용 가능.
master
- release 에서 테스트가 완료된 소스를 머지하여 운영에 배
포하는 브랜치.
develop
- 최신 소스의 저장 + 배포할 소스의 머지.
feature
- 기능의 단위로 이루어진 브랜치.
release
- 배포하기 전 최종 테스트를 진행하기 위한 브랜치.
hotfix
- master 에서 급하게 수정해야 할 것들 -> 다른 어떤 기능보
다 먼저 배포되어야 할 기능.
commit 메시지
제목은 간략하게 중요 내용만 포함. (50자 이내)
내용은 상세하게.
마지막에는 ‘.’ 또는 ‘ ’공백을 넣어준다.(한글일 경우)
2337 - 수정 페이지에서 세션 타임아웃 시 에러 페이지 노출.
- 수정 페이지로 들어갈 때 상세 페이지의 URI 를 가지고 가도록
수정.
- 필수 인자가 없을 경우 rollbackUri 로 이동. rollbackUril 가 없으
면 '/' 으로 이동.
- amdDept 로 잘못된 부분을 amdTeam 으로 수정.
Q/A
감사합니다.

More Related Content

What's hot

Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2sangyun han
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기우영 주
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case studyWoo Jin Kim
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 
KhuHub student guideline
KhuHub student guidelineKhuHub student guideline
KhuHub student guidelinesangyun han
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼jeongseokoh
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Hyunjun Roh
 
140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴은아 정
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드도형 임
 
How to patch linux kernel
How to patch linux kernelHow to patch linux kernel
How to patch linux kernelKangmin Park
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1sangyun han
 

What's hot (20)

Git 코드랩 스터디 2
Git 코드랩 스터디 2Git 코드랩 스터디 2
Git 코드랩 스터디 2
 
Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2
 
Git
GitGit
Git
 
Basic git-commands
Basic git-commandsBasic git-commands
Basic git-commands
 
About git
About gitAbout git
About git
 
이클립스로 GIT 사용하기
이클립스로 GIT 사용하기이클립스로 GIT 사용하기
이클립스로 GIT 사용하기
 
Git
GitGit
Git
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case study
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
KhuHub student guideline
KhuHub student guidelineKhuHub student guideline
KhuHub student guideline
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼
 
Github 사용법
Github 사용법Github 사용법
Github 사용법
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 
140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴140109 팀프로젝트 협업툴
140109 팀프로젝트 협업툴
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
How to patch linux kernel
How to patch linux kernelHow to patch linux kernel
How to patch linux kernel
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1
 

Viewers also liked

Alarmlama
AlarmlamaAlarmlama
Alarmlamafarukuz
 
ENGMauricioGuzmanManzaneraCV
ENGMauricioGuzmanManzaneraCVENGMauricioGuzmanManzaneraCV
ENGMauricioGuzmanManzaneraCVMauricio Guzmán
 
Victor_Lau_Business Journal Article
Victor_Lau_Business Journal ArticleVictor_Lau_Business Journal Article
Victor_Lau_Business Journal ArticleVictor Lau
 
Environmental responsibility
Environmental responsibilityEnvironmental responsibility
Environmental responsibilityMike Strachan
 
dibujarte 01 manga
dibujarte 01 mangadibujarte 01 manga
dibujarte 01 mangaTommy Pain
 
èTica del contador ley 43 de 1990 con respecto al còdigo ètico internacional
èTica del contador  ley 43 de 1990 con respecto al còdigo ètico internacionalèTica del contador  ley 43 de 1990 con respecto al còdigo ètico internacional
èTica del contador ley 43 de 1990 con respecto al còdigo ètico internacionalSayuris Acevedo
 
Scientific publishing innovation day 2015 wolters kluwer
Scientific publishing innovation day 2015 wolters kluwerScientific publishing innovation day 2015 wolters kluwer
Scientific publishing innovation day 2015 wolters kluwerodhrangavin
 

Viewers also liked (15)

ATPER_Krisna Presentation_2016
ATPER_Krisna Presentation_2016ATPER_Krisna Presentation_2016
ATPER_Krisna Presentation_2016
 
Aundrea M. Travis
Aundrea M. TravisAundrea M. Travis
Aundrea M. Travis
 
Alarmlama
AlarmlamaAlarmlama
Alarmlama
 
Race&Case Competition
Race&Case CompetitionRace&Case Competition
Race&Case Competition
 
Arsalan Cv (1)
Arsalan Cv (1)Arsalan Cv (1)
Arsalan Cv (1)
 
ENGMauricioGuzmanManzaneraCV
ENGMauricioGuzmanManzaneraCVENGMauricioGuzmanManzaneraCV
ENGMauricioGuzmanManzaneraCV
 
Victor_Lau_Business Journal Article
Victor_Lau_Business Journal ArticleVictor_Lau_Business Journal Article
Victor_Lau_Business Journal Article
 
il VoIP
il VoIPil VoIP
il VoIP
 
Solid Relations_1
Solid Relations_1Solid Relations_1
Solid Relations_1
 
DV Biologics at a glance...
DV Biologics at a glance...DV Biologics at a glance...
DV Biologics at a glance...
 
Environmental responsibility
Environmental responsibilityEnvironmental responsibility
Environmental responsibility
 
dibujarte 01 manga
dibujarte 01 mangadibujarte 01 manga
dibujarte 01 manga
 
Notification main june2015
Notification main june2015Notification main june2015
Notification main june2015
 
èTica del contador ley 43 de 1990 con respecto al còdigo ètico internacional
èTica del contador  ley 43 de 1990 con respecto al còdigo ètico internacionalèTica del contador  ley 43 de 1990 con respecto al còdigo ètico internacional
èTica del contador ley 43 de 1990 con respecto al còdigo ètico internacional
 
Scientific publishing innovation day 2015 wolters kluwer
Scientific publishing innovation day 2015 wolters kluwerScientific publishing innovation day 2015 wolters kluwer
Scientific publishing innovation day 2015 wolters kluwer
 

Similar to Git 기본

Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating IntroductionJongwook Choi
 
Git Tutorial
Git TutorialGit Tutorial
Git TutorialMDLicht
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaosYunkyu Choi
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randalyagurchoi
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기Wooyoung Ko
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
Git server 구축(git olite,gitweb)
Git server 구축(git olite,gitweb)Git server 구축(git olite,gitweb)
Git server 구축(git olite,gitweb)진혁 박
 
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기Subin An
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Junyoung Lee
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Youngbin Han
 
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀 Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀 주형 고
 

Similar to Git 기본 (20)

Git
GitGit
Git
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
 
git-workflow
git-workflowgit-workflow
git-workflow
 
Git from google techtalks by Randal
Git from google techtalks by RandalGit from google techtalks by Randal
Git from google techtalks by Randal
 
Git command
Git commandGit command
Git command
 
Git
Git Git
Git
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
Git server 구축(git olite,gitweb)
Git server 구축(git olite,gitweb)Git server 구축(git olite,gitweb)
Git server 구축(git olite,gitweb)
 
Fun git hub
Fun git hubFun git hub
Fun git hub
 
Gitlab.key
Gitlab.keyGitlab.key
Gitlab.key
 
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
[T아카데미] 비개발자를 위한 Git과 Github Page 블로그 만들기
 
Git lecture2
Git lecture2Git lecture2
Git lecture2
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
 
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀 Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
 

Git 기본

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

Editor's Notes

  1. 1.3.1 델타가 아니라 스냅샷 Subversion과 Subversion 비슷한 놈들과 Git의 가장 큰 차이점은 데이터를 다루는 방법에 있다. 큰 틀에서 봤을 때 대부분의 VCS 시스템이 관리하는 정보는 파일들의 목록이다. CVS, Subversion, Perforce, Bazaar 등의 시스템은 파일의 집합으로 정보를 관리한다. 각 파일의 변화를 그림 1-4처럼 시간순으로 관리한다. 그림 1.4: 각 파일에 대한 변화(델타)를 저장하는 시스템들 Git은 이런 식으로 데이터를 저장하지도 취급하지도 않는다. 대신 Git의 데이터는 파일 시스템의 스냅 샷이라 할 수 있으며 크기가 아주 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존 재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 저장하지 않 는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 그림 1-5처럼 동작한다. 그림 1.5: Git은 시간순으로 프로젝트의 스냅샷을 저장한다 이것이 Git이 다른 VCS와 구분되는 점이다. 이점 때문에 Git는 다른 시스템들이 과거로부터 답습해왔 던 버전 컨트롤의 개념과 다르다는 것이고 많은 부분을 새로운 관점에서 바라본다. Git은 강력한 도구 를 지원하는 작은 파일시스템이다. Git은 단순한 VCS가 아니다. 이제3장에서 설명할 Git 브랜치를 사 용하면 얻게 되는 이득이 무엇인지 설명한다.
  2. checkout test2 git merge test1 상태
  3. 물론 찾을 순 있지만 시간이 지날수록 잊을 확률이 크고 그 기능이 눈에 띄지 않는다면 문제가 됨.
  4. 당신이 어떤 프로젝트에서 한 부분을 담당하고 있다고 하자. 그리고 여기에서 뭔가 작업하던 일이 있고 다른요청이들어와서잠시브랜치를변경해야할일이생겼다고치자. 아직완료하지않은일을커밋하 는것은좀껄끄럽다. 이런상황에서는커밋하지않고나중에다시돌아와서작업을다시하고싶을것 이다. 이 문제는 gitstash라는 명령으로 해결할 수 있다. Stash 명령을 사용하면 워킹 디렉토리에서 수정한 파일만 저장한다. Stash는 Modified이면서 Tracked 상태인 파일과 Staging Area에 있는 파일들을 보관해두는 장소다. 아직 끝나지 않은 수정사 항을스택에잠시저장했다가나중에다시적용할수있다.
  5. stash 에 메시지를 넣어서 저장하기 위한 방법 git stash save 하지만 apply, drop 시에는 메시지로 못찾고 stash@{0} 의 인덱스로만 가능.
  6. Git은 Stash에 저장할 때 수정하던 파일을 복원해준다. 복원할 때의 워킹 디렉토리는 Stash할 때의 그 브랜치이고 워킹 디렉토리도 깨끗한 상태였다. 하지만, 꼭 깨끗한 워킹 디렉토리나 Stash할 때와 같 은 브랜치에 적용해야 하는 것은 아니다. 어떤 브랜치에서 Stash하고 다른 브랜치로 옮기고서 거기에 Stash를 복원할 수 있다. 그리고 꼭 워킹 디렉토리가 깨끗한 상태일 필요도 없다. 워킹 디렉토리에 수 정하고 커밋하지 않은 파일들이 있을 때에도 Stash를 적용할 수 있다. 만약 충돌이 나면 알려준다. Git은 Stash를 적용할 때 Staged 상태였던 파일을 자동으로 다시 Staged 상태로 만들어 주지 않는 다. 그래서 gitstashapply 명령을 실행할 때 --index 옵션을 주어야 Staged 상태까지 복원한다. 그럼 원래 작업하던 상태로 돌아올 수 있다:
  7. develop - 단순하게 최신 소스의 통합 용도로만 사용하면 실제 사용 상에 있어 많은 문제가 발생한다. 예를 들어 이번에 배포하려고 하지 않은 기능을 단순히 기능만이 완료되었다고 머지해버리면 실제 배포할 기능들을 분류해야 하는 문제가 발생한다. 따라서 최신 소스의 브랜치라는 의미와 함께 배포가 결정된 feature 브랜치의 통합이 이루어져야 한다. feature - develop 에서 만들어진 브랜치로 새로운 기능 단위로 하나의 브랜치를 만든다. 주의할 점은 개발이 완료되었다고 해서 무조건 develop 에 머지를 하면 안된다. 배포를 안할 가능성도 있기 때문에 팀 내의 배포 담당자와 논의 후 머지를 진행한다. release - develop 에서 만들어진 브랜치로 최신으로 유지되는 develop 의 경우에는 버그가 발생할 수 있는 여지가 있기 때문에 배포하기 전 테스트와 그에 따른 버그 픽스를 하기 위해서 만들어지는 브랜치로 버전을 붙여서 관리한다. - 버그픽스를 하기 때문에 계속적인 develop 으로의 머지가 필요하다. develop 의 경우에는 다음 배포를 위해 최신의 정상적인 소스가 유지되어야 하기 때문. master - master 에서 생성되는 브랜치는 develop, hotfix 만으로 한다. 잦은 배포가 일어나는 경우에는 release 의 versioning 으로 관리하는 것이 좋으며, 배포의 횟수가 좀 줄어들면 tag 를 이용한 관리가 용이하다. - 어떠한 경우에도 master 내에서 직접적인 수정은 하지 않는 것이 좋다.