🥅 https://learngitbranching.js.org/?locale=ko Git 브랜치 배우기 챌린지
❖ Git과 Command Line을 사용한 Version Control

- VS Code 또는 PyCharm 등에서 터미널을 열고 입력
- Git으로 변경 사항을 추적하고, 커밋을 처리하고, 버전을 관리하는 등의 작업 가능
- 버전 컨트롤 : 현재 파일의 코드를 이전 모든 버전의 코드와 비교하거나 원하는 버전으로 롤백 가능
git init으로 디렉토리에 빈 Git 저장소를 초기화하면 .git 폴더가 생성됨(숨김 폴더)
- 커밋 메시지는 과거형이 아닌 현재형으로 적기
◇ Git의 영역
| 영역 | 🗂️ Working Directory | 📦 Staging Area | 🔶 Local Repository |
|---|
| 설명 | Git 저장소를 초기화한 곳 | 작업 디렉토리와 로컬 저장소 간의 변경사항 추적 | 로컬 저장소에 파일의 버전이 저장됨 |
| 명령어 | ls : 디렉토리 내 파일 목록 확인 | git status : 파일 추적 여부 확인 | git log : 커밋 확인 |
| 이동 방법 | git add (파일명) : 스테이징 git add . : 전부 스테이징 | git commit -m '커밋 메시지' : 커밋 | 이후 변경사항 발생 시 다시 작업 디렉토리로 이동 |
Local Repository는 Remote Repository와 연동됨
◇ 지난 버전으로 롤백하기


- 로컬에서 작업 디렉토리의 변경사항을 되돌릴 수 있음
- 먼저
git diff (파일명) 으로 파일의 현재 버전과 Git 저장소 내 마지막 버전의 파일을 비교
- checkout 대신 더 기능이 세분화된
restore 사용하기
🐱 Remote Repository (Github)
- Github 저장소 예시 - FlapPyBird 참고
- Github 저장소(레포지토리)를 설정하는 방법 2가지
- Set up in Desktop 은 별로 추천하지 않음
- …or push an existing repository from the command line 의 명령어 터미널에 입력하기
git remote origin (원격 저장소 주소)
- 로컬 Git 저장소에 원격 저장소를 생성했음을 알리기
- origin은 원격 저장소에 부여하는 이름으로, 관례로 사용하는 것
git branch -M main
- 기본 브랜치명을 master에서 main으로 변경
- 안 바꿔도 되지만 Github에서 권장하는 방식
git push -u origin main
- 로컬의 main 브랜치는 기본적으로 모든 커밋이 푸시되는 브랜치
- 로컬 저장소와 원격 저장소를 연결 후, 로컬의 모든 커밋 내역을 원격으로 업로드
- 이후로는
git push만 입력하면 됨
❖ Gitignore
◇ 파일 생성

- 오픈 플랫폼에 커밋하면 안 되는 것들의 목록을 저장한 파일
- 비밀번호, API 키와 같은 정보가 담긴 파일
- 유틸리티 파일
- .DS_Store(프로젝트 폴더의 아이콘 배치 등의 설정을 저장)처럼 공유할 필요가 없는 파일
- 숨겨진 파일 형식으로
.gitignore 파일 생성
- 작성 규칙
- 한 줄마다 개별 파일을 대소문자를 정확히 구분하여 작성
# 기호로 주석 추가
- 와일드카드 기호를 사용한
*.확장자는 해당 확장자를 가진 모든 파일을 의미
◇ 파이썬 프로젝트에 파일 추가
- 새 가상환경 생성
a. F1 으로 커맨드 팔레트 열기
b. Python: Create Environment 입력 → Venv 선택 → 인터프리터 선택
c. requirements.txt 의 모든 모듈 설치
.Gitignore 파일 생성
- https://github.com/github/gitignore 에서 파이썬용 템플릿을 복사하여 파일에 붙여넣기
🐱 Git 클로닝
- 인터넷에 공개된 소스 코드의 사본을 가져와 이어서 작업하는 것
git clone (원격 저장소 url) 으로 클로닝
- Wordle-Game 레포지토리에서 클론하기
- 공식 wordle 게임은 하루에 한 단어만 플레이할 수 있지만 클론하여 실행하면 제한이 없음
- 클론 후 폴더를 열고 가상 파이썬 환경 설정하기
- 처음으로 오픈 소스에 기여하려는 사람들에게 추천하는 프로젝트 목록 링크
❖ 브랜칭 및 병합하기


- 메인 브랜치와 별개로 실험용 브랜치에서 계속 새로운 기능을 업데이트하며 시도 가능
- 실험한 기능이 정상적으로 작동할 때 메인 브랜치에 병합하여 주 프로젝트에 가져올 수 있음
- 프로젝트의 규모가 커질수록 다양한 브랜치에서 동시에 작업이 진행됨
(주 프로젝트에서 에러가 발생하는 것을 방지)
🐱 Forking, Pull Requests
- 오픈 소스에 쓰기 권한이 없는 사람이 협업하는 방법
- 클론과 포크의 차이
git clone은 Github의 레포지토리를 로컬 환경에 클론해 가져오는 기능
git fork는 Github의 레포지토리의 사본을 자신의 Github 계정에 저장하여 수정하는 기능
- 아무나 오픈 소스에 로컬의 작업 내용을 푸시하면 안 되기 때문에 권한이 있는 사람만 클론 가능
- 포크한 저장소를 클론하여 로컬에서 작업하기
- 오픈 소스에 자신이 변경한 사항을 머지해 달라고 요청(Pull Request)해야 함
- 오픈 소스의 주인이 요청을 검토하여 승인하거나 거부 가능