반응형


안녕하세요!

맑은커뮤니케이션 웹퍼블리싱팀 정혜인 입니다.

이 게시글에서는 협업의 필수! 코드관리 시스템 Git의 기초에대해 열심히 설명해보려합니다!


INDEX

- git이란?

- 분산 버전 관리 시스템

- 저장소 (Repository)

- 브랜치 (Branch)

- 기초 git 명령어 (add / commit / push / pull)




Git

프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템(Distributed 

Version Control System; DVCS)


프로젝트를 진행하다 보면 어떤게 최신 소스인지 작업자들이 어떤부분을 어떻게 수정하였는지 이력관리가 필요합니다.

이러한 소스 코드 관리를 위해 개발자들은 버전 관리 시스템을 개발하였고 

git, svn 등 과 같은 소프트웨어들이 등장하였습니다.

버전 관리는 로컬 버전 관리 시스템 / 중앙 집중식 버전 관리 시스템 / 분산 버전 관리 시스템이 있으며 

git은 분산 버전 관리 시스템을 사용하고 있습니다.





분산 버전 관리 시스템



분산 버전 관리 시스템은 로컬 버전 관리, 중앙 집중식 버전 관리의 단점을 보완한 시스템입니

이 시스템의 포인트는 아래와 같습니다.


1. 원격서버에 버전관리 시스템의 저장소(repository)를 둔다.

2. 작업자(client)들은 자신의 로컬에 원격서버 저장소(repository)를 통째로 복사해온다.

3. 원격서버에 문제가 있어도 작업자(client)들의 로컬 저장소는 영향을 받지 않는다.

4. 원격서버에 문제가 생길시 작업자(client)의 로컬 저장소를 사용하여 원격 서버를 복구할 수 있다.





저장소 (Repository)


Git은 원격 저장소(Remote Repository)와 로컬 저장소(Local Repository)를 갖고있습니다.


 원격 저장소(Remote Repository)

 로컬 저장소(Local Repository)

 

인터넷(네트워크)을 이용하여

다수의 작업자(Client)들이 접근할 수 있는 저장소

소스를 올리거나(push) 내려받을(pull) 수 있음


 작업자(Client)가 원격 저장소를 내려받은 장소

(개인용 PC,노트북 같은)



Git 저장소를 만드는 방법

1. 진행중인 프로젝트 Git 저장소로 만들기

- 프로젝트 디렉토리로 이동해서  $git init  명령어를 실행합니다.

- git init은 .git 이라는 하위 디렉토리를 만들며 이 디렉토리는 저장소에 필요한 파일들이 들어있습니다.

- git이 파일을 관리하게 하려면 작업파일들을  $git add .  명령어를 사용하여 추가한 후  $git commit -m "{커밋 메시지}" 

명령어를 사용하여 커밋합니다.

이 후에 이 디렉토리에서 작업되는 파일들은 git을 통해 이력관리가 시작됩니다.


2. 다른 서버에 있는 저장소 복제하기(clone)

이미 진행중인 프로젝트에 참여하거나 다른 Git 저장소를 복사하고 싶을 때 $git clone {URL} 명령어를 사용하여

내 로컬 저장소에 복제할 수 있습니다.


GitHub 저장소 URL 복제 예시

1) git 주소 복사


2) 작업을 원하는 폴더에 명령프롬프트를 열어 $git clone {URL} 명령어 작성


저장소 복제 끝~~~!!!





브랜치 (Branch)


Branch : 1. 나뭇가지   2. 지사, 분점   3. (큰 조직의) 분과

중심,기준이 되는 지점에서 같이 나와 다른 뱡향으로 뻗어나가는 가지들처럼

동일한 소스를 기반으로 서로 다른 작업을 수행하기 위한 독립적인 작업공간의 개념이라고 할 수 있습니다.


1. BASE 소스코드는 작업을 진행할 기반이 되는 소스입니다. (master) 

ㄴBASE소스가 master브랜치일 필요는 없습니다.

2. 기반이 되는 소스(master)에서 종상이 작업/아영이 작업/혜인이 작업 이라는 폴더의 작업영역을 생성합니다.(브랜치 3개 생성) 

ㄴ브랜치 생성시 BASE 소스코드가 그대로 복제되어 옵니다.

3. 각자의 작업영역에서 주어진 작업을 완료하면 하나의 소스로 취합을 하게됩니다. (merge)


브랜치는 주로 위 설명처럼 사용하게 되며 다수의 작업자들과 함께 작업하는 프로젝트에서 소스 관리를 하기에 

굉장히 효율적이고 편리합니다.


브랜치 생성

 $git branch {브랜치명

{브랜치명}의 브랜치를 생성합니다.

 $git branch 

브랜치명을 제외하고 명령어를 치면 생성된 브랜치 전체목록을 볼 수 있으며

현재 브랜치의 위치도 알 수 있습니다.(현재 브랜치명 앞에 * 가 붙음)


브랜치 전환

$ git checkout {브랜치명

{브랜치명}의 브랜치로 이동할 수 있습니다.

 $git checkout -b {브랜치명

{브랜치명}의 브랜치를 생성하고 동시에 생성한 브랜치로 이동시켜줍니다.


브랜치 삭제

 $git branch -d {브랜치명

{브랜치명}의 브랜치를 삭제합니다.


( 브랜치 병합 명령어인 merge와  rebase 관련 내용은 기초에서 다루지 않겠습니다ㅎㅎ;; 패쓰패쓰!!(쓩) =3 =3 )





add / commit / push / pull


git의 가장 기본적인 명령어는 add / commit / push / pull 입니다.

작업을 하며 가장 많이 사용하게 될 명령어이기도 합니다. ㅎㅎ


1. add

작업을 진행하면 변경 이력들이 working directory라는 가상공간에 기록이 됩니다.

commit하기위해서는 staging area에 변경 이력들이 보내져야 하는데요!

이 때 add를 사용하면 변경 이력들이 staging area에 올라가게 됩니다.


 $git add {파일명} 

{파일명}의 작업파일을 staging area에 올립니다.

 $git add . 

모든 변경이력들이 staging area에 올라갑니다.


2. commit

staging area에 올라온 변경 이력들을 원격저장소에 올리기 전에

간단하게 작업 내용을 기록하며 묶어(?)두어야 하는데 이 작업을 commit 이라고 합니다.

 $git commit -m "{커밋메시지}"  명령어를 사용하여 commit 하고 메시지를 기록할 수 있습니다.


소스트리로 commit 메시지 확인하기

1) 명령 프롬프트에서 git commit -m "{커밋메시지}" 입력


2) 입력된 commit 메시지로 commit이 된 것을 확인할 수 있습니다.  


3. push

commit까지 완료된 변경 이력들을 원격 저장소에 올리는 명령어입니다.

 $git push {원격저장소명} {브랜치명}  명령어를 입력하면 원격저장소에 해당 브랜치에서

작업한 이력들이 올라가게 됩니다.


push가 되지 않을 때 --force

 $git push origin master  명령어를 사용하여 원격저장소(origin)에 master 브랜치를 올렸는데

작업이 수행되지 않고 오류를 뱉어낼 때가 있습니다.

원격 저장소의 master브랜치와 로컬 저장소의 master브랜치가 충돌이 나기 때문인데요

이때는  $git push origin master --force  명령어를 사용하면 로컬 저장소 기준의 브랜치가

원격 저장소에 강제로 올라가게 됩니다.


--force 옵션을 막 사용하게 되면 함께 일하는 작업자들의 소스와 충돌이 나거나 꼬일 경우가 많으니

사용할 때는 작업자들과 커뮤니케이션이 꼭 필요합니다!


4. pull

git push로 내가 원격 저장소에 올린 이력들이 있다면 같은 저장소를 사용하고 있는 작업자들은

원격 저장소에 올라온 변경 이력들을 내려받을 수 있습니다.

원격 저장소의 변경 이력들과 로컬 저장소의 변경이력이 겹치지 않는다면 충돌이 나지 않고

문제 없이 pull이 완료됩니다.




마치며 ...

이 글로 git의 모든 것을 알 수는 없지만 대략 이러이런 것이라는 걸 알아두시고 공부하면 좋을 것 같습니다!

다음 git글에서는 좀 더 심화된 내용으로 찾아오겠습니다. 부족한 내용, 잘못된 내용 피드백 주시면 감사하겠습니다 : )


반응형

+ Recent posts