본문 바로가기

개발자노트/GitHub

Git - git fork 로 협업하기 + Merge , commit 오류

본 글은 Winodw 환경에서 작성하였습니다.

Fork GUI가 설치되었다고 가정하고 설명을 진행하겠습니다.

 

 

 

1. Init New Repository 

말 그대로 git 에 올릴 수 있게끔 .git 파일을 생성해주는 역할입니다.

 

2. Clone

git에 만들어논 Repository을 clone 하는 것입니다.

 

 

다음과 같이 경로를 복사하게 되면

 

 

자동으로 내용이 채워집니다.

중간에 Parent Folder는 자신이 사용할 로컬폴더를 지정해주면 됩니다. ( 내 컴퓨터에 만들 폴더 )

 

 

 

 

 

업하는법!

 

한개의 레포지토리를 여러 사람이 접근하게 하려면 Collaborators 설정을 해주어야합니다.

 

레포지토리 설정에 들어가 Collaborators를 누르게 되면 Add people를 할 수 있습니다

 

.

 

다음과 같이 깃이름 혹은 깃을 가입했을 때 사용한 email로 협업자를 추가할 수 있습니다.

 

초대를 하게 되면 초대를 받은 사람은 깃 홈페이지 우측 상단에

 

알림이 뜰 것이고 초대를 수락하면 되고,

수락을 하였다면 Collaborators 탭에 다음과 같이 협업자들이 표시 될 것입니다.

 

 

이렇게 협업에 초대까지 완료 되었다면,

다른 협업자들도 같은 repository에 접근(commit/push) 할 수 있는 권한이 생긴겁니다.

다른 협업자들은 위에 기술한 clone 과정을 통해 원격 repository에 접근하시면 됩니다.

 

 

Git fork 또한 git을 사용하기에 쉽게 만들어진 GUI라 SourceTree와 사용법이 크게 다르지 않습니다.

 

 

 

제가 사용해보면서 편했던 기능들을 몇개 말씀드리겠습니다.

 

Open in 

 

Fork 화면 우측 상단에 있는 Open in 기능입니다.

1. Open In Console

지정된 local폴더에 명령을 할 수 있는 Console창을 띄워줍니다.

이 곳에선 Git bash 명령어를 통해 작업을 수행할 수 있습니다.

 

2. Open In file Explorer 

현재 Clone된 로컬 폴더를 열어줍니다.

가끔 내가 Clone 한 폴더의 위치를 까먹을 때가 있는데 이 기능을 이용하면 내가 Clone 한 폴더를 열어줍니다.

 

Appearance

 

테마를 바꿀 수 있습니다.

Commit 순서 LayOut 출력 방법을 바꿀 수 있습니다.

 

좌측에 Branch 탭 우클릭을 하여서 LocalBranch를 만들 수 있습니다.

LocalBranch란 ?

깃에 등록되어있는 Barnch가 아닌 , 자신만의 Branch ( 작업공간 ) 을 만드는 것입니다.

 

Branch에 관한 설명은

https://note-summer.tistory.com/289

를 참고해주시면 감사하겠습니다.

 

 

 

 

협업할 때 자주 만나는 에러!

 

 

내용을 commit 하고 push 하는 과정에서 오류가 생긴 장면입니다.

이유 : 에러는 push에 실패했다고 뜨는데 hint에는 해결 방법이 제시되어있습니다.

여러명이 같은 파일을 작업했을 경우 혹은 push를 하기 전 pull을 진행하지 않아서 생긴 오류입니다.

이러한 오류가 뜨게 되면 보통

 

 

↓ 즉 , Pull이 되지 않은 상태에서 commit 을 push하려다 생기는 경우가 많은데,

이 때는 pull로 파일을 최신화 한 뒤 Push를 하면 됩니다.

 

 

Pull이 안됩니다!

 

하지만 위에서 말했듯 같은 파일에 대한 commit이 있다면 다음과 같이 pull이 안될 수 있습니다.

이러한 경우에는

1) 다른사람의 commit과 나의 commit을 병합(merge)하는 과정 수행 ( 추천 )

2) branch가 꼬였을 경우

3) commit 할 내용을 유지할 필요 없을 경우 clone 되어있는 폴더를 삭제하고 다시 clone으로 만들기

( 제일 쉽고 확실합니다 )

 

 

 

1) 다른사람의 commit과 나의 commit을 병합(merge) 해보자!

 

 

아까와 같이 loacl폴더와 remote repository의 상태가 달라 pull을 먼저 하고 push를 하라고 하네요.

pull을 해봅시다

 

 

새로 만든 내용이 중복이 된다고 하네요.

상단에 뜬 경고를 보게되면 barnch를 병합한 후에 진행하라고 합니다. Resolve를 눌러줍니다.

 

 

그러면 좌측 unstaged에 어떤 파일이 겹치는지 뜰 것이고,

우측에는 어떤 파일을 선택할지 혹은 두 파일을 합칠지 정할 수 있습니다.

체크를 양쪽 다 하게 되면 두 파일의 겹치지 않는 내용을 병합할 수 있고

한개의 파일만 선택하게 되면 그 내용만 commit할 수 있습니다.

 

 

저는 두번째 수정이 이루어진 22수정의 내용이 더 좋기 때문에

 

 

22 수정이 이루어진 Choose LocalBranchg를 클릭 후  commit 하겠습니다.

 

 

그렇게 되면 다음과 같이 22수정에 대한 내용이 채택 된 채로

merge 및 commit이 정상적으로 이루어진 것을 볼 수 있으며

 

 

push 또한 잘 작동되는 것을 볼 수 있습니다.

 

 

결과적으로 11의 커밋은 적용되지 않고 22수정이 적용된 모습을 확인할 수 있습니다 .

그리고 우측 상단에 commits을 통해

전에 commit / push한 내용에서 전 코드를 다시 확인할 수 있으니 걱정하지 않으셔도 됩니다.

 

 

 

 

 

 

2) Branch가 꼬여있을 때 또한 pull이 정상적으로 작동하지 않습니다.

 

 

다음과 같이 협업자들과 TestBranch에 작업을 하기로 하였지만

실수로 target이 main Branch에 commit / push 한 것을 볼 수 있습니다.

이러한 경우 Rebase를 통해 main 브랜치에 push 한 것을 다시 LocalBranch로 재배치 해주면 됩니다.

 

 

재배치 후 push를 하면 merge를 하라고 할텐데 다음과 같이 자신이 작업한 내용을 다시 가져올 것이면

localBranch를 선택하고 원격브랜치(git에 올라가 있는 내용) 을 다시 가져올거면

origin/TestBranch를 선택하고 commit하게 되면 

 

 

다음과 같이 main branch에 올린 가지가 localbranch에 잘 병합이 되어

한가지 가지로 합쳐진 것을 볼 수 있습니다.

 

 

 

 

 

3) 클론된 폴더 삭제 후 재생성

 

저는 IDE를 직접적으로 깃에 연동하지 않고 클론 한 폴더를 별도 관리합니다.

그래서 변경한 코드만 따로 옮겨서 push를 해서 꼬일 일이 크게 없었습니다.

IDE에 직접적으로 연동할 경우에는 commit 되돌리기를 통해 commit을 취소해야지만

저와 같이 따로 폴더를 사용해서 할 경우 특정 코드들만 따로 백업을 해논 뒤 git 폴더를 새로 clone해서

그 위에 겹치지 않는 수정된 내용만 붙여넣어 push 하곤 합니다.

merge나 commit 되돌리기 없이 제일 쉽고 빠르게 수정하는 방법이지만 IDE와 연동을 했을 경우 코드 자체가 삭제되거나 누락이 될 수 있기 때문에 이러한 경우는 비추천합니다.

 

 

 

다음에는 git commit 되돌리기 방법을 포스팅 하겠습니다.