이때까지는 내 컴퓨터 안에있는 로컬 저장소를 이용한 버전관리를 하였다.
지금 부터는 다른 사람과 공유 할 수있는 원격저장소를 사용해 버전관리를 하는 방법에 정리하겠다.
원격 저장소는 로컬저장소와 연결되어 로컬에서 작업한 것을 원격으로 올릴 수도 있고 다른 사람이 작업해
원격 저장소에 올린 것을 자신의 로컬로 가져와 작업할 수도 있다.
가장 대표적인 git 원격저장소로는 github이 있다.
● github 레파지토리 생성
원격 저장소를 만들기 위해서는 github에서 레파지토리를 만들어 주면된다.

public은 다른사람이 내 레파지토리를 볼 수 있게 설정하는 것이고 private는 혼자만 보는 것이다.
ADD a README file 에 체크를 안하면 비어있는 레파지토리가 생성되어 로컬 저장소에 새롭게 저장소를 만들어야되고
체크할경우 이미 로컬 저장소에 존재하는 데이터를 가져 와야한다.
● 원격저장소 와 로컬저장소 최초 동기화
원격 저장소를 만들었으면 로컬저장소와 연결을 시켜줘야한다.
최초 동기화 방법을 두개로 나뉘며 위에서 말한 거 처럼 원격저장소에 새로운 로컬 저장소를 연결시키냐
원래 있던 로컬저장소를 연결 시키냐로 나뉜다.
먼저 새로운 로컬저장소를 만드는것에 대해 알아보겠다.
레파지토리 즉 원격조장소를 README 파일을 같이 생성해주고 레파지토리에 들어가보면

위와 같은 화면이 뜨고 초록색 code 부분을 누르면 원격저장소의 주소가 나온다.

그럼 이제 다시 git bash로 돌아가 로컬에 원격저장소와 연결된 저장소를 만들어 보겠다.
저장소를 만들어줄 디렉토리로 이동해준다. (cd 명령어 사용)

원격저장소에 이미 파일을 만들어 주었기에 복제하는 clone 명령어를 사용하여 동기화한다.
명령어는 [git clone 원격주소 만들어질파일이름] 이다.
저장소가 잘 동기화 됐는지 알아보는 방법은 만들어진 디렉토리로 들어가 git remote -v 해줬을 때
fetch와 push의 주소 출력으로 알 수 있다.

비어있는 원격 저장소를 만들어 로컬에있는 저장소를 불러와 동기화 하는 것은 remote명령어를 사용한다.
아까와 달리 레파지토리를 만들떄 README 파일을 함꼐 만들지않고 생성해준다.
그리고 git bash를 통해 원격저장소로 옮겨 줄 디렉토리로 들어가서 [git remote add origin 원격저장소주소]
를 해주면된다.

여기서 orgin은 복사해 올 원격 저장소를 저장할 저장소 이름이다.
● 최초 동기화 후 원격저장소에 커밋 보내기
로컬에서 커밋한 파일들을 원격저장소로 보낼 떄는
[git push 원격이름 로컬브랜치이름] 으로 명령어를 사용한다.

이때 해당 브랜치만 원격저장소에 push 된다.

c5의 master브랜치에서 bugfix브랜치에 c5.1을 commit 해준 상태에서 위 명령어를 입력하면
master 브랜치인 c5까지만 원격저장소로 보낸다.
그리고 bugfix브랜치를 원격저장소에 넣을려면 git push origin bugfix 해주면 된다.
bugfix를 push해준다음(사진 캡처 못함) 로컬저장소에서 bugfix를 master로 merge 해주면 아래처럼 되는데

여기서 orgin/브렌치는 그 브랜치의 현재 원격저장소에서의 위치이다.
즉 이 상태에서 원격 브랜치의 main브랜치에는 아직 c5.1가 commit되어 있지않다.
이를 반영하기 위해선 master를 origin에 push해주면 된다. (git push origin master)
● 최초 동기화 후 원격저장소에서 커밋 가져오기
다른 사람이 로컬에서 push하거나 깃허브 에서 수정을 통해 원격 저장소 내용이 수정할 수 있다.
원격 저장소에 있는 commit을 로컬로 가져오기 위해서는 fetch명령어를 사용한다.
임의로 github에서 new,c 파일을 수정한 후 로컬저장소에서 가져와 보겠다.

git fetch origin을 해주면 원격에 저장소 내용을 로컬로 가져오고 gui로 보면 아래와 같다.

이 처럼 현재 로컬의 master는 update된 내용을 알지 못한다.
적용 시켜주기 위해서는 master에 remotes/origin/master 브랜치를 merge 시켜 줘야한다.


이렇게 원격에서 commit을 가져 올때마다 fetch와 merge를 해주는것 이 번거롭기 때문에
이를 한번에 해주는 pull이라는 명령어가 있다.
git pull = git fetch + git merge

(orgin을 안 써줘도 될떄도 있는 거 같은데 여기선 오류가 난다. bugfix 브랜치의 origin도 로컬에 있어거 그런가?)
이 외에도 git pull 을 사용하는 경우가 있는데 이 전에 나온 git push를 할때 이다.
원격저장소에 수정된 commit을 보내는데 내가 수정 하는 동안 원격 저장소가 수정이 되어
로컬보다 원격이 더 최신 버전일경우 push가 되지않는다.
이럴경우 git pull을 해줘 로컬을 먼저 최신 버전으로 만들어준 후(conflict발생 시 별개로 해결)
다시 push를 해줘야 한다.
● 공동작업
이제 git hub를 쓰는 가장 큰이유인 공동 작업하는 법에 대해 설명 하겠다.
다른 사람의 github에 들어가 다른 사람의 코드를 가져오는 걸 fork한다고 한다.
github내에서 하는 것으로 다른사람의 원격의 레파지터리를 내 레파지터리로 가져오는 것으로
소유자 레파지토리 상단 왼쪽에 포크 버튼을 클릭하면 포크할 수 있다.
그리고 이때까지 정리한 내용들로 파일을 수정한다음 commit 하게 되면 원래 레파지토리 소유자에게
수정 사항을 전달하는 pull request를 할 수 있다.
하는 방법은 수정한 내 레파지토리 메뉴에서 pull requests에 들어가서 new pull request 를 누르면 된다.

그럼 내가 수정한 내용을 확인할 수 있고 creat pull request를 누르고 commit이름 설정을 해주면
레파지토리 원 소유자에게 pull request가 전송된다.
그럼 원 소유자는 코드를 확인하고 merge request를 해서 코드를 적용항 수 있다.
하지만 단순 수정 요청이 아니라 같이 공동의 작업을 위해서는 하나의 원격 저장소를 공유하는것이
훨씬 편리하다.
이 경우엔 colaborator로 지정을 하면 된다.
레파지토리 메뉴에서 settings에 들어가면 colaborators 로 들어가면 colaborator를 추가할 수 있고
추가가 되면 그 레파지토리를 공동의 레파지토리로 사용할 수 있다.
자세한 방법은 다른사람과 같이 해보고 다시 정리하겠다.
'git' 카테고리의 다른 글
| [git] git branch (0) | 2022.07.10 |
|---|---|
| [git] git 기본 개념 및 실습 (0) | 2022.07.05 |