2024. 5. 13. 13:46ㆍCS/git
본 포스팅에서는 git에서 가장 중요한 기능 중 하나인 커밋이 가지는 의미와, 간단한 명령어 몇 가지를 알아볼 예정이다.
git의 세 가지 영역
git의 핵심은 버전 관리이기 때문에, 아래와 같이 세 가지 영역으로 나눠서 관리한다.
- Working Directory
- Staging Area
- git directory
처음 git을 쓸 때는 "편집된 것 따로, 편집 안된 것 따로 모아서 두 개의 영역만 있으면 되는 거 아닌가? 왜 복잡하게 세 개씩이나 만든 거지?" 라고 생각했었다. 세 개의 영역을 쿠팡에 비유해서 각각 아래와 같이 생각하면 편하다.
- Working Directory: 물건을 택배 상자에 넣는 행위가 이루어지는 곳
- Staging Area: 택배 상자를 싣는 트럭
- git directory: 쿠팡 물류센터
물건을 택배 상자에 넣는 건 코딩을 하는 것이다. 코드를 수정하면 상자 안의 내용물이 바뀐다. 이러한 상자가 완성되면, 트럭에 담아야 한다. 완성된 상자를 트럭에 담는 것은 git add 명령어에 해당한다. 또한, 트럭이 완성되었으면 이를 물류센터(repository)로 보내야 한다. 트럭이 이동하는 것은 git commit 명령어에 해당하며, 이를 커밋이라고 한다.
이때, 위 세 가지 영역은 모두 로컬 PC에 존재한다.
Working Directory
git의 좋은 점은, 내가 작업하고 있는 파일들을 24시간 내내 변경사항을 추적해준다는 것이다. 이렇게 추적당하고 있는 파일들이 위치하는 영역이 Working Directory이다. Working Directory는 아래와 같이 생성한다.
git init (directory 경로)
(directory 경로) 가 이미 존재한다면, 해당 디렉토리 안에 .git 파일이 생긴다. (.git 파일이 감시자 역할이다. 이 파일은 숨김 처리되어 있으므로, 숨김 해제를 하지 않는 이상 보이지 않는다) 경로가 존재하지 않는다면 해당 폴더 이름을 새로 만들어 안에 .git 파일을 만든다. 만약 경로가 아닌 폴더 이름만을 git init하는 경우, 기본적으로 C:\Users\User에 해당 폴더 이름이 생긴다.
또한, github 등의 remote repository에서 소스를 로컬로 가져와 쓰고 싶은 경우, 아래와 같이 git clone 명령어를 쓴다.
git clone (url)
이때 github에 있던 .git 폴더까지 같이 복제되므로 따로 git init을 해줄 필요는 없다.
Staging Area
Staging Area는 택배 상자를 싣는 트럭과 같은 장소이다. Working Directory에서 Staging Area로 파일을 옮기고 싶을 때는, add 명령어를 아래와 같이 사용한다.
git add (파일명)
이를 응용하여, 해당 Working Directory에 있는 파일을 모두 Staging Area로 옮기려면 아래 명령어를 쓸 수 있고,
git add .
와일드카드 문자를 이용하여 확장자가 동일한 파일을 모두 옮기려면 아래 명령어를 쓸 수 있다.
git add *.txt
Staging area에 넘어와 있는 파일의 목록을 확인하려면 아래 명령어를 사용한다.
git status
Repository
Repository는 물류 창고이다. Staging Area(트럭)에 모여 있는 파일을 repository로 한 번에 보내는 것을 커밋(commit)이라고 한다. 커밋은 아래와 같은 명령어로 한다.
git commit -m "Commit information"
커밋을 할 때는 트럭 안에 있는 상자의 내용(파일들)과 더불어, commit 문구, 작성자, 어떤 내용의 커밋인지를 작성하는 metadata를 함께 보낸다. 위 명령어의 -m 옵션은 뒤에 나오는 문자열을 commit의 내용으로 삼는다는 뜻인데, 이 옵션을 추가하지 않고 git commit만 입력한다면 commit 내용을 입력하는 vi 편집기가 실행되어 내용을 작성을 할 수 있다. 참고로, git commit은 아래와 같이 적어야 한다는 형식이 정해져 있다.
1. 제목과 본문은 빈 줄로 구분해야 한다.
2. 제목은 50자로 제한해야 한다.
3. 제목은 대문자로 시작해야 한다.
4. 제목은 마침표로 끝내지 않아야 한다.
5. 제목은 명령형으로 써야 한다.
6. 본문은 72자로 끊어 써야 한다.
7. 본문에서는 '무엇을' 그리고 '왜'를 설명해야 한다, '어떻게'는 설명하지 않아야 한다.
git의 좋은 점은 해당 프로젝트를 특정한 커밋 시점으로 되돌릴 수 있다는 점인데, 특정 커밋의 ID는 아래 명령어로 확인 가능하다.
git log
Repository 안에는 어떤 트럭이 물류창고에 어떤 짐을 두고 갔는지, 즉 커밋에 대한 로그가 남아 있다. 이 특정 커밋에 대한 ID를 이용해 Repository 안에 있는 정보를 역으로 가져와서 Working Directory에 저장하는 것도 가능하다. 이는 checkout 명령어를 사용한다.
git checkout (commit id)
또한, repository의 내용을 새로운 브랜치로 checkout하려면 아래 명령어를 실행한다.
git checkout -b (branch name)
'CS > git' 카테고리의 다른 글
유용한 라이브러리 시각화 툴 소개 (Pyreverse) (1) | 2024.08.19 |
---|---|
버전 관리의 개념과 종류(local VCS, CVCS, DVCS) (0) | 2024.05.12 |