Git [1]
버전관리
란 파일 변화를 시간에 따라 기록하였다 특정 시점의 버전을 다시 꺼내어 보기 위해 필요하며 이를 관리하기 위한 시스템을 버전 관리 시스템(VCS, Version Control System)이라 부른다.
- 로컬 버전 관리(Local VCS) 최초 버전을 기록하기 위해 로컬의 폴더로 파일을 복사하여 버전을 관리하였지만, 이 역시 폴더가 지워지거나 파일의 수정작업이 실수될 수 있다. 이러한 이유로 LVCS을 만들었고, 파일에서 변경되는 부분만 정리하여 모든 파일을 특정 시점으로 되돌릴 수 있도록 하였다.
- 중앙집중 버전 관리(Center VCS) 협업을 위해 많은 사람들이 함께 작업하기 위해 생겨난 버전 관리 시스템이며 파일을 관리하는 서버와 파일을 받아서 사용하는 클라이언트로 구성되어있다. 하지만 만일 중앙서버에 문제가 생긴다면 모든 히스토리를 잃게 되는 문제점이 있다.
- 분산 버전관리(Distribute VCS) CVCS의 단점인 중앙집중 서버의 문제시, 모든 히스토리가 사라지는 문제를 해결하기 위해 클라이언트는 마지막 스냅샷을 체크아웃하는 것이 아닌 모든 히스토리를 전부 복제한다. 만일 서버에 문제가 생긴다면 이 복제한 히스토리를 통해 서버를 복원할 수 있다.
Git
데이터를 다루는 방법에 있어 다른 VCS와 Git은 차이점을 가진다. 대부분의 VCS는 시간순으로 파일을 관리하지만, Git은 커밋이나 프로젝트의 상태를 저장할 때의 순간을 중요하게 여겨 데이터를 스냅샷의 스트림식으로 저장한다.
깃은 대부분의 명령을 로컬에서 실행하기에 네트워크에 있는 다른 컴퓨터는 중요하지 않다. CVCS의 특성 상 중앙 서버의 네트워크 속도에 영향을 받지만 Git은 모든 히스토리가 로컬에 저장되어 있기에 모든 명령이 빠르게 실행되며, 당연히 히스토리 조회도 네트워크 연결이 필요하지 않다.
깃은 데이터를 저장 시 체크섬을 계산하고 해당 체크섬을 통하여 데이터를 관리한다. 실제로 Git은 파일 이름이 아닌 SHA-1 해시로 계산된 체크섬으로 저장한다.
깃의 상태
- Committed
- Modified
- Staged(“Changes to be committed”)
첫번째로, git directory는 다른 저장소를 clone하거나 init할때 생성된다. 여기서는 프로젝트의 메타데이터와 객체 데이터베이스를 저장한다. Working Directory는 특정 버전을 check out한 것이며, git 디렉토리에 압축된 데이터베이스에서 파일을 가져와 워킹 트리를 만든다. Staging Area도 git 디렉토리에 있으며 곧 커밋할 파일의 정보를 저장하는 곳이다.
- 워킹 트리에서 파일을 수정한다.
- 스테이징 에리어에 파일을 stage하여 커밋할 스냅샷을 만든다. (add 명령어로 생각 됌)
- 스테이징 에리어에 있는 파일을 커밋하여 깃 디렉터리에 영구 스냅샷으로 저장한다.
예시로, 다른 사람의 저장소를 클론하여 가져온다. 이때 깃 저장소는 Committed 상태로 존재한다. 여기서 몇 개의 파일들을 수정하였다. 아직 stage하지 않았기에 Modified 상태이며 스테이징 에리어로 추가한다면 Staged 상태로 변환된다. 여기에서 커밋을 한다면 git 디렉토리에 저장되며 Committed 상태로 변환된다.
Git 설정
git config
라는 명령어를 통해 환경 설정을 할 수 있다.
- 사용자 정보
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
--global
옵션을 통한 설정은 한번만 하면 모든 프로젝트에 진행되며, 프로젝트마다 다르게 이름과 이메일을 설정하고 싶다면 해당 키워드를 제거하면 된다.
단순한 파일 변경이 아닌 어떤 내용이 변경 되었는지 보기 위해선 status
가 아닌 diff
명령어를 사용하여야 한다.
- Stage 되었는가 - git status
![[스크린샷 2025-02-18 오후 11.46.02.png]]
- 로컬영역에서 어떻게 변경되었는가 ? - git diff
![[Pasted image 20250218234720.png]]
이후 로컬 영역에서 수정한 내용은 diff를 통해 확인할 수 있고, git add 명령어를 통해 staged하면, diff를 통해 수정된 내용을 확인할 수 없다. 하지만 staging area에 넣은 이후 확인하고 싶다면 git diff --staged
나 git diff --cached
명령어를 통해 위 사진과 같은 결과를 출력할 수 있다.
Enjoy Reading This Article?
Here are some more articles you might like to read next: