공부

버전관리 - Git, Github 이론

글로벌디노 2024. 12. 12. 18:36

버전관리란?

한마디로 파일의 타임머신

 

파일의 변화를 기록 (변경점 관리)

복구, 특정 시점의 파일을 가져온다

수정된 내용을 비교 가능하다

추적이 가능하다

 

Git의 버전관리 개념

- 워킹 디렉토리 (작업 디렉토리)

- 스테이징 영역: 단순한 파일을 지칭, 커밋할 파일의 정보 저장(인덱스)

- Git 디렉토리: 프로젝트의 메타 정보, 객체 데이터베이스

 

폴더 -> 작업디렉토리 -> 스테이징영역 -> Git디렉토리-지역저장소

 

https://github.com/

 

GitHub · Build and ship software on a single, collaborative platform

Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.

github.com

 

로컬에서 명령 실행

대부분의 명령은 다른 서버가 필요하지 않다

 

모든 히스토리가 로컬 저장소에 존재

이력 조회

파일 비교

오프라인 상태

 

무결성

체크섬으로 데이터를 관리, 40자 길이의 16진수 문자열

 

Git 버전관리 흐름

Committed: 로컬 Git 데이터베이스에 안전하게 저장

Modified: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것

Staged: 현재 수정한 파일을 곧 커밋

 

Git 기본 명령어

git init

git config

git add

git status

git commit

git reset

git log

 

커밋(Commit)

변경 작업 완료 -> 준비 -> 버전 관리에 저장

- 변경 사항을 스냅샷으로 저장

- 해시값이 생성됨

- 체크섬

- 체크섬 앞 8자리만 알려줘도 잘 찾아줌

 

HEAD

커밋이 많아지면 어디에 위치하고 있는지 포인터가 필요

- 작업 트리 마지막 커밋을 가리키는 포인터

- 현재 작업 중인 커밋

 

체크아웃(Checkout)

작업할 브랜치 지정, 헤드의 위치를 변경

- 현재 작업 브랜치의 HEAD 위치를 변경한다

 

상대참조

많은 커밋을 어떻게 참조할까? 작업 위치를 변경하는 방법은?

- 깃은 커밋 단위를 해시로 관리

- 사람이 알아보기 힘들다

- 상대적인 참조 제공 (캐럿 ^, 틸드 ~)

 

^(캐럿)

부모 커밋을 나타내는 기호

캐럿 1개(^): 바로 1단계 부모 커밋

캐럿 2개(^^): 부모 커밋의 부모 커밋

 

~(틸드)

주어진 숫자만큼 상위 커밋으로 헤드 포인터 이동

~1: 1단계 부모 커밋

~2: 2단계 부모 커밋

 

 

Git Branch(브랜치)

브랜치(Branch)란?

- 독립적인 작업 공간

- Git 버전관리 시작 -> 메인 브랜치(main)

- 메인 브랜치는 기본 브랜치

 

브랜치 생성

git branch [신규 브랜치명]

 

브랜치 이동

git checkout [브랜치명]

 

브랜치 합치기 (병합 또는 머지)

git merge [작업한 브랜치]

 

브랙치 삭제

git branch -d [브랜치명]

 

커밋 수정하기

커밋을 한 후 다시 커밋을 하고 싶을 때 사용

바로 이전의 커밋을 덮어쓴다

git commit --amend

 

커밋 취소하기

이전에 커밋한 것을 취소

다른 사람과 이미 공유한 커밋을 취소하면 절대 안된다.

커밋 이력이 변경된다

git reset HEAD^

git reset "취소할 커밋 체크섬"

 

커밋 되돌리기(revert)

커밋한 내용을 되돌린다.

이전 커밋과 반대의 내용으로 커밋 추가

reset과 다른점: 커밋이 새로 생성된다

다른 사람과 공유한 브랜치는 절대 하지 않는다

과거 커밋 이력이 유지된다

git revert "되돌릴 커밋 체크섬"

git revert "커밋 체크섬" .. "커밋 체크섬"

 

커밋 가져오기 (cherry-pick)

다른 브랜치의 커밋을 현재 작업 브랜치로 가져온다

git cherry-pick "커밋 체크섬"

 

충돌이란?

코드의 동일한 라인을 두 명 이상이 수정, 어떤 것을 최종 반영해야 하는지 알 수 없음

이 때 브랜치를 병합(머지)할 수 없어서 충돌이 발생

 

Github 저장소 주소를 내 PC로 Clone하기

git clone [git 원격 저장소 주소]

 

Clone 정보 Git 원격지 정보 확인

Clone한 원격지 Git 저장소 자동으로 등록

git remote -v 명령으로 확인

원격지 저장소의 기본 별칭: origin

 

Git pull push

 

비밀번호 대신 접근 토큰 필요

 

동료와 함께 버전관리 사용 - 정리하기

1. 원격 저장소를 Clone하여 내 로컬에서 개발한다.

2. 개발한 내용을 다시 원격 저장소로 Push한다.

3. 원격 저장소로 Push된 커밋들을 PR로 만들어 요청한다.

4. 동료 개발자는 PR을 리뷰하기

5. 승인되면 PR을 메인 브랜치에 합친다.

반응형

'공부' 카테고리의 다른 글

프로젝트를 위한 협업: Github  (0) 2024.12.16
복습 목차  (0) 2024.12.12
HTTP의 특성  (0) 2024.12.12
웹 서버와 웹 어플리케이션 서버  (0) 2024.12.12
자원과 자원의 식별 URI/URL/URN  (0) 2024.12.12