Git

문주은·2021년 11월 26일
0

1. Git?

프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템으로 협업 지원 기능을 지원하는 서비스.
저장소가 자신의 컴퓨터에 위치.


2. 처음 작업할 때

2-1. 디렉토리 생성

2-2. clone

git clone github주소
생성한 디렉토리 경로에서 원하는 git hub 주소 복제(자동으로 git init-초기화)

2-3. 작업할 branch 생성

git checkout -b je_branch
로컬 환경에 복제된 브랜치는 마스터 브랜치이기 때문에 개인 브랜치로 변경한 후 작업(이때, 브랜치는 기능 단위)


3. 다른 사람이 변경한 master 코드를 복제할 때

3-1. 파일 내용 비교

git diff
파일의 어떤 내용이 변경되었는지 차이점 비교 가능. 삭제된 부분은 빨간색(-), 추가된 부분은 초록색(+)으로 표시된다.

3-2. master branch로 변경

git checkout master
원격 저장소에 있는 코드를 로컬 저장소에 가져오기 위해 master 브랜치로 전환

3-3. 원격저장소의 master 코드 내려받기

git pull
pull 명령어는 원격 저장소의 소스를 가져오고 해당 소스가 현재 내 소스보다 더 최신 버전이라고 하면 지금의 버전을 해당 소스에 맞춰 올린다. merge 명령어를 사용하는 것이지요

git fetch
pull 명령어와 가장 큰 차이점은 fetch 명령어의 경우 단지 소스를 가져올 뿐 merge 하지는 않는다. 즉, 원격저장소에 있는 변경 사항을 로컬 저장소에 가져오기 전에 변경 내용을 확인할 때 사용.
git pull = (git fetch) + (git merge)


4. 로컬저장소에서 작업한 코드를 원격 저장소에 추가

4-1. 파일 내용 비교

git diff
원격 저장소에 저장되어 있는 코드와 로컬에서 내가 변경한 코드 비교
로컬에서 작업중인 공간을 워킹 디렉토리라 부르며 워킹 디렉토리에 있는 파일들은 Untracked, Tracked 두 가지 상태로 나누어진다.

git status

4-2. 변경한 파일 추가

git add '파일명'
원격저장소에 업로드할 파일 추가해서 staging area에 저장
staging areag에 저장된 파일들은 Tracked 상태로 변환. 즉, git이 파일을 추적하는 상태로 변환

4-3. 파일 상태 확인

git status
git add 실행 후 파일들은 다시 Unmodified, Modified, Staged 3개의 상태로 나누어진다.

add를 실행하기 전에 Untracked files 명단에 있는 빨간색 파일들이 add를 실행한 후 커밋할 변경 사항 명단에 있는 Staged 상태의 초록색 파일들로 변경.

4-4. 수정한 파일들 커밋

git commit -m "commit_message"
commit을 실행한 후 워킹 디렉토리에 있는 작업 목록들 자동 삭제

4-5. 원격저장소에 전송

git push origin je_branch
로컬 디렉토리에 있는 파일들은 원격 디렉토리에 'je_branch'로 보내기

현재는 원격 저장소와 로컬저장소가 자동으로 연결되어져 있지만 그렇지 않은 경우, git remote add origin 을 통해 origin(원격저장소 이름)과 진행중인 프로젝트 저장소(로컬 저장소)와 연결

4-6. merge request 신청

pull requests -> compare & pull request 클릭

변경한 기능에 대한 자세한 comment 작성 후 create pull request 클릭

<merge request 승인 후 화면>


5. stash command

git stash : 아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어로, 완료하지 않은 작업을 commit 하지 않고 나중에 다시 꺼내오기 위한 역할

상황 가정 : 이미 로컬에서 코드를 커밋한 상태에서 원격 브랜치에 있는 코드와 현재 개발한 코드를 합치고 싶을 때
해결 방법 : 최근 커밋을 임시로 되돌리고 stash

5-1. 최근 커밋 되돌리기

# soft reset
$ git reset --soft HEAD~1

5-2. 변경 사항을 stash에 저장

$ git stash

5-3. 원격 브랜치에서 변경 사항을 가져오기

$ git pull origin develop

5-4. stash에서 변경 사항을 복원

변경 사항을 다시 적용

$ git stash pop

5-5. 변경 사항 다시 commit & push

$ git add .
$ git commit -m "commit message"
$ git push origin develop

6. 기타 지식

6-1. git gc

  • 불필요한 파일 정리 및 로컬 저장소 최적화
  • 상황 : git clone한 폴더에서 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도 동일)

  • 이때, objects 디렉터리를 만들고 그 밑에 pack 과 info 디렉터리도 만든다.

perform garbage collection in your repository and prune old objects. -> git gc --aggressive --prune

참고 : https://aroundck.tistory.com/6522

profile
Data Engineer

0개의 댓글