Development studies

git 초간단 튜토리얼

comoZ 2024. 10. 31. 07:17
오픈소스 수업에서 git을 따로 배우는 파트가 있어 수업 내용을 간략히 정리했습니다.

 

1. 버전 관리의 필요성

  • 안전한 백업: 데이터 손실을 방지하고 작업 내용을 안전하게 보관합니다.
  • 파일명 관리: 복잡한 파일명 없이도 효율적으로 파일 버전을 관리합니다.
  • 변경사항 설명 기록: 변경 내용과 이유를 기록하여 추적할 수 있습니다.
  • 쉬운 공유: 팀원들과 최신 버전의 파일을 쉽게 공유하고 협업할 수 있습니다.

2. Git 소개와 역사

  • Git의 탄생:
    • 리누스 토르발스(Linus Torvalds)가 리눅스 커널 개발을 위해 만든 분산 버전 관리 시스템입니다.
    • 2005년에 처음 개발되었으며, 현재는 가장 널리 사용되는 버전 관리 시스템입니다.
  • Git의 성공 요인:
    • 매우 빠른 속도: 대용량 프로젝트에서도 빠르게 작동합니다
    • 단순한 구조: 이해하기 쉽고 사용이 간편합니다.
    • 비선형적인 개발 방식 지원: 분산 개발과 브랜치 관리에 최적화되어 있습니다.
    • 완벽한 분산: 중앙 서버 없이도 각자의 로컬 저장소에서 작업할 수 있습니다.

3. Git의 3대 목적

  1. 버전 관리: 코드의 변경 이력을 체계적으로 관리합니다.
  2. 백업: 작업 내용을 안전하게 저장하여 데이터 손실을 방지합니다.
  3. 협업: 여러 개발자가 동시에 작업하고 변경 사항을 병합할 수 있습니다.

4. Git 설치 및 시작하기

Git 설치

  • Git 공식 사이트: https://git-scm.com/
  • 설치 방법:
    • Windows: "Git for Windows" 설치 파일 다운로드 및 설치.
    • MacOS: Homebrew를 사용하는 경우 brew install git 명령어로 설치.
    • Linux: 배포판에 따라 패키지 관리자를 이용하여 설치 (apt, yum 등).

Git 실행

  • Windows:
    • Git Bash: 설치 후 시작 메뉴에서 "Git Bash"를 실행합니다.
  • MacOS 및 Linux:
    • 터미널에서 Git 명령어를 바로 사용할 수 있습니다.

5. Git의 기본 흐름

Git은 다음과 같은 세 가지 공간으로 구성됩니다:

  1. Working Directory (작업 디렉토리):
    • 실제로 파일을 수정하고 작업하는 공간입니다.
  2. Staging Area (스테이징 영역):
    • 커밋할 파일들을 임시로 저장하는 공간입니다.
  3. Repository (저장소):
    • 커밋된 변경 사항들이 저장되는 공간입니다.

!https://git-scm.com/book/en/v2/images/areas.png


6. 버전 생성과 관리

6.1 저장소 초기화

$ git init
  • 현재 디렉토리를 Git 저장소로 초기화합니다.
  • .git 디렉토리가 생성되며, Git 관련 데이터가 저장됩니다.

6.2 파일 생성 및 확인

$ nano hello1.txt
  • hello1.txt 파일을 생성하고 내용 입력.

예시:

$ cat hello1.txt
  • 파일 내용을 확인합니다.

6.3 상태 확인

$ git status
  • 현재 Git 저장소의 상태를 확인합니다.
  • Untracked files로 hello1.txt가 표시됩니다.

6.4 파일 추적 시작 (Staging Area에 추가)

git add hello1.tx
  • hello1.txt를 Staging Area에 추가합니다.
$ git status
  • Changes to be committed로 hello1.txt가 표시됩니다.

6.5 커밋 (버전 생성)

$ git commit -m "Message 1"
  • Staging Area에 있는 파일들을 커밋하여 저장소에 저장합니다.
  • m 옵션으로 커밋 메시지를 함께 작성합니다.

6.6 사용자 정보 설정 (최초 1회)

$ git config --global user.name "Your Name"
$ git config --global user.email "your.email@example.com"
  • Git 커밋에 포함될 사용자 이름과 이메일을 설정합니다.

6.7 커밋 로그 확인

$ git log
  • 커밋 이력을 확인합니다.

예시 출력:

commit abcdef1234567890abcdef1234567890abcdef12 (HEAD -> master)
Author: Your Name <your.email@example.com>
Date:   Wed Nov 1 12:34:56 2023 +0900

    Message 

7. 파일 변경과 비교

7.1 파일 수정

$ nano hello1.tx
  • 파일을 열어 마지막 줄의 3을 지우고 4라는 내용을 추가합니다.

7.2 변경 사항 확인

$ git status
  • Changes not staged for commit로 수정된 파일이 표시됩니다.
$ git diff
  • 워킹 디렉토리와 Staging Area의 차이점을 보여줍니다.

예시 출력:

-1
-3
+1
+

7.3 변경 사항 버리기

$ git reset --har
  • 워킹 디렉토리를 마지막 커밋 상태로 되돌립니다.
  • 변경 내용이 모두 삭제되므로 주의해야 합니다.

7.4 특정 커밋으로 돌아가기

$ git log
  • 되돌아가고 싶은 커밋의 ID를 확인합니다.
$ git checkout [커밋 ID]
  • 해당 커밋의 상태로 워킹 디렉토리를 변경합니다.
$ git checkout master
  • 최신 커밋 상태로 돌아옵니다.

8. 버전 되돌리기

8.1 커밋 추가

  • hello1.txt에 내용을 추가하고 커밋을 여러 번 합니다.
$ nano hello1.txt
# 내용 추가: R3
$ git add hello1.txt
$ git commit -m "R3"

$ nano hello1.txt
# 내용 추가: R4
$ git add hello1.txt
$ git commit -m "R4"

8.2 이전 커밋으로 되돌리기 (revert)

$ git log
  • 되돌리고 싶은 커밋의 ID를 확인합니다.
$ git revert [커밋 ID
  • 해당 커밋을 되돌리는 새로운 커밋을 생성합니다.
  • 에디터가 열리면 커밋 메시지를 수정하거나 그대로 저장하고 닫습니다.
$ cat hello1.txt
  • 파일 내용이 되돌려진 것을 확인합니다.

9. 브랜치 관리

9.1 브랜치 생성 및 확인

$ git branch apple
$ git branch google
$ git branch ms
  • 새로운 브랜치를 생성합니다.
$ git branch
  • 현재 브랜치 목록을 확인합니다.

9.2 브랜치 이동

$ git checkout app
  • apple 브랜치로 이동합니다.
$ cat work.txt
  • 파일 내용을 확인합니다.

9.3 브랜치에서 작업

$ nano work.txt
# 마지막 줄에 "apple work 4" 추가
$ nano apple.txt
# 내용 입력: "apple work 4"
$ git add .
$ git commit -m "apple work 

9.4 브랜치 병합

$ git checkout master
$ git merge apple
  • master 브랜치에 apple 브랜치를 병합합니다.

10. 브랜치 병합과 충돌 해결

10.1 충돌 상황 만들기

  • master 브랜치에서 수정:
$ git checkout master
$ nano work.txt
# 첫 번째 줄 수정: "master content"
$ git commit -am "master work 2
  • o2 브랜치에서 수정:
$ git checkout o2
$ nano work.txt
# 첫 번째 줄 수정: "o2 content"
$ git commit -am "o2 work 2"

10.2 병합 시도 및 충돌 발생

$ git checkout master
$ git merge 
  • 병합 중 충돌이 발생합니다.

10.3 충돌 상태 확인

$ git status
  • 충돌된 파일이 표시됩니다.

10.4 충돌 해결

$ nano work.txt
  • 파일을 열어 충돌 부분을 수정합니다.

예시 충돌 부분:

<<<<<<< HEAD
master content
=======
o2 content
>>>>>>> o2
  • 수정 후:
# title
master and o2 content
# title
content

10.5 수정 사항 반영

git add work.txt
$ git commit -m "Conflict resolved"
  • 충돌이 해결되었음을 커밋합니다.

11. 실습 예제 및 연습 문제

11.1 연습 문제 1: 파일 변경 및 커밋

  • hello1.txt 파일을 수정하여 두 번째 줄에 2를 추가하고 커밋 메시지를 "Message 2"로 작성하세요.
$ nano hello1.txt
# 내용 추가: 2
$ git add hello1.txt
$ git commit -m "Message 2"

11.2 연습 문제 2: 복수 파일의 변경 사항 확인

  • 여러 파일의 변경 사항을 한 번에 커밋한 경우, 각 파일의 변경 내용을 확인하려면 다음 명령어를 사용합니다.
git show [커밋 ID] -- [파일명]

예시:

$ git show abcdef -- hello1.tx

11.3 연습 문제 3: 브랜치 생성 및 작업

  • google 브랜치에서 작업:
$ git checkout -b google
$ nano work.txt
# 마지막 줄에 "google work 4" 추가
$ nano google.txt
# 내용 입력: "google work 4"
$ git add .
$ git commit -m "google work 4"

  • ms 브랜치에서 작업:
$ git checkout -b ms
$ nano work.txt
# 마지막 줄에 "ms work 4" 추가
$ nano ms.txt
# 내용 입력: "ms work 4"
$ git add .
$ git commit -m "ms work 4"

  • 브랜치 로그 확인:
$ git log --all --graph --oneline


12. 팁과 주의사항

12.1 빠른 커밋

  • 모든 파일 추가 후 커밋:
$ git add .
$ git commit -m "메시지"

  • 추적 중인 파일의 변경 사항을 한 번에 커밋:
$ git commit -am "메시지"

  • 이 명령은 이미 Git이 추적하고 있는 파일의 변경 사항을 추가하고 커밋합니다.

12.2 기본 에디터 설정

  • Git의 기본 에디터를 Nano로 설정하려면:
$ git config --global core.editor "nano"

12.3 버전 삭제의 다양한 모드

  • git reset 명령어에는 여러 옵션이 있습니다:
    • -soft: 커밋만 취소하고 Staging Area는 유지.
    • -mixed: 커밋과 Staging Area를 취소하고 변경 내용은 워킹 디렉토리에 유지.
    • -hard: 커밋, Staging Area, 워킹 디렉토리의 변경 내용을 모두 취소.

12.4 로그 시각화

  • 브랜치와 커밋의 관계를 그래프로 확인하려면:
$ git log --all --graph --oneline