버전 관리 시스템과 Git

  1. 버전 관리 시스템이란 무엇인가요?
    버전 관리 시스템(Version Control System)
    파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템입니다. 버전 관리 시스템을 활용하면 파일을 잃어버리거나 잘못 수정했을 때도 쉽게 복구할 수 있습니다.

버전 관리 시스템의 종류로는 로컬 버전 관리 시스템, 중앙집중식 버전 관리 시스템, 분산식 버전 관리 시스템이 있습니다.

-로컬 버전 관리 시스템(Local VCS)
간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리하는 시스템입니다. 아주 간단하지만 실수하기 쉽다는 단점이 있습니다.

-중앙집중식 버전 관리 시스템(Centralized VCS)
여러 사람과 함께 작업해서 생기는 문제를 해결하기 위해서 개발되었습니다. 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용하는 방식으로, 로컬 버전 관리 시스템 보다 관리가 쉽다는 장점이 있지만 중앙 서버에 문제가 발생한다면 치명적이라는 단점이 있습니다.

-분산 버전 관리 시스템(Distributed VCS)
각 클라이언트들이 모두 저장소를 전부 복제한 서버의 백업본을 가집니다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수도 있고 , 많은 수의 원격저장소를 가질 수 있기 때문에 다양한 방법으로 협업할 수 있습니다.

2. Git을 이용한 작업 순서는 어떻게 되나요?
Git을 이용한 작업에는 한번만 하는 명령어 작업이 있고, 반복적으로 하는 명령어 작업이 있습니다.

한번만 하는 명령어
Github 사이트에 프로젝트 저장소를 만듭니다.
Git 사용 선언 또는 원격 저장소에서 init or clone 해옵니다. (git init or git clone)
내 로컬PC와 원격 저장소 간 링크를 연결합니다. (git remote)

반복적으로 하는 명령어
코딩 작업을 합니다.
코딩 작업이 완료되었다면 관리하고 싶은 파일을 선정합니다. 모든 파일을 선정해서 추가할수도 있지만 골라서 선정할 수도 있습니다. 원하는 파일을 선정해서 스테이지 위로 올리는 것을 스테이징이라고 합니다. (git add)
스테이지에 올라온 파일들을 로컬PC의 git history에 등록합니다. 실제로 원격 저장소로 올리는 것은 아니고 로컬PC에만 등록을 시키는 것입니다. (git commit -m)
내 작업물을 github에 올립니다. (git push)

  1. 브랜치는 무엇인가요?
    독립적으로 어떤 작업을 진행하기 위한 개념으로, 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있습니다.

브랜치는 다른 브랜치와 병합(merge 혹은 rebase)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있습니다.

4. git merge와 rebase에는 어떤 차이가 있는지 서술해주세요.
프로젝트를 혼자 진행을 하면 명령어 충돌에 대한 걱정이 없지만 두 명 이상의 개발자가 작업을 진행하다보면 충돌을 피하기 어렵습니다.

merge와 rebase는 충돌이 일어나지 않게 도와주는 역할을 합니다. merge는 브랜치를 통합하는 것이고, rebase는 브랜치의 베이스를 옮기는 것입니다.

마스터 브랜치에서 a 브랜치를 merge했을 때

(좌) 마스터 브랜치에서 a 브랜치를 rebase했을 때
(우) a 브랜치에서 마스터 브랜치를 rebase했을 때

  1. 버전을 롤백하고 싶을 때 사용하는 명령어와 차이점을 서술해주세요.
    작업을 진행하다가 실수로 중요한 파일을 삭제했거나 제대로 병합이 안됐을 경우, 잘 작동이 되던 이전 버전으로 롤백해야 합니다. 이 때 사용하는 명령어가 git reset 과 git revert라는 명령어입니다.

git reset 명령어는 특정 커밋으로 되돌아갈 수 있는데, 되돌린 버전 이후의 버전들은 전부 삭제됩니다.
git revert 명령어도 특정 커밋으로 되돌아갈 수 있는데, 되돌린 버전 이후의 버전들의 이력이 남아있습니다.

reset명령어는 그림과 같이 4번째 커밋에서 3번째 커밋으로 돌아갈 경우, 4번째 커밋은 완전히 사라집니다.

revert의 경우 위 그림의 3번째 위치의 커밋에서 2번째 커밋으로 돌아갈 경우 4번째 위치에 2번째 내용의 커밋이 위치하게 됩니다.

reset 명령어는 커밋 히스토리를 깔끔하게 유지할 수 있고, 혼자 작업 시 편하게 되돌아갈 수 있다는 장점이 있지만, 다른 사람과 협업 시 같은 브랜치에서 함께 작업할 때 충돌이 일어날 수 있다는 단점이 있습니다.

revert 명령어는 히스토리에 남게 되어 왜 돌아갔는지 등의 기록을 남길 수 있고, 다른 사람들과 협업 시 충돌을 최소화 할 수 있습니다.

  1. .gitignore 파일을 무엇이며 왜 사용하나요?
    사용자가 원하지 않는 파일들을 자동적으로 git 커밋 대상에서 제외시켜주는 것입니다.
    하나씩 git repository에 넣는 것은 매우 귀찮기 때문에, 보통 git add . 명령어를 이용해 변경된 전체 파일을 추가하고 커밋합니다. 여기서 보안상으로 위험성이 있는 파일, 프로젝트와 관계없는 파일, 용량이 너무 커서 제외해야되는 파일 등등을 git add 명령어에 포함시키기 싫은 경우가 있습니다. *git rm 명령어를 통해 일부 파일만 제외시킬 수 있지만, 모든 커밋에 그런 명령을 하는 것은 힘이듭니다.
    그래서 gitignore 라는 디렉토리를 만들어서 무시할 파일을 넣어 관리할 수 있습니다.

*git rm : 디렉토리와 index에서 파일을 삭제하는 명령어

profile
프로그래머 지망생

0개의 댓글