약 2개월동안 개인 혹은 팀프 과제를 진행하며 내 저장소를 활용하고
팀 repository의 작업물을 내 로컬에 가져와 작업하는 과정을 경험해왔다.
과제 진행때마다 git을 활용하며 익숙해졌고, 어떤 방식으로 작동하는지에 대해 이해했다.
git을 활용한 개인 작업에는 꽤나 익숙해졌다고 생각했는데
협업에 있어서는 잊어버리는 부분이 많은 듯하여 글을 작성해보기로 했다.
익숙해진 부분과 헷갈리는 부분들이 여전히 있어서 글에 부족한 부분이 있을 수 있으며 계속 수정할 예정이다.
1. git과 git hub는 다른 개념이다!
git 소스 코드 관리를 위한 분산 버전 관리 시스템이다. - 위키백과
쉽게말하면 git으로 여러 명의 개발자가 함께 프로젝트에 참여할 때, 각자의 프로젝트 코드 작업물을 관리하기 쉽게 해준다
오프라인 환경에서도 개발이 가능하도록 해주고,
branch와 merge로 코드 충돌 가능성을 낮추어주며
git에서 제공해주는 히스토리 관리 기능으로 히스토리와 버전 관리가 용이하다
git hub git을 바탕으로 하는 웹 기반 코드 호스팅 플랫폼
단순히 코드를 모아 저장하는 곳이라고 생각하면 된다.
- git 활용에 있어 기본적인 용어와 명령어
- repository : 저장소
소스의 branch 생성으로 각각의 버전을 저장할 수 있고, 히스토리를 관리해어 이전 변경사항을 모두 확인할 수 있다.
원격 저장소와 로컬 저장소가 있는데, 원격 저장소는 일반적으로 git hub 저장소를 말하고
로컬 저장소는 내 작업 환경에서 만들어진 저장소를 말한다.
$ git remote add [지정할 이름] git url # 원격 저장소와 로컬을 연결
$ git remote -v # 연결된 원격 저장소 확인
$ git push # commit하여 로컬 저장소에 저장한 작업물을 git hub repository로 push하여 저장
$ git pull 혹은 git fetch # git hub에서의 변경사항을 로컬로 가져옴
- staging area : 커밋을 준비하는 위치
$ git add [파일명] 혹은 . (변경사항이 있는모든 파일)
명령어로 변경한 파일을 staging area에 넣어 커밋을 준비한다.
- commit : 변경된 작업 상태를 staging area에서 점검, 확정하여 로컬 저장소에 저장한다
$ git commit + 작업 영역에서 커밋메세지 작성
$ git commit -m "커밋 메세지"
- branch : 가지. 현재 작업물 상태를 복사하여 새로운 분기점을 만들어 작업할 수 있도록 한다.
- Head : 여러 브랜치 중 현재 작업하고 있는 위치
$ git branch # 현재 브랜치 상태 확인
$ git checkout -b 브랜치명 # 새 브랜치를 만들어 해당 브랜치로 이동
$ git checkout 브랜치명 # 만들어져있는 브랜치로 이동
$ git branch -v # 현재 브랜치 작업상태 확인. 어떤 작업까지 했는지 확인할 수 있다.
- merge : 다른 branch내용을 그보다 상위 branch에 가져와 합치는 작업을 말한다.
$ git merge 브랜치명
2. repository : origin과 upstream 저장소
내 로컬 저장소 위치에서의 upstream은 내 리포지토리 (fork해온 github repository)
내 리포지토리에서의 upstream은 원본=메인 리포지토리(협업을 위해 팀장이 만들어둔 메인 repo)
모든 repository를 upstream으로 지칭하면 작업 시 오류가 생길 수 있으므로
origin, upstream으로 구분하여 지칭한다
내 리포지토리를 origin
메인 리포지토리를 upstream 으로 설정
* 원격 저장소 설정하기
$ git remote add [설정할 이름] [github repo url]
* 연결된 저장소 확인
$ git remote -v
[참조] : https://wonit.tistory.com/368
3. 협업을 위한 git 활용
먼저, 협업을 위한 git 활용 과정을 말로 정리해본다.
명령어는 아래에 순서대로 정리해두었다
1) git hub의 작업하고자하는 팀 repository에서 fork하여 내 repository로 가져온다
2) 로컬(=내 컴퓨터)의 터미널에서 git clone + git url 로 해당 작업물을 컴퓨터에 받는다
* 받고자하는 폴더 위치에서 git clone하기
3) 가상환경 설정 및 requirements.txt에서 패키지를 설치
4) 새 브랜치 만들고 해당 브랜치에서 작업
5) 작업한 내용을 (여기서 merge하기는 선택사항) add commit push 하여 내 저장소에 저장
6) git hub페이지에서 작업물을 팀 repository의 원하는 브랜치로 pull & request요청 넣기
(충돌 방지를 위해 main에 pr넣지 않는다!!)
7) 권한이 있는 팀장/팀원에게 Merge 요청하기!
8) Merge된 팀 repository에서 다시 작업물 가져오기
git hub페이지에서도 가능하고 git pull, fetch 명령어로도 가능하다
--> 프로젝트가 끝날 때까지 5 ~ 8의 과정을 반복한다.
- 협업에 필요한 명령어
* 터미널에서 저장하고자하는 폴더 위치 확인 후 clone
git clone [git url]
* 이때 내 저장소는 origin으로 자동 연결되지만 메인 저장소 upstream 은 따로 연결이 필요하다
git remote add upstream [git url]
git remote add [저장소 지칭 이름] [git url]
* 가상환경 설정 및 패키지 설치, 꼭 가상환경 설치 후에 패키지를 설치하자
python3 -m venv venv # mac환경 가상환경 설정
source ./venv/bin/activate # 해제할 때는 deactivate
pip3 install -r requirements.txt # 패키지 설치
* branch 만들고 이동
git checkout -b [브랜치명] # 브랜치 만들고 이동
git branch # 현재 생성된 브랜치와 위치한 브랜치 표시
git branch -v # + branch코드, 작업 상태 함께 보여줌
* 작업물 staging, commit & push
git add . #staging area에 추가
git commit -m "커밋 메시지"
git push
git push [remote브랜치] [push하고자하는 branch]
보통은 git push origin [브랜치 명] 이 자주 쓰이는 듯.
--> git hub의 내 repository에 가면 push 된 내용을 확인할 수 있음!
이후 pull & request 요청을 넣고, 커밋 메시지를 작성하고 기다리면 팀장/팀원의 확인 및 merge 메시지를 받을 수 있다.
그 다음 merge 된 최신 작업물을 git hub에서 내 repository에 가져오거나, 명령어를 통해 fetch한다.
* 메인 repository자료를 내 저장소와 sync하기 ⭐️중요⭐️
이번에 git에 대해 알아보면서 sync 하는 방법도 여러가지를 사용할 수 있음을 알게되었다.
1. 메인 소스코드를 바로 로컬로 가져와 작업하고 내 저장소로 push 하기
2. 메인 소스코드를 내 저장소로 가져와 로컬에 pull 하기
*** sync는 항상 main branch에서 작업하자 ***
1 의 과정을 선택했다면 메인저장소 upstream => 로컬 => 내 저장소 origin 과정으로 작업이 진행
git fetch upstream # 1.upstream 소스코드 가져오기
git pull upstream main # 1.upstream 소스코드 main branch에 적용
git fetch upstream으로 upstream에서 원본 소스코드를 내 로컬에 내려받는다.
rebase 혹은 merge 명령어로 작업할 branch를 업데이트 해준다.
나는 rebase를 선호하는 편이어서 rebase함 = git log가 깔끔하다!
git rebase main [브랜치명]
upstream에서 받은 내용을 로컬에 merge 하고 내 저장소 origin으로 push 해준다
git merge upstream/main # main브랜치에서 실행
git push origin main
2의 과정을 선택했다면 메인저장소 upstream => 내 저장소 origin => 로컬 과정으로 작업이 진행
먼저 최신 작업물을 git hub에서 내 repository에 가져온다
이후 pull 및 branch rebase하기
git pull # 2.내 저장소에서 가져오기
git rebase main [브랜치명]
+++ 추가 +++
* 메인 리포지토리에 내 저장소 push 하기
변경 사항이 발생해서, 이를 원격 저장소에 반영할 때 사용하는 커맨드
$ git push --set-upstream [upstream저장소 브랜치이름] [origin저장소 브랜치 이름]
$ git push -u origin main
$ git push --set-upstream origin main
origin 저장소에 main 브랜치를 push한다.
** -u == --set-upstream
-u 를 사용하는 것은 위계 질서를 정립하기 위해서!
origin을 main 브랜치의 upstream으로 설정하겠다는 것이다.
그래서, 매번 -u를 할 필요없이 처음 push에서 설정해주면 계속 사용할 수 있다.
(하지만 헷갈리니까 익숙해질때까진 꾸준히 사용할듯..)
[참고] :
https://pers0n4.io/github-remote-repository-and-upstream/
https://velog.io/@rkio/Git-upstream-origin%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
'AI 웹개발반 > Git 활용' 카테고리의 다른 글
[git] gitmoji 활용 | git commit 라인 정리하기 (1) | 2023.06.08 |
---|---|
[TIL] poetry로 의존성 관리 및 pre-commit 사용하기 (0) | 2023.06.06 |
[git] main & 작업 branch 나누어 사용하기 (0) | 2023.05.23 |
[TIL] git에서 README의 역할 (0) | 2023.05.08 |
[TIL] 오늘 공부 정리, git협업 pull&request 하기 (0) | 2023.04.11 |