오픈소스 수업에서 git을 따로 배우는 파트가 있어 수업 내용을 간략히 정리했습니다.
1. 버전 관리의 필요성
- 안전한 백업: 데이터 손실을 방지하고 작업 내용을 안전하게 보관합니다.
- 파일명 관리: 복잡한 파일명 없이도 효율적으로 파일 버전을 관리합니다.
- 변경사항 설명 기록: 변경 내용과 이유를 기록하여 추적할 수 있습니다.
- 쉬운 공유: 팀원들과 최신 버전의 파일을 쉽게 공유하고 협업할 수 있습니다.
2. Git 소개와 역사
- Git의 탄생:
- 리누스 토르발스(Linus Torvalds)가 리눅스 커널 개발을 위해 만든 분산 버전 관리 시스템입니다.
- 2005년에 처음 개발되었으며, 현재는 가장 널리 사용되는 버전 관리 시스템입니다.
- Git의 성공 요인:
- 매우 빠른 속도: 대용량 프로젝트에서도 빠르게 작동합니다
- 단순한 구조: 이해하기 쉽고 사용이 간편합니다.
- 비선형적인 개발 방식 지원: 분산 개발과 브랜치 관리에 최적화되어 있습니다.
- 완벽한 분산: 중앙 서버 없이도 각자의 로컬 저장소에서 작업할 수 있습니다.
3. Git의 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은 다음과 같은 세 가지 공간으로 구성됩니다:
- Working Directory (작업 디렉토리):
- 실제로 파일을 수정하고 작업하는 공간입니다.
- Staging Area (스테이징 영역):
- 커밋할 파일들을 임시로 저장하는 공간입니다.
- 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
'Development studies' 카테고리의 다른 글
백준 깃헙 자동 푸시 크롬 확장 프로그램 (0) | 2023.04.12 |
---|---|
인텔리제이 단축키 (0) | 2023.03.07 |
[안드로이드]GitHub 세팅하기 (0) | 2023.02.09 |
정렬된 배열이 더 빠른 탐색을 한다. (0) | 2022.10.12 |