Git에서는 우리가 작업하고 있는 폴더를 작업 트리(Work tree)라고 부릅니다. 그리고 커밋을 실행하기 전의, 저장소와 작업 트리 사이에 존재하는 공간을 인덱스(Index)라고 합니다.

Commit이 실제로 동작할 땐, Work tree에 있는 변경 내용을 저장소에 바로 기록하는 것이 아니라 그 사이 공간인 인덱스에 파일 상태를 기록하게 되어 있습니다. 인덱스에 파일 상태를 기록하는 것을 스테이징(Staging)이라 부릅니다. 따라서 저장소에 변경 사항을 기록할 때는, 기록하고자 하는 모든 변경 사항들이 인덱스에 존재해야 합니다.

10개의 파일을 수정했지만 7개만 저장소에 commit하고 싶다면, 해당 7개의 파일을 선택하는 작업이 스테이징 과정입니다. 이렇게 인덱스가 중간에 있는 덕분에 작업 트리 안에 있는 커밋이 필요 없는 파일들을 포함하지 않도록 조절할 수 있고, 원하는 일부 변경 사항만 인덱스에 등록해 커밋할 수 있습니다.

인덱스에 파일 상태를 기록하는 것을 Staging이라고 부르기 때문에, 인덱스는 Staging Area라고도 불립니다.

File Status Lifecycle

Work tree의 모든 파일은 Tracked(관리 대상)Untracked(관리 대상이 아님)으로 나뉩니다. Tracked 파일은 이미 한 번 이상 커밋되어 스냅샷에 포함돼 있던 파일입니다. Tracked 파일은 다시 Unmodified(수정하지 않음)Modified(수정함), 그리고 Staged(커밋하면 저장소에 기록되는) 상태 중 하나로 관리됩니다. 그리고 나머지 파일은 모두 Untracked 파일입니다. 따라서 Untracked 파일은 '추가' 단위로 관리되고, Tracked 파일은 삭제를 포함한 '수정' 단위로 git에서 관리됩니다. Untracked 파일이라는 개념을 이용해 특정 디렉토리나 파일을 Git의 관리 목록에서 제외(gitignore)할 수도 있습니다. 처음 저장소를 Clone하면 모든 파일은 Tracked이면서 Unmodified인 상태가 됩니다. 이와 같은 것들을 Git에선 File status lifecycle이라고 부릅니다.

'Git 레거시 글' 카테고리의 다른 글

[Git] 로컬 저장소 만들기  (0) 2018.05.18
[Git] 설치와 초기 설정  (0) 2018.05.17
[Git] 커밋(Commit)  (0) 2018.05.15
[Git] 저장소(repository)  (0) 2018.05.14
[Git] 개요  (0) 2018.05.13

Git을 비롯한 소스코드 관리 시스템에서 굉장히 중요하게 생각하는 변경 이력commit에 의해 관리됩니다. 로컬 저장소에서 파일의 변경 사항을 repository에 기록하려면 commit이라는 과정이 필요합니다. commit을 하게 되면 이전 커밋 상태부터 현재 상태까지의 변경 이력이 기록된 커밋이 만들어지며, 각각의 커밋은 40자리 hex로 이루어진 고유 이름이 붙습니다. 특정 커밋으로 돌아가거나, 특정 커밋까지 reset하는 등의 기능을 이 고유 이름을 통해 수행합니다. 아래는 Github에서 진행중인 프로젝트의 커밋 로그 중 일부입니다.

대체적으로 버그 수정, 기능 추가 등 특별한 의미가 있는 업데이트를 작업 별로 구분하여 각각 커밋합니다. 이렇게 되면 나중에 이력을 보고 특정 변경 내용을 찾기 쉽습니다. Commit은 생각보다 중요한 작업이기 때문에 커밋 메시지를 필수로 입력해야 합니다. 메시지가 없으면 커밋이 실행되지 않습니다.

사실 commit은 모든 변경 사항에 대해 수행하는 것이 아니라, 저장소와 작업 트리 사이의 인덱스라는 공간에 올라와 있는 파일들만 기록합니다. 작업 트리와 인덱스에 대해서는 여기에서 알아볼 수 있습니다.

'Git 레거시 글' 카테고리의 다른 글

[Git] 로컬 저장소 만들기  (0) 2018.05.18
[Git] 설치와 초기 설정  (0) 2018.05.17
[Git] 작업 트리와 인덱스  (0) 2018.05.16
[Git] 저장소(repository)  (0) 2018.05.14
[Git] 개요  (0) 2018.05.13

Git에서 저장소(repository)는 말 그대로 파일이나 폴더를 저장해 두는 곳입니다. 그런데 git repository의 한 가지 장점은 모든 변경 이력이 남는다는 점입니다. Git은 remote repositorylocal repository로 두 종류의 저장소를 제공합니다.

  • 원격 저장소(Remote repository) : 파일이 원격 저장소 전용 서버에서 관리되며, 여러 사람이 함께 공유하기 위함
  • 로컬 저장소(Local repository) : 파일이 개인 PC에서 관리되며, 개인 전용 저장소

따라서 하나의 원격 저장소에서 파생된 여러 개의 로컬 저장소가 있을 수 있습니다. PC에 로컬 저장소를 만드는 방법은 저장소를 새로 만들거나, 이미 만들어져 있는 원격 저장소를 복사(clone)해올 수 있습니다. Git의 수많은 기능들은 이 저장소에서 출발합니다.

'Git 레거시 글' 카테고리의 다른 글

[Git] 로컬 저장소 만들기  (0) 2018.05.18
[Git] 설치와 초기 설정  (0) 2018.05.17
[Git] 작업 트리와 인덱스  (0) 2018.05.16
[Git] 커밋(Commit)  (0) 2018.05.15
[Git] 개요  (0) 2018.05.13

+ Recent posts