1. VCS(Version Control System)
- 형상관리시스템으로도 불리며, 원시 코드와 함께 이력을 관리하는 기능을 제공함
- 팀원간 협업, 작업추적 및 복구 등의 유용한 기능을 활용할 수 있음
- 로컬(내 PC) 작업 시에도 버전은 관리할 수 있지만, 데이터 소실의 위험이 있고 협업이 불가능하므로 VCS의 사용이 필요
- Centralized VCS의 대표 예로 SVN이 있으며, Distributed VCS의 대표 예로 Git이 있음
2. Git의 버전관리
-
기존 VCS의 경우 버전이 증가할 때마다 모든 파일을 저장하는 것이 아니라, 각 파일에서 변경된 내역만을 관리하였음 (복원 시 연산량 과다 발생)

-
Git의 경우 버전이 증가할 때 변경된 내역이 포함된 파일의 스냅샷을 저장하여 효율성을 향상

3. Git의 구성요소
- Working Directory: 내가 코드 생성, 수정, 삭제 등 작업하는 공간
- Staging Area: 작업이 완료된 결과물을 옮기는 임시 거처 (스냅샷 생성)
- Repository: 버전이 관리되고 있는 코드 저장소 (스냅샷 저장)
- Working Directory에서 작업한 내용을 'Add'하여 Stating Area로 옮긴 후, 'Commit'하여야 Repository에 반영할 수 있음
4. 주요 Git 기반 서비스
- Github: Git을 웹에서 간편히 관리할 수 있도록 호스팅해주는 서비스로, 소스코드 보안이 중요한 경우 사용에 유의할 필요가 있음
- Gitlab: 설치 혹은 클라우드 형태로 Git을 사용할 수 있으며 소스코드 보안이 중요한 경우 활용
5. Git 기본 문법
5-1. Git 초기화
- git init: 현재 디렉토리를 git 로컬(local) 저장소로 설정
5-2. Git 설정 구성
- git config --global init.defaultBranch "main": 특정 사용자의 기본 브랜치를 "main"으로 설정
- git config --global user.name "abc": 특정 사용자에 대해 user.name을 "abc"으로 설정
- git config --global user.email "abc@gmail.com": 특정 사용자에 대해 user.email을 "abc@gmail.com"으로 설정
- git config --global core.autocrlf true: Windows에 사용(커밋 시 개행문자의 CRLF을 LF로 자동 변환, 체크아웃 시 LF를 CRLF로 자동 변환)
- git config --global core.autocrlf input: Mac, Linux에 사용(커밋 시 개행문자의 CRLF을 LF로 자동 변환)
- git config --global core.autocrlf false: 커밋 시 개행문자의 CRLF을 그대로 저장
- git config --list: 현재까지 설정된 사항을 출력
- git config --list --show-origin: 현재까지 설정된 사항을 범위별로 구분하여 출력
- git config "key": 특정 key에 해당하는 설정값만 출력
5-3. Git 상태 변경
- git status: Working Directory와 Staging Area의 상태를 표시
- git add: Working Directory의 파일을 Staging Area로 추가(Modified 상태의 파일을 Staged 상태로 변경)
- git commit -m [메시지]: 메시지에 작업 내용을 기입하여 커밋 (Staged 상태의 파일을 Committed 상태로 변경)
5-4. Git 파일 관리
- gir rm [파일명]: git에서 관리하는 파일 목록에서 제외 (Working Directory에서도 삭제됨)
- git mv [기존파일명][신규파일명]: 기존파일의 이름을 변경 (Working Directory에서도 변경됨)
5-5. Git 저장소 및 브랜치 관리
- git remote add [원격저장소명][원격저장소URL]: Pull 또는 Push 작업을 위해 해당 URL정보로 원격저장소 등록
- git branch [브랜치명]: 현재 시점(HEAD)에서 로컬 저장소에 브랜치를 생성
- git checkout [브랜치명]: 특정 브랜치로 이동
- git checkout [커밋아이디]: 특정 버전으로 이동 (커밋아이디는 git log를 통해서 확인 가능)
5-4. Git 로그 조회
- git log -n: 저장소의 Commit 관련 로그를 최근 n개 만큼 시간순으로 나열
- git log --grep [검색어]: 저장소의 Commit 메시지 중 검색어를 포함한 커밋 이력을 조회
6. .gitignore 파일
- Git에서 관리하지 않고 무시할 파일의 목록을 관리
- *.csv: csv 확장자 파일을 무시
- !test.csv: 상기 조건에 따라 csv는 무시하지만, test.csv는 예외
- build/: build 디렉토리 내 파일을 무시
- doc/*.txt: doc 디렉토리 내 txt 확장자 파일을 무시
- doc/**/*.pdf: doc 디렉토리 내 모든 pdf 확장자 파일을 무시
7. 브랜치
- 실무에서는 코드를 여러 사람이 복사해 독립적으로 개발한 뒤, 최종 병합하는 일이 잦음
- 예시로 기본 main 브랜치로 관리하다, 필요 시 dev 브랜치를 생성 및 분기하여 작업을 진행할 수 있음

- git branch를 통해 로컬 저장소의 브랜치 목록을 확인할 수 있고, git branch -r를 통해 원격 저장소의 브랜치 목록 확인이 가능함 (전체 확인 필요 시 git branch -a 명령어 사용)
8. Merge
- 여러 브랜치를 통해 작업하다, 현재 HEAD가 위치한 곳에서 'git merge [브랜치명]' 명령어를 통해 버전을 병합할 수 있음

9. Tag
- 특정 버전에 태그를 달아 버전을 관리할 수 있고, 추후 해당 태그로 편리하게 checkout을 실시할 수 있음
- git tag 명령어 입력 시, 현재까지 입력된 버전을 출력해 줌
- git tag [태그명] 사용 시 현재 버전에 태그명으로 태그를 달 수 있음
- git show [태그명] 사용 시 해당 태그에 대한 상세 정보를 확인할 수 있음
9. Conflict
- 두 개 이상의 브랜치에서 같은 부분을 수정하게 되면, 자동 병합이 불가능하며 Conflict가 발생
- Git에서 알려주는 Conflict 발생 부분을 확인하여 파일을 재수정한 다음, Add & Commit 후 정상 병합 진행 가능
- 주로 Pull되지 않은 상황에서 Push하여 Conflict가 발생하는 경우가 많으므로, Pull 후에 Push하는 습관을 들일 것
9. Github 사용법
9-1. Git 설치
9-2. Git 저장소 설정
- 로컬 저장소로 사용하고자 하는 디렉토리에 git init을 입력
9-3. Remote 저장소 복제 (최초 1회)
- 로컬 저장소에 원격 저장소의 내용을 git clone [원격 저장소 URL]로 복제
- 원격 저장소 URL 형식 (Token 포함): https://[토큰]@github.com/[기관(사용자)명]/[프로젝트명].git
9-4. Remote 저장소 갱신 (필요 시)
- 최초 1회 복제 이후, git pull origin main 명령어를 통해 로컬 저장소에 원격 저장소의 최신 내용을 반영할 수 있음
9-5. Working Directory에서 작업 수행
9-6. 작업 완료 파일을 Staging Area에 추가
- 로컬 저장소에서 Staging Area로 이동할 파일에 대해 git add 실시 (변경된 모든 파일을 지정하고자 한다면, 간단히 git add . 사용 가능하나 원하지 않은 파일도 포함될 수 있어 사용에 유의)
9-7. Staging Area의 파일을 커밋
- Staging Area에 존재하는 파일을 대상으로 커밋 메시지와 함께 커밋 (git commit -m "메인화면 스크롤 오류 개선 관련 소스 수정")
9-8. Remote 저장소에 반영
- 커밋된 파일을 Remote 저장소에 Push하여 원격 저장소에 최종 반영 (git push origin main)
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.