프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템으로 협업 지원 기능을 지원하는 서비스.
저장소가 자신의 컴퓨터에 위치.
git clone github주소
생성한 디렉토리 경로에서 원하는 git hub 주소 복제(자동으로 git init-초기화)
git checkout -b je_branch
로컬 환경에 복제된 브랜치는 마스터 브랜치이기 때문에 개인 브랜치로 변경한 후 작업(이때, 브랜치는 기능 단위)
git diff
파일의 어떤 내용이 변경되었는지 차이점 비교 가능. 삭제된 부분은 빨간색(-), 추가된 부분은 초록색(+)으로 표시된다.
git checkout master
원격 저장소에 있는 코드를 로컬 저장소에 가져오기 위해 master 브랜치로 전환
git pull
pull 명령어는 원격 저장소의 소스를 가져오고 해당 소스가 현재 내 소스보다 더 최신 버전이라고 하면 지금의 버전을 해당 소스에 맞춰 올린다. merge 명령어를 사용하는 것이지요
git fetch
pull 명령어와 가장 큰 차이점은 fetch 명령어의 경우 단지 소스를 가져올 뿐 merge 하지는 않는다. 즉, 원격저장소에 있는 변경 사항을 로컬 저장소에 가져오기 전에 변경 내용을 확인할 때 사용.
git pull = (git fetch) + (git merge)
git diff
원격 저장소에 저장되어 있는 코드와 로컬에서 내가 변경한 코드 비교
로컬에서 작업중인 공간을 워킹 디렉토리라 부르며 워킹 디렉토리에 있는 파일들은 Untracked, Tracked 두 가지 상태로 나누어진다.
git status
git add '파일명'
원격저장소에 업로드할 파일 추가해서 staging area에 저장
staging areag에 저장된 파일들은 Tracked 상태로 변환. 즉, git이 파일을 추적하는 상태로 변환
git status
git add 실행 후 파일들은 다시 Unmodified, Modified, Staged 3개의 상태로 나누어진다.
add를 실행하기 전에 Untracked files
명단에 있는 빨간색 파일들이 add를 실행한 후 커밋할 변경 사항
명단에 있는 Staged 상태의 초록색 파일들로 변경.
git commit -m "commit_message"
commit을 실행한 후 워킹 디렉토리에 있는 작업 목록들 자동 삭제
git push origin je_branch
로컬 디렉토리에 있는 파일들은 원격 디렉토리에 'je_branch'로 보내기
현재는 원격 저장소와 로컬저장소가 자동으로 연결되어져 있지만 그렇지 않은 경우, git remote add origin 을 통해 origin(원격저장소 이름)과 진행중인 프로젝트 저장소(로컬 저장소)와 연결
pull requests -> compare & pull request 클릭
변경한 기능에 대한 자세한 comment 작성 후 create pull request 클릭
<merge request 승인 후 화면>
git stash : 아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어로, 완료하지 않은 작업을 commit 하지 않고 나중에 다시 꺼내오기 위한 역할
상황 가정 : 이미 로컬에서 코드를 커밋한 상태에서 원격 브랜치에 있는 코드와 현재 개발한 코드를 합치고 싶을 때
해결 방법 : 최근 커밋을 임시로 되돌리고 stash
# soft reset
$ git reset --soft HEAD~1
$ git stash
$ git pull origin develop
변경 사항을 다시 적용
$ git stash pop
$ git add .
$ git commit -m "commit message"
$ git push origin develop
du -hd 1
을 통해 파일 시스템 크기를 확인했을 때 ./.git 폴더의 사용량이 다른 폴더의 사용량 보다 월등히 큰 상황인 경우.git directory 구성
.git/
ㄴHEAD
ㄴindex
ㄴconfig
ㄴdescription
ㄴhooks/
ㄴinfo/
ㄴobjects/
ㄴrefs/
ㄴpacked-refs
• info/ : .gitignore 파일처럼 무시할 파일의 패턴
• objects/ : 모든 콘텐츠를 저장하는 db
• refs/: 커밋 개체의 포인터를 저장
• HEAD : 현재 checkout 한 브랜치를 가리킴
• index : staging area 정보를 저장
1) git init 실행하면 자동으로 .git 폴더가 생성(git clone도 동일)
perform garbage collection in your repository and prune old objects. -> git gc --aggressive --prune