본문 바로가기
IT 관련기술

[Git] Git 사용법

by bits 2022. 1. 27.

이번 포스트는 Git 설치 후 Git 활용에 대해 알아본다.

 

Git 설치는 이전 포스트에서 확인

https://phantom.tistory.com/65

 

[형상관리도구] Git 설치하기

형상관리 소프트웨어 형상관리(SCM, Software Configuration Management)는 SW개발 및 유지보수 과정에서 발생하는 변경 사항들을 관리하기 위해 개발된 일련의 활동이다. 형상관리는 일반적으로 버전 관리

phantom.tistory.com

 

Git 환경 설정

git을 설치하고 나면 별도 설정 없이 사용 가능하지만 사용 환경을 적용하기 위해 git config 명령을 사용하여 관리할 수 있습니다.

git config --global user.name "Your Name"
git config --global user.email "email-id@domain.com"
git config --global core.editor vi

설정 정보 확인은 git config --list 명령을 통해 확인 할 수 있습니다.

 

git 설정 파일은 3단계로 구성되어 있다. 

  • /etc/gitconfig : 시스템 모든 사용자와 모든 git 저장소에 적용
  • git config --system 은 이 파일을 수정한다.
  • ~/.gitconfig 또는 ~/.config/git/config : 특정 사용자에게만 적용
  • git config --global 은 이 파일을 수정한다. 
  • git저장소디렉토리/.git/config : 특정 git 저장소에만 적용
  • git config 는 이 파일을 수정한다.

* 윈도우 환경은 $HOME(사용자디렉토리)/gitconfig와 git저장소디렉토리/.git/config 두 가지 설정 파일이 존재한다.

 

원격 저장소 생성하기

git 서버를 이용해서 저장소를 공유하려면 베어(bare) 옵션을 이용해서 저장소를 생성해야 합니다. 베어 저장소는 워킹 디렉토리가 없는 저장소를 의미하면 온전히 자원을 공유하는 목적으로 사용합니다.

 

1) 베어 옵션을 이용해서 기존 저장소를 복제하는 방법

git clone --bare git_repo git_repo.git

--bare 옵션을 사용하면 git의 3가지 영역 중 워킹 디렉토리를 생성하지 않는다. 그리고 일반적으로 서버용 git 저장소의 디렉토리 명칭은 끝에 확장자로 .git을 붙인다.

--bare 옵션을 이용하면 복제한 소스 저장소의 .git 디렉토리만 복사하고 워킹 디렉토리는 복제하지 않는다.

 

2) 신규 저장소를 초기화해서 생성하는 방법

git --bare init

 

새로운 로컬 저장소(Repository) 만들기

로컬 저장소로 사용할 폴더 생성 후 해당 폴더에서 git init 명령어를 통해 신규 저장소를 생성한다.

git init

이 명령은 .git 이라는 하위 디렉토리를 만든다. .git 디렉토리에는 저장소에 필요한 뼈대 파일(skeleton)이 들어 있다.

 

저장소 복제하기

로컬 저장소를 복제(clone)하기

git clone /로컬/저장소/경로

원격 서버의 저장소를 복제하기

git clone 사용자명@호스트:/원격/저장소/경로

 

작업의 흐름(로컬)

 

  • Working directory : 실제 작업 파일
  • Index : 준비영역(staging area)
  • Head : 최종 확정본(commit)

Git 상태

Git은 파일을 Commited, Modified, Staged 이 세가지 상태로 관리한다.

  • Commited - 데이터가 로컬 저장소에 안전하게 저장됐다는 것을 의미한다.
  • Modified - 수정한 파일을 아직 로컬 저장소에 커밋하지 않은 것을 말한다.
  • Staged - 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.

Git 디렉토리에 있는 파일들은 Committed 상태이다. 파일을 수정하고 Staging Area에 추가했다면 Staged이다. 그리고 Checkout하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았다면 Modified이다.

 

파일을 스테이징 영역(staging area) 에 추가(add)와 확정(commit)

스테이징 영역은 저장소에 최종적으로 반영할 소스들을 선별해두는 가상의 공간이다. git add 명령을 통해서 working directory의 파일들이 staging 상태가 되며, staging 상태가 된 파일들은 commit 명령을 통해서 저장소에 반영된다.

 

변경된 파일은 add 명령어로 인덱스에 추가할 수 있다.

git add [파일명] 또는 git add *

이 작업을 통해 Working directory에서 있던 파일은 index(Staging area)로 이동한다.

 

파일을 스테이징 영역(staging area)에서 제거(remove)하기

스테이징 영역에 잘못 추가된 파일이 있다면 다시 untracked 시켜서 작업 디렉토리로 되돌릴 수 있다.

git rm --cached index.html
git status  // 상태 확인

 

커밋(commit)하기

commit는 변경된 소스를 저장소에 저장하는 명령으로, staging area에 있는 파일들을 대상으로 이루어진다.

실제로 로컬 저장소로의 이동은 commit을 통해 이루어 지며, 변경된 파일이 Head에 반영이 된다.

git commit -m '현재 작업에 대한 설명 메시지'

커밋은 commit 대기중인 파일들, 즉 staging area에 tracked된 파일들만이 커밋되고, untracked된 파일들은 working directory에 그대로 남아 있다.

 

원격 저장소로 업로드 하기(push) : 원격 저장소로 저장

현재의 변경 내용은 로컬 저장소의 Head 안에 머물고 있으며 이를 원격 서버로 올리는 명령은 아래와 같다.

git push [원격저장소명] [branch명]
git push origin master

원격 저장소명을 설정하지 않았다면 기본값으로 origin으로 설정됨.

원격 저장소의 브랜치로 로컬 브랜치를 전송합니다. 이 명령을 수행하기 전에 fetch 나 pull을 수행해야 합니다.

 

 

원격 저장소 추가하기

git remote add [저장소 단축이름] [리모트 저장소 URL]

 

원격 저장소에 있는 파일 가져오기(동기화)

로컬에 commit 한 파일들을 원격 저장소에 업로드 하기 전에 먼저 원격 저장소에 있는 파일들을 다운 받아서 동기화 시켜야 한다.

git fetch [원격 저장소 별명] [branch명]

git fetch는 원격 저장소에 해당하는 저장소의 브랜치를 현재 선택된 로컬 브랜치로 가져온다. 하지만 자동으로 merge  하지 않는다. merge를 위해서는 pull 명령어를 이용한다.

git pull [원격 저장소 별명] [branch명]

* git pull은 git fetch 명령을 실행하고 자동으로 merge(병합) 한다.

 

갱신과 병합(merge)

여러분의 로컬 저장소를 원격 저장소에 맞춰 갱신하려면 아래 명령을 실행합니다.

git pull

이렇게 하면 원격 저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch), 병합(merge) 됩니다.

 

다른 가지에 있는 변경 내용을 현재 가지 (예를 들면, master branch)에 병합하려면 아래 명령을 실행합니다.

git merge [branch명]

 

git을 통해 pull 또는 merge 시 git은 자동으로 변경 내용을 병합하려고 시도합니다. 문제는 항상 성공하는것이 아니라 충돌(conflicts)이 일어나기도 합니다. 이렇게 충돌이 발생하면 파일의 충돌 부분을 직접 수정해서 병합이 가능하도록 합니다. 충돌이 해결되면 아래 명령으로 git에게 아까의 파일을 병합하라고 알려주세요.

git add [파일명]

 

로컬 변경 내용 되돌리기

아래의 명령으로 로컬의 변경 내용을 되돌릴 수 있습니다.

git checkout -- [파일이름]

위 명령은 로컬의 변경 내용을 변경 전 상태 (head)로 되돌려 줍니다. 다만, 인덱스에 추가된 변경 내용과 새로 생성한 파일은 그대로 남습니다.

 

만약, 로컬에 있는 모든 변경 내용과 확정본을 포기하려면, 아래 명령으로 원격 저장소의 최신 이력을 가져오고, 로컬 master 가지가 이력을 가리키도록 할 수 있습니다.

git fetch origin
git reset --hard origin/master

 

가지치기(branch)

branch 는 안전하게 격리된 상태에서 무언가를 만들 때 사용합니다.

여러분이 저장소를 새로 만드면 기본으로 master branch 가 만들어집니다.

다른 branch를 이용해서 개발을 진행하고 나중에 개발이 완료되면 master  branch에 병합하면 됩니다.

 

아래의 명령으로 새로운 이름의 branch를 만들고 갈아 탑니다.

git checkout -b [branch명]

 

master branch로 돌아오기

git checkout master

 

branch 삭제하기

git branch -d [삭제할 branch명]

 

새로 만든 branch를 원격 저장소에 전송하기

git push origin [branch명]

 

원격 브랜치 삭제하기

git  push [원격저장소명] --delete [브랜치명]

 

댓글