Session - Git & GitHub

Sung Jun Jin·2020년 4월 1일
0

위코드 세션 정리

목록 보기
2/12

Git/ GitHub 이란? VCS(Version Control System)이란?

Git : 소스코드의 변화를 추적하는 분산형 VCS(Version Control System)이다. 여기서 말하는 분산형이란, 소스코드를 여러 개발 PC와 저장소에 저장한다는 뜻이다. A라는 PC가 업데이트한 것을 중앙 저장소에 올리면 버전이 업데이트되고, B라는 컴퓨터는 이를 중앙 저장소로부터 최신화 시키면서 버전과 파일을 모두 동일하게 유지할 수 있다.

Repository Clone

GitHub에서 repository 생성 후 로컬 저장소로 clone(복제)하기

우측의 New를 클릭하여 repository를 생성한다.

Clone or download -> 원격 저장소 URL 복사 -> 로컬 PC에서 적당한 디렉토리 생성 후 다음 명령어를 입력한다.

$ git clone 복사한 URL 주소

remote add

add remote 명령어를 통해 원격 저장소와 로컬 저장소를 연결하는 방법

로컬 PC에서 디렉터리 생성 후 git init 명령어를 통해 git repository로 만들어준다. 명령어를 정상 실행한 시점부터 해당 디렉터리는 git으로 버전관리가 실행된다.

$ git init
>/home/sungjunjin/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다

git remote 명령어를 통해 원격 저장소와 연동을 시켜준다. 여기서 origin은 연동된 원격 저장소를 가르키는 이름이다.

$ git remote add origin https://github.com/sungjun-jin/abcd.git

git clone vs. git pull 개념 및 차이점

git clone : 원격 저장소에 있는 모든 파일을 가져와 로컬 디렉토리로 복제한다. 주로 프로젝트 협업의 첫번째 단계에서 수행된다.

git pull : 협업 과정에서 프로젝트의 변경된 코드를 로컬 저장소의 코드와 병합(merge)한다. 주로 다른 사람이 작업한 최신화된 코드를 가져올때 사용한다.

Branch

브랜치는 독립적인 작업 환경이다. 필요에 의해 만들어지는 브랜치는 다른 브랜치의 영햐을 받지 않기 때문에 각자 맡은 기능에 대한 작업을 동시에 진행할 수 있고, 다른 브랜치와 병합(Merge) 함으로써 작업한 내용을 합칠 수 있다.

저장소가 만들어지는 동시에 Git은 바로 master 브랜치를 생성한다.

브랜치 생성

$ git branch 브랜치이름

브랜치 이동

$ git checkout 브랜치이름

브랜치 삭제

$ git branch -d 브랜치이름

Branch Tip!

  • 브랜치의 새로운 기능을 개발하는 역할을 주로 맡기 때문에 이름은 feature/이름 식으로 지어주면 좋다.

  • 한번 merge한 브랜치는 제 기능을 완료했기 때문에 재사용하지 않는게 좋다.

conflict는 왜 발생하는가? 어떻게 해결하는가?

다양한 브랜치에 의한 병렬 작업 환경에서 두명 이상의 사람들이 동일한 파일에 변경을 하고, 그 변경사항을 merge할때 발생한다. Git은 충돌된 변경사항들을 덮어쓰게 하지 못하게 하고 conflict의 해결을 요구한다.

다음과 같은 상황을 가정해보자

Repository에 f1.txt라는 파일이 있다. 구조는 다음과 같다

f1.txt

function() {
	return '나는 f1.txt'
}

master 브랜치가 다음과 같은 파일을 수정하여 commit 했다

master 브랜치의 f1.txt

function() {
	return 'master'
}

그리고 동일 저장소 내의 exp라는 브랜치 또한 위에 f1.txt를 수정하고 commit 했다.

exp 브랜치의 f1.txt

function() {
	return 'exp'
}

master 브랜치와 exp 브랜치는 동일한 파일의 동일한 영역을 수정하여 commit했다. master 브랜치에서 이 둘을 merge하는 순간 에러가 발생한다.

(base)  sungjunjin@sungjunjin  ~/git_remote master git merge exp   
자동 병합: f1.txt
충돌! (내용): f1.txt에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.

다시 f1.txt 파일로 가보면. 이렇게 되어있다.

function() {
 
<<<<<<< HEAD
     return 'master'
=======
     return 'exp'
 >>>>>>> exp
}

충돌이 있는 부분에 Git 이 자동으로 위와 같이 충돌 정보를 포함하여 파일 내용을 변경한다. 이 내용을 통해 어떤 브랜치에서 어떤 부분이 충돌되었는지 확인할 수 있다. 충돌이 일어난 부분은 이렇게 일일이 확인해서 아래와 같이 수정할 코드를 충분한 협의 후 변경해줘야 한다.

function() {     

     return 'exp'
}

충돌 부분을 모두 수정했으므로, 다시 커밋한다.

$ git add f1.txt
$ git commit -m "conflict resolve"

git checkout -- 파일이름 : 변경된 사항을 다시 돌려놓는다.

profile
주니어 개발쟈🤦‍♂️

0개의 댓글