Bibbidi Bobbidi Boo
article thumbnail

부캠챌린지 과정에서 공부한 내용 정리해서 재업로드!

 

 

VCS


VCS(Version Control System)

git을 알아보기 전, VCS 에 대해 알아보자.

 

VCS는 Version Control System의 약자로, 파일의 변화를 추적하고 관리하는 시스템이다.

소프트웨어 엔지니어링에서 코드의 변화를 추적하고 관리하는 데 사용되며, 대표적으로 git과 SubVersion이 있다.

 

VCS는 발생한 문제를 발견하기가 쉬우며, 변화에 실패했을 경우 과거의 상태로 쉽게 돌아갈 수 있게 해 준다.

즉 실패에 대한 부담이 적어 백업, 협업에 편리하다.

 

 

Git


Git의 장점

git은 오늘날 회사에서 가장 많이 사용되고 있는 VCS이다.

git을 만든 리누스 토르발스는 SVN이나 CVS 같은 기존의 버전 관리 시스템을 전혀 사용하지 않았다.

기능이 아마 마음에 들지 않았을 거라 보통 예상한다.

 

그러다 결국 BitKeeper라는 버전 관리 시스템을 사용하기로 했다.

이유는 분산 처리 기능과 비교적 빠른 성능 때문에..

그런데 BitKeeper 쪽에서 제한을 걸어버리니 결국 리누스 토르발스가 그냥 직접 만들자 해서 만든 것이 git.

(리눅스도 만들고, git도 만들었으니 거의 컴공의 위인 격이다)

 

git은 매우 빠르고, 분산형 저장소를 지원하며 단순하다.

그리고 가지치기(branch)가 비교적 가볍다.

원하는 만큼 별 제약 없이 생성하고 삭제할 수 있다. 기존에는 브랜칭 하나 하려고 수시간의 미팅을 해야 했었다고 한다.

병합도 문제가 덜 발생하는 편이고, 스테이징을 지원한다.

 

Git 구조

출처 : UX공작소

git의 구조 및 파일 관리 상태이다.

내 컴퓨터, 숨겨져 있는 폴더. git이 있는 폴더가 Working Directory,

원격 저장소에 있는 폴더가 Remote Repository이다.

 

Working Directory에 있는 파일관리의 상태는 Untranked, Tracked으로,

Tracked은 Unmodified, Modified, Staged로 나눌 수 있다. 이는 git status 명령 시 나오는 상태이다.

 

Modified, Untracked 상태에 있는 파일들은 git add를 통해서 Staging Area에 들어갈 수 있다.

그리고 git commit 하면Staging Area에 있는 파일의 Staged 파일들을 그대로 스냅샷으로
찍어서 Local Repository에 저장한다. 이 스냅샷이 하나의 히스토리 기록이 되며, 이 기록을 기준으로 과거로, 혹은 미래로 갈 수 있다. 

 

그리고 push를 했을 때 Local Repository에서 원격 저장소로 업로드가 된다.

 

Git 기본 명령어

status

작업 디렉터리의 스테이징 영역의 상태를 확인하기 위해서 사용한다.

git status

 

log

현재 commit 로그 등을 출력한다.

git log

 

add

git에 파일을 추가하기 위한 명령어, 스테이징에 파일이 추가되고 관리 대상이 된다.


git add 파일명
git add . // 전체 add
git add .kt // 모든 kt 파일 업로드
git add 디렉토리명/ // 디렉토리 업로드
git add --update // 현재 git이 추적하고 있는 파일들만 add

 

commit

스테이징에 저장되어 있는 변경 사항들을 로컬 저장소에 등록한다.

git commit -m "커밋할 메시지"

commit 메시지를 잘못 작성했을 경우에도 수정 가능하다.

 

다음처럼 --amend 키워드를 사용하면 가장 최근의 commit이 수정된다.

(commit 메시지나 commit 할 파일을 잘못 넣었을 때 매우 유용함)

git commit --amend

더 오래된 commit 수정 혹은 한 번에 여러 commit을 수정하는 방법도 있다. 자세한 것은 참조 링크 참고.

 

branch

branch를 생성, 제거 및 확인할 수 있다.

협업에 가장 많이 사용될 거라 예상되며, 옵션에 따라 기능이 많다. 자세한 것은 참조 링크.

git 입문 가이드에서는 branch에 대해서 좀 더 상세하게 설명하고 있다.

 

checkout

내가 사용할 브랜치를 지정한다.

git checkout 브랜치명

다음과 같이 -b 옵션을 넣으면 브랜치 작성과 체크아웃을 한꺼번에 실행할 수 있다.

git checkout -b 브랜치명

 

push

로컬 저장소에서 원격 저장소로 보낼 때 사용한다. 

git push origin master

 

pull

다른 사람이 원격 저장소에 업데이트한 파일이 있을 때, 원격 저장소와 내 로컬 저장소의 상태를 동일하게 만들기 위해 사용한다.

git pull

 

이 중 가장 많이 사용하게 될 것은 add, commit, push일 것이다.

 

commit은 자주, push는 하루를 마감하는 느낌으로 하루에 한 번 정도 하는 게 나름 국룰(?)이었으나...

실제 팀 프로젝트를 해보니, push를 자주 해주는 게 상황 공유 측면에서 좋은 듯.

 

Pull Request

개인, 적은 인원에서 개발한다면 위에서 설명한 git의 기본적인 명령어만 알아도 큰 지장은 없다.

그러나 사람이 많으면 많아질수록Pull Request의 사용이 필요한 경우가 많다.

pull request를 위해서는 아래와 같은 절차가 필요하다.

 

1. fork : 타깃 프로젝트의 github 주소에 접속하여 자신의 주소로 fork 한다.

 

2. clone, remote : fork 한 저장소를 로컬에 clone 후 원본 프로젝트 저장소를 원격 저장소로 추가

 

3. branch 생성 : git checkout으로 branch를 생성한다. 

 

4. 수정 작업 후 add, commit, push

 

5. Pull Request 생성 : 본인 계정의 github 저장소에 들어와 Compare & pull request 버튼을 클릭, 메시지 작성 후 PR 생성

 

6. 코드 리뷰, Merge Pull Request : PR을 받은 원본 저장소 관리자가 변경내역 확인 후 Merge 여부 결정

 

7. Merge 이후 branch 삭제 및 동기화 : Merge가 완료되면 pull 명령어로 동기화 후 branch -d 명령어로 삭제한다.

 

좀 더 자세하게 적고 싶지만 너무 길어져 따로 링크를 첨부한다.(참조 링크)

 

 

요약

  • VCS
    • 파일의 변화를 추적하고 관리하는 시스템
    • 발생한 문제를 발견하기 쉽고, 수정에 실패했을 경우 과거의 상태로 쉽게 돌아갈 수 있게 해 줌
    • 실패에 대한 부담이 적어 백업과 협업에 편리
    • 대표적인 예시 : git, SubVersion
  • Git
    • 장점 
      • VCS 중 하나로, 매우 빠르고 분산형 저장소를 지원하며 단순
      • 가지치기가 가벼워 원하는 만큼 생성하고 삭제할 수 있음
      • 병합의 문제가 덜함
      • 스테이징 지원
    • 구조
      • Working Directory: 작업 폴더
        • UnTracked, Modified 상태의 파일을 git add로 추가 => Staging Area로 이동, Staged 상태로 변경
        • Staged 상태의 파일을 git commit => Local Repository에 저장,스냅샷 형태로 저장
          • 스냅샷 기준으로 과거 혹은 미래로 이동 가능
      • Remote Repository: github 원격 저장소
        • 스냅샷 형태의 파일을 push 했을 때 Remote Repository로 업로드
    • Git 기본 명령어
      • status: 작업 디렉터리의 스테이징 영역의 상태 확인
      • log: 현재 commit 로그 등 확인
      • add: git에 파일 추가, Staged 된 파일은 git의 관리 대상이 됨
      • commit: Staging에 저장된 변경 사항을 로컬 저장소에 기록
      • branch: branch 생성, 제거 및 확인
      • checkout: 내가 사용할 브랜치 지정
      • push: 로컬 저장소에서 원격 저장소로 보내기
      • pull: 다른 사람이 원격 저장소에 업데이트한 파일이 있을 때, 원격 저장소와 내 로컬 저장소의 상태를 동일하게 만들기.

 

 

profile

Bibbidi Bobbidi Boo

@비비디

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!