GIT(깃)의 특징
대표적인 분산형 버전 관리 시스템이다.
원격 저장소와 별개로 개발자 각각의 로컬 컴퓨터에 완벽한 복제본 소스 코드를 저장할 수 있다.
매번 메인 저장소를 조회하지 않아도 개발을 진행할 수 있어서 어디서든지 개발할 수 있다.
네트워크나 인터넷이 연결되어 있지 않은 상태에서도 로컬 컴퓨터의 소스코드만으로 버전을 관리할 수 있다.
작업한 후에는 연결하면 동기화만 하면 되기 때문에 소스코드 관리가 간편하다.
많은 개발자들의 다른 저장소를 연결하거나 동기화 작업을 할 수 있다.
또, 직접 만든 새로운 소스 코드를 배포할 수 있다.
혹은 GIT으로 내려받은 소스코드를 수정한 후, 다시 병합(merge)할 수 있다.
이런 특징들 때문에 프로젝트를 진행을 하며 소스 코드 관리를 git을 주로 사용하여 협업한다.
누구든지 소스코드를 수정할 수 있고, 어디서든지 엑세스가 가능하기 때문에 소스코드 관리에 용이하기 때문이다.
GIT의 동작 다섯 단계
- 초기화 : 폴더를 GIT 저장소로 변경한다.
- 커밋 : 변경된 코드의 이력을 기록한다.
- 브랜치 : 분리 격리된 코드 이력을 기록한다.
- 병합 : 기존 이력과 분리된 이력을 통합한다.
- 푸시 : 로컬 저장소의 이력을 서버로 전송 및 공유한다.
깃의 기본 구조
- Working Directory Area : 작업 폴더, 개발 소스가 존재하는 영역을 뜻한다.
- Staging Area : 임시적으로 저장하는 장소를 뜻한다.
- Repository Area : 메인 저장소를 뜻한다.
로컬 사용자와 글로벌 사용자
1) 로컬 사용자
- 각 프로젝트 별로 사용자 정보를 관리한다.
로컬 사용자 등록
$ git config user.name "사용자 이름"
$ git config user.email "이메일 주소"
2) 글로벌 사용자 (권장)
글로벌 사용자 등록
$ cd 저장소 폴더 // 저장소 폴더로 이동
$ git config --global user.name "사용자 이름"
$ git config --global user.email "이메일 주소"
※ 자동으로 글로벌 사용자 등록을 적용하려면 생성된 저장소에서 별도로 로컬 사용자 등록을 하지 않도록 주의하여야 한다.
깃 저장소 생성 - 초기화
$ mkdir newfolder // 새로운 폴더 만들기
$ cd newfolder // 생성된 폴더로 이동
$ git init 경로명
git init 명령어는 기존 폴더에 숨겨진 영역(숨겨진 폴더)를 추가한다.
숨겨진 영역을 추가함으로서 깃 저장소(.git)가 추가되어서 변경된다.
초기화 명령어를 입력할 때 경로명을 입력하지 않는다면 현재 폴더에서 초기화된다.
정상적으로 초기화 되었다면 "Intialized empty~" 같은 메시지로 출력된다.
$ git init .
※ 초기화 명령어를 사용할 때 현재 폴더를 의미하는 .(콤마)를 사용할 수도 있다.
숨겨진 폴더 = .git 폴더
깃 저장소를 초기화한다는 것은 별도의 숨겨진 폴더를 하나 추가하고 환경 설정 파일을 생성하는 것이다.
생성된 숨겨진 폴더를 확인하기 위해서 깃 배시 터미널에 ls 명령어로 파일 목록을 출력해보자.
$ ls
ls는 파일 목록을 출력하는 리눅스 명령어이며 초기화된 폴더에서 명령어를 입력하면 아무것도 입력되지 않는다.
$ ls -a
ls 뒤에 -a 옵션을 추가하여 입력하면 폴더 안의 숨겨진 파일을 포함하여 모든 파일을 출력하라는 의미의 명령어이다.
.git 폴더가 생성된 것을 확인할 수 있으며, 이 폴더에는 파일 이력 관리 작업 정보가 등록된다.
GIT 동작 이해
GIT은 저장공간을 논리적으로 관리한다.
깃은 저장 공간을 크게 세 가지로 나뉜다.
1. '작업을 하는 공간(working)'
2. '임시로 저장하는 공간(stage)'
3. '실제로 저장하여 기록하는 공간(repository)'
이렇게 논리적으로 공간을 분리하는 것은 GIT의 동작과 이력을 좀 더 효율적으로 처리하기 위해서입니다.
1. 워킹 디렉터리(working directory)
탐색기에서 확인 가능한 작업 폴더 (다른 용어로 working tree)로,
말 그대로 로컬 저장소에 접근할 수 있으며, 실제로 파일을 생성하고 수정하는 공간입니다.
2. 스테이지(stage)
- 논리적으로 '임시로 저장하는 공간을 의미한다.'로,
스테이지에 대한 내용은 뒤에서 더 자세하게 정리하겠습니다.
3. 저장소(repository) = 리포지터리
git은 작성된 소스 코드를 파일의 모든 변경 사항을 관리합니다.
리포지터리는 파일 변경 내역을 저장하고 관리하는 논리적인 공간을 뜻합니다.
리포지터리의 종류는 두 가지로 "로컬 리포지터리"와 "원격 리포지터리"로 나뉩니다.
1. 로컬(local) 리포지터리
2. 원격 리포지터리
- 원격 리포지터리의 예시로는 github가 유명합니다.
스테이지
앞서 말한대로 스테이지는 "임시로 저장하는 공간"을 의미합니다.
스테이지 영역은 워킹 디렉터리에서 제출된 tracked 파일들을 관리합니다.
$ git status
$ git ls-files --stage
파일들의 스테이지 상태는 status 명령어로 확인이 가능합니다.
git ls-files 같은 명령어로도 확인이 가능하다.
스테이지 - 파일의 stage와 unstage 상태
스테이지에서 파일의 상태 중, stage와 unstage 상태에 대해서 알아보겠습니다.
stage 상태는 Git이 변화 이력을 기록하려면 파일들의 최종 상태가 stage 상태여야 합니다.
unstage 상태는 파일에 변화가 있다는 것을 의미합니다.
즉, 스테이지 영역에 있는 파일과 워킹 디렉토리 안에 있는 파일 내용에 차이가 있을 때는 unstage 상태가 된다.
스테이지 영역으로 등록하지 않은 워킹 디렉터리 안의 파일도 unstage 상태이다.
이때는 unstage이자 untracked 상태이다.
unstage 상태라고 해서 파일이 없어지는 것은 아닙니다.
파일이 수정되어 임시적으로 스테이지 목록에서 제외된 것이다.
git add 명령어를 사용하여 추가할 수 있습니다.
스테이지 - 파일의 modified와 unmodified 상태
스테이지에서 파일의 상태 중, modified와 unmodified 상태에 대해서 알아보겠습니다.
modified 상태는 tracked 상태인 파일을 수정하게 되면 modified 상태로 변경됩니다.
즉, 파일을 수정할 때 modified 상태가 됩니다.
수정된 파일은 스테이지에서 잠시 제외됩니다.
마찬가지로 변경된 파일은 git add 명령어로 재등록하면 됩니다.
unmodified 상태는 tracked 상태이면서 스테이지에서 한 번도 수정하지 않은 원본 상태를 의미합니다.
원본 상태에서는 수정이 이루어지지 않았기 때문에 unmodified 상태입니다.
또한, 스테이지에 등록한 후 어떤 수정도 하지 않았다면 unmodified 상태입니다.
따라서 수정하지 않았기 때문에 파일들은 재등록하지 않아도 됩니다.
'Infra & DevOps > Git' 카테고리의 다른 글
[GITHUB] GIT Repository private에서 public으로, 혹은 public에서 private로 권한 변경하는 방법 (0) | 2024.11.21 |
---|---|
[GIT/SpringBoot] SpringBoot 민감정보 gitgnore 숨기기 (0) | 2024.11.05 |
[GIT] 병합(Merge) - Fast forward, 3-way (0) | 2024.01.09 |
[GIT] 브랜치(Branch) (0) | 2024.01.09 |
[GIT] 파일 업로드와 커밋, 그리고 원격 저장소에 전송하기 (0) | 2024.01.09 |