Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

[오픈소스] - GitHub을 활용한 협업방법 본문

CS

[오픈소스] - GitHub을 활용한 협업방법

maeng-kim 2024. 9. 24. 21:31

1. 깃허브를 활용한 협업 순서
① (개발자) 로컬 개발 환경 설정
② (개발자) 이슈 확인하기
③ (개발자) 작업 branch 만들기
④ (개발자) 코드 수정하고 Push하기
⑤ (개발자) Pull Request 만들기
⑥ (메인테이너, 팀원) 코드 리뷰 하기
⑦ (개발자) 코드 리뷰 반영하기
⑧ (메인테이너) Pull Request Merge하기
⑨ (개발자) 작업 branch 삭제하기

 

 

2. remote repository
- git clone : 기존 저장소를 clone하기 (클론 시 자동으로 리모트 레포를 origin이라는 이름으로 추가)

- 자동으로 로컬의 마스터 브랜치가 리모트의 마스터 브랜치를 추적하도록 함
-git remote : 현재 프로젝트에 등록된 리모트 레포 확인
- git remote -v : 리모트 레포의 이름과 url확인

- git remote show [remote name] : 레포의 구체적인 정보 확인

- git remote add [name] [url] : 기존 플젝에 새 리모트 레포추가 (url 대신 upstream 사용 가능)

- git remote rename [old] [new] : 레포의 이름 변경

- git remote rm [name] : 레포 삭제

- git fetch [remote name] : 로컬에는 없지만, 리모트 레포에 있는 데이터를 모두 가져옴 (자주 사용해도 문제 없음)

- git pull [remote name]  : fetch + 현재 작업 코드와 merge

- git pull --rebase premote name] : fetch + 현재 작업 코드와 rebase

** 가능하면 fetch & merge를 명시적으로 사용할 것

 

 

3. branch란?

- commit (스냅샷) 사이를 가볍게 이동할 수 있는 포인터
- commit 시 저장되는 것들 : 각 파일에 대한 blob, 파일과 디렉토리 구조에 대한 tree들, 메타데이터와 root tree를 가리키는 commit

- 파일을 수정하고 commit하면 이전 commit이 무엇인지도 저장

- master branch(main branch) : 레포를 처음 만들 때, 만들어지는 기본 branch

- git branch : 브랜치를 새로 파고, 옮기지는 않음 (새 브랜치는 지금 작업 중이던 마지막 커밋을 포인팅, HEAD라는 포인터 사용)

- git switch : branch 변경

-git log --online --graph --all : 명령을 통해 한 눈에 커밋 기록 파악

- git switch -c : 브랜치 생성하면서 변경 

- git switch - : 이전 브랜치로 변경

 

* Branch 워크 플로우

1. Topic Branch : 한 가지 주제/ 작업을 위해 만든 짧은 호흡의 브랜치, 각 작업을 별도로 진행하다가 마스터 브랜치에 머지할 시점이 되면 순서에 관계 없이 머지

2. Remote-tracking Branch : 리모트 레포에 마지막으로 연결했던 순간에 브랜치가 무슨 커밋을 가리키고 있었는지를 나타냄

 

*git push [remote name] [branch name] : origin 저장소에 push

 

*Branch Tracking

- Upstream Branch : 트래킹하는 대상 브랜치 ( 리모트 트래킹 브랜치)

- Tracking Branch : Upstream Branch와 직접적인 연결고리가 있는 로컬 Branch

- git branch -vv : 로컬 브랜치 목록과 추적하고 있는 리모트 브랜치 목록을 보여주며, 로컬 브랜치가 얼마나 앞서 나가거나 뒤쳐지는지에 대한 내용도 보여줌

- git push [remote name] --delete [branch name] : 리모트 레포에서 대상 브랜치 삭제

 

 

 

* Stashing

- 작업 중간에 다른 요청에 브랜치 변경 -> 작업 중이던 내용은 커밋하지 않은 파일이 변경할 브랜치와 충돌 날 경우 브랜치 변경 불가능

-> 브랜치 변경 전에 가능하면 워킹디렉토리를 클린 상태로 정리

- git stash push : 작업 중인 내용 임시저장 

(가장 최근 커밋으로 돌아감, 워킹디렉토리 깨끗해짐)

- git stash list : 저장한 stash 목록 확인

- git stash apply : stash에 적용했던 내용 복원

- git stash apply --index : stash에 적용했던 내용 staged 상태까지 복원

- git stash drop : 해당 스태시 삭제

- git stash pop : stash에 적용했던 내용 복원 후 stash제거

 

 

*Clean

- git clean : 작업하고 있던 내용 stashing 없이 cleaning
- 추적되고 있지 않는 모든 파일이 삭제되므로 신중히 사용