달나라 노트

Github - remote repository (리모트 저장소) 본문

Github

Github - remote repository (리모트 저장소)

CosmosProject 2021. 5. 10. 20:20
728x90
반응형

 

 

 

Github는 한 사람이 사용할 수도 있지만 사실 여러 사람이 공동작업을 하는 경우가 더 많을겁니다.

 

이런 경우에는 remote repository라는 것을 다룰 수 있어야합니다.

 

 

만약 github remote repository관련 내용이 익숙하지 않다면 현재 내용을 하기 전에 아래 링크를 먼저 참고하면 이해가 더 쉬울겁니다.

cosmosproject.tistory.com/137?category=960243

 

10. 하나의 원격 저장소, 여러 개의 로컬 저장소 (git pull, git push)

하나의 원격 저장소, 여러 개의 로컬 저장소 이번 장에서는 하나의 원격 저장소를 중심으로 두 개 이상의 로컬 저장소가 어떻게 서로 작업 동기화를 하는지를 볼 것입니다. 장기적으론 협업이

cosmosproject.tistory.com

 

이 글에서 설명하기 위한 용어를 우리끼리 정하고 갑시다.

 

 

Remote repository : Github web에 있는 repository

Local repository : 컴퓨터에 저장된 repository

위와 같은 의미로 Remote, Local이라는 용어를 사용하겠습니다.

 

물론 좀 더 정확히 말하자면 Remote 저장소란 Github web에 있는 저장소일 수도 있고, Local 어딘가의 directory에 존재할 수도 있지만 개념 이해를 할 때에는 편의를 위해 위처럼 용어를 정의하고 설명해보려합니다.

 

 

 

 


 

 

 

 

먼저 remote repository를 왜 관리해야하는지에 대해 필요성을 조금이나마 체감해봅시다.

remote repository를 이용하는 경우는 많겠지만 아주 간단한 예시를 들어보겠습니다.

 

하나의 github repository를 대상으로 여러 사람이 코드를 편집해야합니다.

이 과정에서 서로의 편집 결과가 충돌되거나 기타 여러 가지 문제상황이 발생하지 않게 하기 위해 다음과 같은 방법을 사용하려고합니다.

 

Step 1 = Repository_A_main 생성 -> Repository_A_main는 실제 시스템에 반영될 main 코드들이 저장된 github web에 존재하는 저장소입니다.

Step 2 = Repository_A fork -> 사람들을 Repository_A_main를 fork하여 개인 github web으로 가져옵니다.

Step 3 = Repository_A Local -> fork된 Repository_A fork 를 내 컴퓨터의 어떤 디렉토리에 clone해온 것입니다.

 

정리하면 다음과 같습니다.

Repository_A_main (Remote) : Main repository

Repository_A_X (Remote) : X라는 사람이 Repository_A_main 개인 github에 fork하여 복사해온 repository
Repository_A_X (Local) : X라는 사람이 Repository_A_X을 나의 랩탑에 clone해온 repository

Repository_A_Y (Remote) : Y라는 사람이 Repository_A_main 개인 github에 fork하여 복사해온 repository
Repository_A_Y (Local) : Y라는 사람이 Repository_A_Y을 나의 랩탑에 clone해온 repository

 

위 상황에서 X라는 사람이 어떤식으로 작업을 하는지 보면 다음과 같습니다.

1. Repository_A_X (Local)에서 VS code, IntelliJ 등 여러 code 편집기를 가지고 수정을 한 후 commit을 합니다.

2. Repository_A_X (Remote)에 push를 합니다.

3. Repository_A_X (Remote)의 내용을 Repository_A_main (Remote)에 merge하여 X가 수정한 사항을 Repository_A_main (Remote)에 반영시킵니다.

 

 

이건 X 뿐만 아니라 다른 사람도 마찬가지일겁니다.

Y라는 사람도 마찬가지로 본인의 수정사항을 Repository_A_Y (Remote)에 push한 후 이것을 Repository_A_main (Remote)에 합치겠죠.

 

 

 

위와 같은 상황을 이해한 후에 한 가지 문제가 될만한 상황을 보겠습니다.

 

Repository_A_main에는 test_file_x.py라는 파일과, test_file_y.py라는 파일 2개가 있습니다.

test_file_x.py는 X라는 사람이 관리하는 파일이며

test_file_y.py는 Y라는 사람이 관리하는 파일입니다.

 

X는 test_file_x.py라는 이름의 파일을 개인 컴퓨터의 Repository_A_X (Local)에서 수정했습니다.

그리고 Repository_A_X (Remote)에 push를 한 후 Repository_A_main에 merge하여 자신의 수정사항 반영을 완료했습니다.

 

그 후에 Y는 test_file_y.py라는 파일을 수정하고 동일하게 개인 컴퓨터의 Repository_A_Y (Local)에서 수정한 후

Repository_A_Y (Remote)에 push하고, Repository_A_main에 merge를 한다고 합시다.

 

그러면 Y는 본인이 수정하기 전에 미리 X가 수정하여 Repository_A_main에 merge를 해둔 내용을 어떻게 알수있을까요?

만약 Y가 코드를 수정할 때 X가 미리 수정해둔 test_file_x.py의 내용을 참고하여 수정해야한다면,

Y는 어떻게 X가 Repository_A_main에 merge한 수정사항들을 불러올 수 있을까요?

 

위 질문의 답을 생각해보자면

현재 Y가 필요한 것은 Y가 코드를 수정하기 전에 Repository_A_main의 최신 내용을 Y의 Repository로 가져오는 것입니다.

이것을 어떻게 할 수 있는지에 대한 답은 remote repository 관리에 있습니다.

 

 

 


 

 

 

추가적인 설명을 위해 directory는 main과 x, y 모두 github에서 위처럼 clone해놨습니다.

 

 

 

가장 먼저 알아봐야할 것은 git remote라는 명령어입니다.

위처럼 repository_a_x 디렉토리에서 git remote라는 명령어를 입력하면 origin이라는 글자를 출력해줍니다.

 

git remote -v라는 명령어를 입력하면

아래 이미지처럼 origin이라는 이름과 그 옆에 remote 저장소에 해당하는 주소가 보여집니다.

 

git clone 명령어는 repository_a_x라는 github 저장소를 내 컴퓨터에 clone해올 때 자동으로 repository_a_x에 origin이라는 이름을 붙여줍니다.

repository_a_x에 자동으로 origin이라는 remote repository 이름이 붙은것이죠.

 

 

이것은 다른 것들도 마찬가지입니다.

repository_a_main의 remote repository가 origin이라는 이름을 가지는 모습

 

 

그러면 한번 repository_a_xrepository_a_main을 remote repository로 연결해봅시다.

명령어는 git remote add <이름> <github url/ssh> 입니다.

 

입력된 명령어를 보면 다음과 같습니다.

git remote main_repo https://...

 

위 명령어의 의미는 다음과 같습니다.

1. main_repo라는 이름의 remote repository를 추가합니다.

2. 그리고 main_repo는 입력된 주소(https://...)에 해당하는 github와 연결됩니다.

 

repository_a_main의 github clone 주소를 입력하여

repository_a_main을 repository_a_x의 remote repository로 추가했습니다.

그래서 위 이미지에서 git remote -v 명령어의 결과를 보면 origin뿐 아니라 main_repo까지 나오는 것을 볼 수 있죠.

 

 

참고로 여기서 입력하는 주소는  remote repository로 연결할 github의 HTTP 주소 또는 ssh 주소를 의미합니다.

 

 

 

동일하게 repository_a_y에도 repository_a_mainmain_repo라는 이름의 remote repository로 추가해줍시다.

 

 

 

 

 

 

만약에 제 3자인 Z가 repository_a_main에다가 자신의 수정사항을 merge하였습니다.

test_file_x.py을 수정하였다고 가정합시다.

 

그러면 X랑 Y는 이 내역을 자신들의 git repository로 불러와서 최신 상태로 update를 해줘야겠죠.

 

 

이런 경우엔

git pull <remote repository name> <branch> 명령어를 입력하면 됩니다.

 

위 경우에는 git pull main_repo main 처럼 입력하면 되겠네요.

 

위처럼 pull을 진행하면 repository_a_x (local)repository_a_main (remote)의 내용이 pull 됩니다.

그 후 repository_a_x (local)에서 수정을 하고 repository_a_x (remote)에 push를 합니다.

repository_a_x (remote)에 push한 내용을 repository_a_main (remote)에 merge합니다.

 

위같은 흐름이라고 이해하면 됩니다.

 

 

 

 

 

 

728x90
반응형
Comments