본문 바로가기
Study/Knowledge

[Git] 개인 Repostory, 공용 Repository 동기화 관리 (with 인텔리제이)

깃을 사용하다보면 공용 Repository에서 개인 Repository로  Fork 해와서 작업하는 경우가 종종 있다.

Fork를 통해서 두 Repo는 연결되어 있기 때문에,

push이전에 upstream 으로 동기화가 되어 있어야 한다!

 

로컬 git에서 작업한걸 remote로 push 하기전에 반드시 pull의 작업이 필요한것처럼

공용 remote Repo와 개인 remote Repo간에도 충돌이 발생하지 않도록 pull해주는 것을 upstream이라 말한다.

 

이 글은 공용 Repository를 개인 Repostory로 가져와서(Fork) 소스를 IDE로 데려오고,

IDE 작업 후, 다시 개인 Repostory에 올리고, 공용 Repostory에 까지 pull Request를 보내 병합시키는 과정을

인텔리제이로 진행하며 정리한 글입니다.

1. 공용 Repository → 개인 Repostory (Fork) 

 Fork를 통해 자신의 영역으로  Repository를 가져온다.

 

이때 두 Repo는 보이지 않지만, 원본 Repo에 대해서 연결 되어 있는 상태이다.

 

2. 개인 Repository → 개인 Project (Clone)

이제 Fork를 통해 가져온 Repository에 HTTPS URL 주소를 복사하여, 

공용 레포지토리에 이미 작업중인 소스들이 많은 경우,

Clone 통해서 작업환경과 소스를 한번에 받아올 수 있다.

모든 코드를 로컬로 한번에 Clone해온다.

 

가져올 소스가 없는 경우에는 굳이 Clone할 필요가 없다.

Clone해오면, IDE 환경에 따라서 이런저런 작업(gitignore, .idea파일과 src폴더 연결 등의 작업)이 생기기 때문에

소스를 작업하던 프로젝트를 자신의 git Repo Branch에 push 하는쪽이 더 좋다.

 

Clone은 IDE나 sourseTree에서 해도 되고, gitBash를 통해서 가져와도 된다.

필자는 인텔리제이를 통해서 소스를 가져와보고 작업후 소스를 개인 Repo에 올리고 공용 Repo에 동기화 시켜보겠다

현재 IDE는 숨김파일들이 안보이는 상황, 이부분은 추후 변경가능

 

remote git이 잘 연결된걸 볼 수 있다.

필자가 작업하던 Branch는 bangjihoon이므로

해당 브런치로 Checkout하여 현재브런치를 변경해보자 (자동으로 해당 브런치 소스를 가져옴)

아래와 같이 Branch에서 체크아웃을 통해 소스를 가져왔다면,

 

3. 개인 Project  → 개인 Repository (push)

이제부터는 프로젝트를 작성하며 작업을 진행한다.

깃이그노어와 test클래스하나를 작성했다.

. . .

 

진행한 작업을 이제  remote Repository에 push를 해보자.

remote에 올릴때는 현재 나의 branch가 맞는지 확인하고 올려야 한다.

위 사진과 같이 왼쪽 텝에서 두번째있는 commit Tab으로 들어가서 Commit & Push 를 진행한다.

Commit로컬깃에 저장하는 명령이고, PushRemote저장소에 올리는 명령이다.

(Push시 Error가 발생한다면, remote와 소스가 동기화되어있지 않기때문이다, 그럴땐, Pull을 통해 Merge 해주어야 한다)

Clone명령을 통해 가져왔다면 origin은 기본적으로 Clone 에 대상이되는 URL 레포를 바라보고있다.

origin - bangjihoon 이라는 목적지 branch까지 확인했다면 push를 진행하자.

 

깃헙에 정상적으로 올라간것을 확인 할 수 있다.

이제 작업한 내용을 공용 Repository에 올려보자.

 

+ 개인 Project  → 개인 Repository (pull 필요)

remote 저장소에 올릴 때, 에러가 종종 발생하곤 한다.

내가 작업한 로컬 git에서 commit history와 remote Repository 에서 히스토리가 현재 버전과 다르다면,

리모트 저장소에서 최신버전의 소스와 깃히스토리를 Pull 통해 받아와 Merge되어져야 한다.

이 과정이 선행되어야, push를 진행 할 수 있다.

 

 

4. 개인 Repository → 공용 Repository (PR)

내 개인 Repo에서보면, 방금전 bangjihoon branch로 push가 있었다는걸 알려주고 있다.

compare & pull requests를 눌러

fork를 떴었던 원본 Repository (공용 저장소)로

나의 소스를 pull(당겨가라)고 요청을 보내자.

목적지를 잘 확인하자!!

 

공용 Repo에 PR이 들어왔다는것을 확인해볼 수 있다.

이제 권한을 가진 사람이 검토후 Merge를 진행하면 

이렇게 공용 공간에까지 작업한 내용이 올라갔음을 확인 할 수 있다.

 

+ 개인 Repository -x-> 공용 Repository (upstream 필요)

공용 공간에 올릴 때, 주의사항이 있다.

내가 작업한 개인 Repository Branch 소스가 공용 Repository Branch 현재 버전과 다르다면,

upstream을 통해 동기화를 해주어야 Pull request를 할 수 있다. 

개인 Branch에서 Fetch 진행!

자신의 개인 Repo에서 자신이 관리하는 Branch가 원본인 공용 Repository보다

버전이 뒤쳐져 있는 경우 (소스가 다른 경우),

원본에 내용들을 가지고 나의 공간에 패치하여 최신화 시켜주어야 된다.

이를 upstream이라고 말한다.

 

해당 내용은 github페이지에서도 가능하지만, 

sourceTreegitbash에서도 가능하다. (gitbash 를 이용한 upstream은 아래 글을 참고)

https://developer-alle.tistory.com/319 

 

Fork한 깃허브 소스 동기화 & PR 날리기

Fork한 깃허브 소스 동기화 & PR 날리기 일단 fork한 다음 내 레포로 간다. clone or download 버튼을 통해 주소를 복사한다. git clone [내 레포 주소] 폴더를 만들고자 하는 위치에서 git clone을 해서 로컬 레

developer-alle.tistory.com

 

깃을 연결하고 commit & push 하며 관리하는 방법은 여러가지가 있다.

gitbash 터미널이 익숙하고 명확해서 선호하는 편인데,

비주얼코드, 이클립스, 소스트리 같은 ide가 기능을 잘 지원해주기 때문에

자신에게 편한 방법으로 관리하면 되겠다.