★ Git ★

sae0428·2021년 11월 21일
0
post-thumbnail

git을 처음 접했을때는 어렵고 복잡한 느낌이들어 한번에 모든것을 받아들이기에는 어렵다는 판단이 들었다. 따라서 한번정리를 해두고 두고두고 반복학습을 하여 익숙해져야 한다는 생각이 들어 따로 정리를 하는 글을 작성하기로 하였다!

우리가 git을 배워야하는 이유

  1. 효과적인 협업

  2. 손쉬운 개발 및 테스트 환경 구축

  3. 효율적인 배포관리 및 소스병합이나 충돌 관리 용이

Git이란 무엇일까?

Git 의 공식 명칭은 분산 버전 관리 시스템(VCS) 이다.

(참고로 여기서 버전은 프로그램의 변경사항을 말한다. Git을 사용하면 프로그램의 변경 이력을 관리할 수 있다.)

쉽게 말해, 프로젝트 파일의 변경 사항을 추적하는 시스템이다. 이를 통해 개발자들은 프로젝트의 변경 사항을 기록하고, 특정 시점의 버전으로 언제든 돌아갈 수 있다. 이런 버전 관리 시스템은 많은 사람들이 효율적으로 함께 작업하고, 프로젝트를 중심으로 협업할 때 사용할 수 있다. 각 개발자가 자신만의 프로젝트 버전을 본인 컴퓨터에 갖게된다. 나중에 이러한 개별 버전의 프로젝트를 병합하여 기준이 되는 버전의 프로젝트에 적용 할 수 있게 되는것이다.

Git은 개인 혹은 팀 간의 프로젝트를 관리하는 데 가장 널리 사용되고 있는 툴이다.
따라서 Git을 다룰 줄 아는 것은 요즘 모든 개발자들에게 가장 중요한 기술 중 하나임은 부정할수 없는 사실이 된것같다.

Repository (저장소)

Git을 사용할 때는 repository 라는 용어를 잘 알고 있어야한다. Git repository는 Git으로 관리하는 프로젝트 저장소로, 즉 프로젝트 폴더를 말한다.
repository 종류는 다음과 같다.

  • Local Repository (개인 저장소): 우리가 직접 관리하는 저장소로, 내 PC에 저장되어 있다.

  • Remote Repository (원격 저장소): 원격 서버에 저장된 저장소로, 팀에서 작업 할 때 특히 유용하다. 이 곳에서 프로젝트 코드를 공유할 수 있고, 다른 사람의 코드를 확인할 수도 있다. 또, 로컬 버전의 프로젝트와 병합하고, 변경 사항을 적용 할 수 있는 곳이다.

보통 레포지토리는 로컬에서 만들어서 원격에 업로드하거나, 원격에서 생성된 레포지토리를 로컬로 다운받는 방법으로 생성한다.

Commit

간단하게 말하자면 커밋은 프로젝트의 변경 이력을 말한다.
프로젝트의 현재 상태를 나타내는 checkpoint 또는 snapshot으로 생각할 수 있다.
쉽게 말해, 현재 버전의 코드를 커밋에 저장한다고 생각하면 된다.
커밋 히스토리에 필요한만큼 커밋을 생성 할 수있으며, 커밋 간 앞뒤로 이동하여 프로젝트 코드의 다른 변경사항을 확인할 수 있다. 이를 통해 프로젝트의 진행 상황을 보다 효율적으로 관리할 수 있게된다.

일반적으로 커밋을 남기는 시점은 특정 내용, 기능을 추가한 후 또는 수정 사항을 적용한 후 정도로 들 수 있다.

단 코드를 커밋하려면 우선 코드를 taging area 에 추가해야 한다.

Branch

브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.
여러 명이서 동시에 작업을 할 때에 다른 사람의 작업에 영향을 주거나 받지 않도록, 먼저 메인 브랜치에서 자신의 작업 전용 브랜치를 만든다. 그리고 각자 작업을 진행한 후, 작업이 끝난 사람은 메인 브랜치에 자신의 브랜치의 변경 사항을 적용한다.

이렇게 함으로써 다른 사람의 작업에 영향을 받지 않고 독립적으로 특정 작업을 수행하고 그 결과를 하나로 모아 나가게 된다. 이러한 방식으로 작업할 경우 '작업 단위', 즉 브랜치로 그 작업의 기록을 중간 중간에 남기게 되므로 문제가 발생했을 경우 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워진다.

저장소를 처음 만들면, Git은 바로 'master'라는 이름의 브랜치를 만들어 둔다. 이 새로운 저장소에 새로운 파일을 추가 한다거나 추가한 파일의 내용을 변경하여 그 내용을 저장(커밋, Commit)하는 것은 모두 'master' 라는 이름의 브랜치를 통해 처리할 수 있는 일이 된다.

'master'가 아닌 또 다른 새로운 브랜치를 만들어서 '이제부터 이 브랜치를 사용할거야!'라고 선언(체크아웃, checkout)하지 않는 이상, 이 때의 모든 작업은 'master' 브랜치에서 이루어 지게된다.

또한 새로운 브랜치가 생성되더라도 기존의 메인 브랜치는 그대로 남아있다.

Checkout

현재 위치한 커밋에서 다른 커밋으로 이동하는 것을 체크 아웃이라 한다. 체크 아웃을 통해 현재 커밋에서 같은 브랜치 내 다른 커밋으로 이동하거나, 다른 브랜치 내 커밋으로 이동할 수 있다. 결론적으로 체크아웃으로 인해 이전 시점의 버전으로 되돌아갈 수도 있고, 다른 사람의 브랜치로 전환해 다른 개발자들의 코드 진행 상황을 확인해 볼 수도 있다.

Merge

Merge는 나뉘어진 브랜치를 다시 하나의 브랜치로 합치는 것을 말한다.

만약 A 라는 브랜치에서 작업한 내용을 B 라는 브랜치에 적용하고 싶을 때, 브랜치 A 와 브랜치 B 를 병합(merge) 할 수 있다. 예를 들어, 특정 브랜치에서 새로운 기능을 완벽하게 구현하고 테스트까지 완료한 시점이면, 기준이 되는 master 브랜치에 구현내용을 적용시켜야하는데, 이럴 때 merge 를 사용한다.

가장 오류가 많이 발생하는 과정이니 주의해야 한다.

Merge 진행 시 현재 브랜치를 브랜치가 합쳐지는 기존 메인 브랜치로 전환한 후
수정된 브랜치를 Merge 해야 오류가 발생하지 않는다. 여러 개의 브랜치들을 한꺼번에 Merge할 때도 마찬가지로 차례차례 기존 브랜치 상태에서 Merge를 진행한다.

Clone

클론은 원격 저장소로부터 특정 프로젝트를 통째로 내 로컬 저장소에 다운받는 것을 말한다. Clone을 통해 다른 개발자들의 public repository 를 클론받아 작업할 수도 있다.

Push

푸쉬는 현재 내 로컬에서 작업한 변경 사항들을 원격 저장소에 반영하는 것을 말한다. 작업이 완료될 때마다 원격 저장소에 푸쉬해야 다른 사람들이 내 코드를 확인할 수 있다.

Pull

풀은 원격 저장소에서 변경된 사항들을 내 로컬 저장소에 반영하는 것을 말한다. Push와 정반대의 개념으로, 다른 사람이 Push를 해서 원격 저장소에 코드를 업데이트하면 우리는 해당 코드를 Pull하여 로컬의 코드를 업데이트한다, 이때 기존의 코드와 내 코드가 다른 경우 Merge를 진행해 코드를 합치게 된다.

Clone과 개념이 헷갈릴 수도 있는데, Clone은 프로젝트를 처음 불러올 때 프로젝트 전체를 다운받는 것이지만, Pull은 해당 프로젝트에서 변경된 사항들만 다운받는 것을 말한다.

Git 명령어 모음

$ git init - 현재 디렉토리를 git local repository[Working Directory]로 지정(생성)
$ git status - git 상태확인
$ git add - 파일 수정 이력 기록 준비
$ git commit - 파일 수정 이력 기록
$ git commit -m "Commit message"-  식별을 위한 커밋 메세지 작성(레포지토리에커밋남기기)
$ git show <commit> - 커밋의 상세내용 확인
$ git log - commit 이력 보기 
$ git add . - staging area 로 모든 파일 한번에 추가(프로젝트 폴더 내의 모든파일과 폴더를 staging area 에 추가하고 커밋을 남길 수 있게해줌)
$ git add file.py - 특정 파일만 추가
$ git add file.py file2.py file3. py - 여러개의 파일 추가
$ git diff - 파일의 변경 내용 확인
$ git rm <file>- 파일 삭제
$ git clone <url> - 기존의 원격 저장소 복제
$ git branch <new-branch-name> - 새로운 브랜치 생성
$ git checkout <branch-name> - 브랜치 전환, 위치 이동
$ git branch -r : 원격 브랜치 목록보기
$ git branch -a : 로컬 브랜치 목록보기
$ git remote add <name> <url> - 원격 저장소 추가
$ git remote  - 원격 저장소 목록 확인 (-v 옵션을 붙히면 상세정보 표시)
$ git remote add origin (원격 저장소 github URL) - 원격 저장소 연결(github)
$ git branch - 프로젝트에 존재하는 모든 브랜치 확인(현재 속한 브랜치는 앞에 *가 붙음)
$ git branch -M  main - main으로 브랜치 명 변경
$ git push origin main - origin이라는 원격저장소의 main 브랜치에 푸쉬
$ git pull - 다른 사람이 원격 저장소(Remote repository)에 업데이트한 파일이 있을 때, 원격저장소와 내 로컬저장소의 상태를 동일하게 만들기
$ git merge <branch-name> - 브랜치 병합하기
$ git branch -d <branch-name> - 브랜치 삭제하기 (조심해서 사용요망)
$ git remote - git 원격저장소[Repository] 목록 확인
$ git push - 원격저장소[Repository]local repository[Working Directory]의 commit 내용을 올림




. Reference
https://ko.wikipedia.org/wiki/%EA%B9%83_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
https://namu.wiki/w/Git
https://mi2mic.tistory.com/186
https://backlog.com/git-tutorial/kr/reference/basic.html

profile
# 불편함을 편리함으로 바꾸고싶은 주니어 Back-end 개발자

0개의 댓글