일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Google Excel
- 파이썬
- GIT
- django
- list
- math
- SQL
- c#
- gas
- dataframe
- PostgreSQL
- array
- google apps script
- numpy
- hive
- Python
- Mac
- Redshift
- Kotlin
- Github
- string
- Tkinter
- Excel
- matplotlib
- PANDAS
- Apache
- PySpark
- Google Spreadsheet
- Java
- Today
- Total
달나라 노트
Github - remote repository (리모트 저장소) 본문
Github는 한 사람이 사용할 수도 있지만 사실 여러 사람이 공동작업을 하는 경우가 더 많을겁니다.
이런 경우에는 remote repository라는 것을 다룰 수 있어야합니다.
만약 github remote repository관련 내용이 익숙하지 않다면 현재 내용을 하기 전에 아래 링크를 먼저 참고하면 이해가 더 쉬울겁니다.
cosmosproject.tistory.com/137?category=960243
이 글에서 설명하기 위한 용어를 우리끼리 정하고 갑시다.
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_x에 repository_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_main을 main_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합니다.
위같은 흐름이라고 이해하면 됩니다.
'Github' 카테고리의 다른 글
Github - git에서 merge 취소하기 (git merge --abort) (0) | 2021.05.12 |
---|---|
Github - Branch 생성과 branch 목록조회 (0) | 2021.05.11 |
17. git rm --cached -r file_name (github에 올린 파일 제거하기) (0) | 2021.01.15 |
16. gitignore (특정 파일만 git add에서 제외하기) (0) | 2021.01.15 |
15. Branch merge (0) | 2021.01.15 |