깃허브로 협업하기

정혜지·2022년 7월 23일
1

Git / Github

목록 보기
1/2
post-thumbnail

깃허브 공식 마스코트 : 옥토캣


Git과 github

Git
분산관리 시스템
GitHub
remote repository


Git 저장소

Local repository : 내부저장소
Global repository : 외부저장소
Remote repository : 원격저장소



깃허브 시작하기

📌 깃허브 push용 이름 및 이메일 세팅

git —config —global user.name “username”
git —config —global user.email “email@email.com

Token

Github - setting - developer setting - personal access tokens - generate new token

Git ignore
Project에 원하지 않는 Backup File이나 Log File , 혹은 컴파일 된 파일들을 Git에서 제외시킬수 있는 설정 File이다.

  • 적용 : .gitignore 파일을 같이 깃허브로 push

    .gitignore 파일은 반드시 최상위 폴더에 존재해야한다 ⭐️

* Git ignore 사이트 참조
https:// www/toptal.com/developers/gitignore



logo



깃허브 활용

내부저장소와 원격저장소 연결
( 연결하기 이전에 깃허브에 저장소가 만들어져야한다)

git remote add origin [ repository address ]

원격 저장소에 업로드

git push -u origin master

내부 저장소 업로드

git add [파일명] : stage area에 추가
git commit -m “commit message” : 로컬 저장소에 추가



협업 실습과정

0
협업 매니저 : 깃허브에 프로젝트 레포지토리 생성 + 콜라보레이터 추가
팀원 : 브랜치 생성

1 깃허브에서 프로젝트 내용을 내부저장소로 가져오기

git clone [repository address]

2 협업 프로젝트에 브랜치 업로드

git push origin [브랜치명]

3 내부저장소에서 프로젝트 내용 수정 -팀원

4 내부저장소에 변경 내용 저장 -팀원

git add .
git commit -m “commit message”

5 깃허브 프로젝트 레포지토리에 업로드 -팀원

git push -u origin [repository address]

6 협업매니저(main)에게 풀리리퀘스트 요청 -팀원

7 풀리퀘스트 확인, merge -매니저

같은 내용을 merge하게 되면 git에서는 merge를 거부

-> 원격 저장소와 내부저장소의 커밋이 서로 다르기때문

충돌 발생시 main 브랜치가 충돌된 영역을 직접 처리


8 변경 내용 내부저장소에 가져오기

git pull origin [repository address]

9 merge 이후 기능이 없어진 브랜치는 삭제

git branch -d [브랜치명]

유의사항
실습진행할 때 바로 clone 명령어를 사용하지않고 git init 이 후에 clone을 진행했더니 브랜치 이름이 main이 아닌 master로 되어있었다. main 브랜치를 새로 생성해서 사용하였는데 로컬에서 작업할때도, 깃허브 브랜치에 push하는 과정에서도 계속 헷갈려서 애를 먹었다. 브랜치는 바로바로 없애고 관리하자😂

이런 경우에는 깃허브의 디폴트 브랜치는 main임으로 깃허브에서 레포지토리를 가져오기 전에 로컬 master 브랜치의 이름을 변경하거나 (master -> main) 삭제하고 clone을 진행하는 것이 좋을 것 같다.

git branch -M master main

협업에서 Pull Request (PR)
수정한 코드가 있을때 협업 매니저에게 내 branch를 가져가 검토 후 병합을 해달라고 요청하는 것

보통은 push 권한이 없는 오픈 소스 프로젝트에 기여할 때 많이 사용한다. (Fork -clone - PR)




clone, pull, fetch 차이점 ⭐️

git clone, git pull, git fetch 모두 원격저장소에 있는 프로젝트 내용을 가져오는 명령어이지만 명백한 차이가 존재한다.

git clone
내부저장소의 내용과 원격저장소의 내용을 일치시킨다.
기존 작업 중 clone명령어를 사용해서 내용을 가져오게 되면 작업하던 내용은 사라지고 원격저장소의 내용이 덮어써진다.

-> clone은 협업 프로젝트 시작할때만 사용하는 것을 권장


git pull (fetch + merge)
원격 저장소의 내용을 가져와 현재 브랜치와 merge(병합)하는 과정을 포함하고 있어 기존 작업 내용을 유지 하며 원격저장소의 내용을 업데이트 할 수 있다. ( *기존작업 commit 필수 )

pull 명령어를 사용하기 전에 기존 작업 내용을 commit(내부저장소에 저장) 해두지 않으면 덮어쓰기가 발생할 수 있다.


git fetch
원격 저장소의 커밋을 내부저장소로 가져온다.
fetch는 pull과 달리 자동 병합을 해주지 않기에 직접 내용을 확인하고 충돌 문제 해결 후 병합(merge)하여 다시 push 해야한다.

파일수정 - commit - push 실패 - fetch - merge - push 

단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않은 경우에도 사용할 수 있다.




📌 git 명령어 정리

버전확인

git —version 

커밋 이력 출력

git log 

원격저장소 확인

git remote -v  

원격 저장소 추가(연결)

git remote add origin [repository address]

로컬 브랜치 확인

git branch

remote까지 출력

git bracn -a

파일 상태보기

git status 

ㄴ 스테이지에 추가되지 않으면 변경사항을 🟥빨간색으로 표시
ㄴ 스테이지에 추가되었다면 변경사항을 🟢초록색으로 표시


원격 저장소에 업로드

git push origin [repository address]

원격저장소에서 프로젝트 내용 가져오기

git clone [repository address]

내부저장소에 새로운 브랜치 생성

git branch  [브랜치명]

로컬 브랜치를 깃허브에 추가

git push [브랜치명] 

내부저장소에 브랜치 삭제

git branch -d 

병합

git merge 

원격저장소에서 프로젝트 내용 가져오기

git pull origin [repository address] [브랜치명]



profile
오히려 좋아

0개의 댓글