03
03

💡 230303 FRI

📌 Contents - Git이란
1. Git을 사용하는 이유
2. Git의 특징
3. Git 설치와 초기 설정
4. Git 저장소 생성

📌 Contents - Git 시작하기
1. Git 파일 생성
2. Git 저장소 반영
3. Git 관리 상태 확인

📌 Contents - Git 가지 치기
1. Git Branch
2. fast forward
3. Merge
4. conflict 해결

📌 Contents - Git 원격 저장소
1. 원격 저장소 받아오기
2. 원격 저장소 동기화
3. Origin이란?

1. Git이란

1-1. Git을 사용하는 이유

  • 효율적인 협업
  • 쉬운 버전관리

 

1-2. Git의 특징

  • 가지 치기와 병합 기능을 통해 협업할 수 있음
  • 네트워크 없이 로컬에서 작업이 가능해서 가볍고 빠름
  • 분산 작업이 가능함
  • 16진수 문자열로 이루어진 commit id를 통해 데이터를 보장할 수 있음
  • 커밋하기 전 준비 영역(Staging area) 단계가 있음
  • 오픈 소스로서 누구에게나 공개되어 있음

 

1-3. Git 설치와 초기 설정

Git 설치

  1. https://git-scm.com/downloads 에서 Git 다운로드 받기
  2. Linux나 macOS : Terminal 실행 / Windows : 시작 메뉴 -> Git Bash 실행
  3. Git 설치 확인 : Git Bash에서 다음 명령어 입력하기

Git 초기 설정

1. 사용자 정보 설정

저장소에 코드를 반영할 때 등록될 사용자 정보 설정한다. 아래와 같이 이름, 이메일 정보를 입력해준다.

프로젝트마다 다른 사용자 정보를 지정하고 싶으면 저장소 생성 후 --global 옵션을 빼고 실행해주면 된다.

$ git config --global user.name "이름"
$ git config --global user.email 이메일

2. 설정 정보 확인

$ git config --list

 

1-4. Git 저장소 생성

1. Git을 사용할 프로젝트 폴더로 이동 후 아래의 명령어를 실행한다. 

$ git init

2. ls -al 명령어를 통해 프로젝트 디렉토리에 .git 디렉토리가 생성된 것을 확인할 수 있다.

$ ls -al

 

2. Git 시작하기

2-1. Git 파일 생성

 git add  명령어를 이용하여 작성한 javascript 파일을 준비 영역(staging area)으로 보내준다.

준비 영역으로 보낼 파일이 많다면  git add .  을 통해 현재 폴더 내의 모든 파일을 한꺼번에 지정해줄 수 있다.

add 해준 이후  git status  명령어로 staging area의 어떤 파일이 변경되었는지 등의 파일의 상태를 확인할 수 있다.

$ git add example.js
$ git add .

파일 영역의 라이프 사이클

 

2-2. Git 저장소 반영

앞서 example.js 파일 작업을 staging 하였으므로 메시지를 남겨서 저장소에 저장한다.

 git commit -m "원하는 메시지"  명령어를 이용해 .git 저장소 내에 staging 파일을 저장한다.

즉, 파일이 staging area에서 repository로 넘어가게 된다. 

$ git commit -m "Initial commit"

 

혹시 앞서 적은 메세지에 오타가 있거나 누락된 파일이 있는 경우

 git commit --amend  명령어를 통해 텍스트 편집기를 실행해서 원하는 부분 수정해서 저장이 가능하다.

저장소 반영 내역을 확인하려면  git log  명령어를 입력하면 된다. 

입력시 commit id, commit한 사람, commit 날짜 등을 확인할 수 있다.

 

이와 같이 commit을 마치면 파일은 Unmodified 상태가 된다.

파일 상태의 라이프 사이클

 

2-3. Git 관리 상태 확인

 git status  명령어를 통해 staging file들의 상태를 확인할 수 있다.

$ git status

 

파일 상태의 라이프 사이클에서

1)  Untracked  : add로 staging되지 않은 파일들을 의미하며, 다음과 같이 빨간색으로 표시된다.

위 상태에서  git add article.js  명령어를 통해 article.js를 staging 상태로 바꿔줄 수 있다.

파일이 staging 상태인 경우 초록색으로 표시된다.

그리고 만약 add 명령을 취소하려면  git reset 파일명  명령어를 이용하면 된다.

 

2)  Modified  : commit된 파일 중 수정된 파일들을 의미한다.

위 코드를 통해 article.js 파일이 수정되었다는 것은 확인했는데,

어떤 부분이 변경되었는지 구체적으로 알고자 하면  git diff  명령어를 입력하면 된다.

 

또한  git log  명령어를 통해 .git repository에 존재하는 history를 확인할 수 있다.

즉, 저장소 반영 내역을 확인하기 위해 log 명령어를 사용한다.

 

대표적인 log 옵션은 다음과 같다.

$ git log -p -2
$ git log --stat
$ git log --pretty=oneline
$ git log --graph
$ git log -S function_name
  •  -p --patch  : 각 commit의 수정 결과를 보여주는 diff와 같은 역할 수행
  •  -n  : 상위 n개의 commit 확인
  •  --stat  : 어떤 파일이 commit에서 수정되고 변경되었는지, 파일 내 라인이 추가되거나 삭제되었는지 확인
  •  --pretty=oneline  : 각 commit을 한 줄로 출력
  •  --graph  : commit 간의 연결된 관계를 아스키 그래프로 출력
  •  -S  : 코드에서 추가되거나 제거된 내용 중 특정 텍스트(function_name)가 포함되어 있는지 검사

 

3. Git 가지 치기

3-1. Git Branch

Git Branch는 독립적으로 작업을 진행하기 위한 개념으로서, 각각의 branch는 다른 branch의 영향을 받지 않는다.

Git Branch

Git Branch는 크게 2가지로 나뉜다.

1)  메인 Branch  : 배포할 수 있는 수준의 안정적인 branch

2)  토픽 Branch  : 기능 추가나 버그 수정과 같은 단위 작업을 위한 branch

 

Git Branch 관련 명령어는 다음과 같다.

1)  git branch 브랜치명  : git branch 생성

2)  git branch  : 현재 브랜치명 확인

3)  git checkout 브랜치명  : branch 전환

4)  git checkout 16진수hash값  git log 로 확인한 snapshot에 넘나들기

즉, snapshot의 hash값 이용하여 과거 파일 내용 확인 가능

$ git log --pretty=oneline
$ git checkout d97d30

 

3-2. fast-forward

fast-forward 병합 방법은 branch가 갈라지지 않고, 충돌 없이 새로운 내용 추가시 사용된다.

fast-forward 방법을 이용하면 Head에 master, 브랜치명 둘다 존재하게 된다.

$ git checkout master
$ git merge 브랜치명

 

3-3. Git Merge

fast-forward 방법이 적용될 수 없는 경우는 같은 파일에서 서로 다른 수정을 하여 branch가 갈라지는 경우다.

1)  git log --graph --all  : commit graph 확인 가능

2)  git branch --merged  : 병합된 branch 확인

3)  git branch -d 브랜치명  : 사용을 마친 branch 삭제

 

3-4. Merge Conflict

Merge한 두 branch에서 같은 파일을 변경했을 때 충돌이 발생한다.

해결하기 위한 과정은 아래와 같다.

1)  git status  : 어느 파일에서 충돌이 발생했는지 확인한다.

2)  충돌 해결 코드 작성  : 충돌이 일어난 파일을 직접 수정해준다.

3)  git add 

4)  git commit -m "원하는 메시지"  : 수정한 파일을 커밋한다.

5)  git checkout 현재 HEAD와 merge 하려는 브랜치 

6)  git merge 현재 HEAD 

 

4. Git 원격 저장소

4-1. 원격 저장소 받아오기

원격저장소는 인터넷이나 네트워크에 있는 저장소로서, 그 예시로 Github과 같은 호스팅 서비스가 있다.

1)  git clone 원격 저장소 주소  : 원격 저장소 url로 받아오기

2)  git remote add origin 원격 저장소 주소  : 원격 저장소와 로컬 저장소 연결해주기

- origin은 기본설정된 원격 저장소의 단축이름이고, 원한다면 다른 이름으로 변경 가능하다.

- 원격 저장소 주소 예시 : https://gitlab.com/group/project => https:// + 웹 호스트 서비스 + 그룹명 + 프로젝트명

3)  git remote  : 연결된 원격 저장소 확인

$ git remote
origin

4)  git remote show origin  : 원격 저장소 살펴보기

5)  git remote rename origin 변경할이름  : 원격 저장소 이름 변경

6)  git remote rm 저장소이름  : 주소가 변경되었거나 필요 없어진 원격 저장소 삭제

 

4-2. 원격 저장소 동기화

1)  git pull  : 원격 저장소에서 데이터를 가져와서 로컬 데이터와 병합

즉, master와 origin/master가 하나의 체크포인트를 동시에 가리킨다.

2)  git fetch  : 원격 저장소에서 데이터를 가져오지만, 병합하지 않음

즉, 진행중인 작업을 마무리하고 병합해주어야 한다.

=>  git log  명령어를 통해 변경된 파일을 확인한 후,  merge  해주어야 한다.

$ git log origin/master
$ git merge origin/master

3)  git push origin master  : 로컬 저장소에서 작업한 내용을 원격 저장소에 전달 

즉, "master의 작업 내용을 origin으로 push하겠다."

push하기 전에 다른 사람이 작업한 것을 먼저 merge 해주어야 한다.

 

4-3. Origin이란?

1)  git remote -v  : 지정한 저장소의 이름과 주소 함께 출력

$ git remote -v
origin https://gitlab.com/group/project (fetch)
origin https://gitlab.com/group/project (push)

 

COMMENT