Git, Git Bash
리누스 토르발스는 리눅스 커널을 관리하는 기존 툴이 엉망인 것에 너무 빡친 바람에 Git이라는 소스관리 툴을 만든다. 리누스는 하도 빡친 나머지, 단 2주만에 완성하는 기염을 토했다. -오픈소스의 승리 중에서
git hub : 코드를 올려놓는 협업 플랫폼
git : git hub와 연동되는 LINUX 기반 버전관리시스템(VCS)
git desktop : git은 git bash를 이용한 CLI 방법인데, 이를 사용하기 쉽게 GUI로 만든 툴
CLI 명령어
- pwd: 현재 작업 중인 디렉토리 확인
- ls: 파일과 객체 목록 확인
- ls -a: 숨겨진 파일까지 모두 보기
- mkdir: 폴더 생성
- touch: 파일 생성
- mv : 파일을 다른 위치로 옮기기
- mv ../*.py ./ : 상위 디렉토리의 모든 파이썬 파일을 현재 디렉토리로 이동
- cp main.py ./main_copy.py : 같은 디렉토리에 파일 복사
- rm license.txt : 파일 제거
- rm -rf dest : 폴더 및 하위 파일 모두 제거 (재귀적)
- vi hello.py : Vim으로 파일 열기 (Vim은 리눅스 텍스트 편집기)
- cat hello.md : 파일 내용 확인
GitHub

- git add : Working directory(내가 혼자 작업하던 파일)에서 staging area로 이동(버전관리 준비단계)
- git commit : staging area를 local repository에 반영(아직 github에는 반영안됨)
- push:
git push origin main 을 통해 github에 반영 main branch에서 push한다는 뜻
Branch

-
git branch: 현재 브랜치 목록 확인
-
git branch -r: 원격 저장소의 브랜치 목록 확인
-
head: 최근 작업 위치
-
git branch <name>: 새로운 브랜치 생성
-
git switch branch-init 또는 git checkout branch-init: 해당 브랜치로 이동
-
git merge py-init: main 브랜치에서 py-init 브랜치의 내용을 병합
-
git branch -D py-init: 불필요한 브랜치 삭제
☠️branch 주의사항
1. 브랜치의 이름은 역할을 명확히 하고, 필요 없는 브랜치는 즉시 삭제
2. 브랜치를 push 하기보다 main과 merge 후 삭제하는 것이 좋다
3. 로컬에서 작업한 내용을 push하지 않으면 GitHub에 해당 브랜치가 존재하지 않음
Vim
- Normal mode: 기본 모드, 언제든지 esc 키를 눌러서 돌아가기
- Insert mode: 입력 모드로 전환하려면 Normal 모드에서 i 키를 누르기

맨 밑에 Insert가 표시됨
- Visual mode: Normal 모드에서 v 키를 눌러 시각적 선택 모드로 전환
- Command mode: Normal 모드에서 : 키를 눌러 명령 모드로 전환
Merge Conflict

- main에서 가져온 branch 작업 중, main 브랜치에서도 수정이 생기면 초기 버전과 달라 충돌이 발생함
- 충돌시, 충돌 내용을 보고 노멀 모드에서 dd는 해당 라인을 자르고, p는 자른 내용을 붙임
GitHub Flow

- 이슈를 처리할 때는 다음을 따르자:
- 이슈 번호로 연결하여 작업을 추적하기
- 각 작업에 대한 설명을 상세히 기록하기
- 작업해야 할 항목에 대해 체크리스트를 작성하기
- 팀장은 새로운 레포지토리를 생성하고, 개발자들은 fork하여 로컬에서 작업을 진행하기
- 이슈 템플릿을 설정하고, 레이블을 사용하여 작업을 추적하기
- 팀원은 fork한 프로젝트를 로컬에서 복제하고, 브랜치에서 작업한 후 변경 사항을 push
git remote add upstream https://github.com ~
- Pull Request가 승인되기 전까지 브랜치를 유지하기
- 이후, upstream에 원본 저장소를 추가하고 변경 사항을 가져오기
오픈소스 코드 contribute process
fork : github에서 한 프로젝트를 로컬로 복제
git branch : 브랜치를 만들고 작업
git remote add upstream : 현재 작업 중인 로컬 저장소에서 다른 원격 저장소를 추가
push origin branch : 만든 작업을 push
- github에서
Pull request 승인
5-1 github에서 pull request 수정 -> add,commit,push 후 pull request 승인
git switch merge : main으로 이동
git merge : branch를 main과 merge
git branch -D : branch 삭제