본문 바로가기
IT Study/Git

[Git] Github를 통한 협업 방법

by 하람 Haram 2022. 10. 20.
728x90

[Git] Do it 깃 & 깃허브 입문 이고잉 강사님 특강 2(2)

2회차: 깃헙을 통한 협업 방법

5) 원격 저장소를 만든다. (github.com, gitlab.com)
6) 지역 저장소에 원격 저장소를 연결한다. (git remote add origin 원격 저장소의 주소)
7) 지역 저장소의 비밀번호를 원격 저장소에 등록한다. (ssh-keygen, id_rsa.pub 파일을 github의 계정에 ssh 키로 등록한다)
8) 지역 저장소의 브랜치와 원격 저장소의 브랜치를 연결한다. (git push -u origin master)
9) 동료를 추가한다. (github의 setting의 collaborators에 동료의 계정을 추가한다)
10) 충돌 상황을 만들어본다.

 

깃 : 지역 저장소와 원격 저장소(remote repository)를 연결해서 버전 관리를 진행

 

소스코드를 안전하게 업로드 하는 법 : Github

내 컴퓨터 : Local repository

원격 저장소 : remote repository

local repository and remote repository

 

<깃허브와 VSC연결하는 법>​

 

깃허브에 들어가서 오른쪽 상담 +를 눌러 New repository 선택

repository를 만들면 다음과 같은 화면이 나온다

홈페이지 주소가 아니라 다음의 주소를 가지고 놀아야하고 웬만해서는 HTTPS를 가지고 놀기

나의 경우

https://github.com/sjz1/connect_practice.git

이고 이거를 지역 저장소에 이 원격 저장소를 옮겨야한다

 

git remote add origin https://github.com/sjz1/connect_practice.git

해주면 등록이 되고

연결이 잘 되었는지 확인

git remote -v

연결이 잘 된 모습

 

origin: 다른 이름으로 해도 되는데 그냥 남들 따라하자

git push --set-upstream origin master

이 설정을 한번 하긴 해야한다

인증화면

다음과 같이 인증하라고 뜬다

 

인증을 끝낸 모습

 

 

그래서 origin master 가 뭐냐!!

<origin master>

push를 할 때 local의 모든 걸 push하는 건 비효율적

그래서 마지막으로 어디까지 Push되었는지 기록함 이걸 origin master가 함

origin은 원격저장소의 이름이라고 생각

즉, 새로운 버전이 생겼을 때 orgin master가 새로운 버전을 바라보고 그 버전은 내 컴퓨터에서만 있다!! 알려줌

ex)

work 1을 수정한 다음 저장함

git commit -am "work 6" 
git log --oneline --all --graph

 

 

work 6은 아직 푸시하지 않은 버전이라는 것을 보임

 

push를 해보고 변화를 보자

git push

origin/master가 잘 따라 온 모습을 볼 수 있다(즉, 가장 최신까지 push했다)

<amend>

내가 아직 push하지 않은 버전에 대해 commit을 수정할 수 있다

하지만 orgin이 바뀌는 건 아니고 복제해서 하므로 commit id는 바뀐다

(이 덕분에 복원이 가능하기도 한다)

--amend를 이용하면 commit을 수정할 수 있지만 B가 바뀌는 건 아님 B'이 생김

(original은 수정이 안되고 우리한테 그렇게 느끼게만함)

그래서 reset을 이용하면 언제든지 복귀할 수있다

git commit --amend -m "work seven"

아니 내꺼를 내가 바꾼다는데 뭔 상관???

하지만 원격 저장소로 push완료한 work 6는 못 바꾼다

(바꿀 수는 있지만 좀 위험함...)

push 하기 전 commit을 수정할 수 있다
 

아 다시 work 7 이 되고 싶다 하면

git reset --hard (commit id)

A 사람이 해서 push 한 걸 B는 pull로 땡겨서 수정하고 push

추후에 A는 또 pull을 해서 사용하고 push하고 하면서 협업을 할 수 있다

<window 창 두개를 띄워서 협업이라 가정>

새 창을 띄운다음 리포지토리 복제를 선택

파일의 위치를 저장해주고

열기 클릭

복제된 폴더 확인 가능

 

위에서 push를 work 6까지만 했으므로 여기까지 복사 된 모습을 볼 수 있다

 

서로 다른 파일을 만들어 준다 (왼쪽, 오른쪽 : 사용자가 두명이라 가정) => 충돌이 일어나지 않은 상황

<상황 가정>

만약 왼쪽 사람이 git push를 하고 퇴근을 했을때

오른쪽 사람이 push를 하면

거절을 당한다

이유

push전 상황

push했을때

만약 오른쪽 사람의 push가 성공하면

master가 B2를 바라 보게 되고 B1은 사요나라....

그럼 어떻게???

오른쪽에서 B1을 pull 해 온다 (pull = fetch+merge)

fetch: 다운로드 받는 것

merge (git merge o/m 이 자동으로 된다)

즉, B2와 B1을 병합하여 이 둘을 모두 가지고 있는 C버전이 만들어진다

(충돌이 난다면 여기서 나겠지??)

 

 

이렇게 한 다음에는 C버전에는 B1이 포함 되므로

오른쪽 사람이 push를 할 수 있다

 

<해보자>

오른쪽에서 pull을 하면

 

 

R1 ,L1 모두 포함되어 있는 걸 확인 할 수 있다

그 다음에 오른쪽 사람이 push를 하고

왼쪽사람이 pull을 하면 된다

 

728x90