본문 바로가기
코딩해보니/Git

[Git_42] 서버(원격) 저장소 - 전송하기 (git push)

by 위시랜 2023. 3. 29.

서버(원격) 저장소 - 전송하기 (git push)

서버(원격) 저장소 - 전송하기 (git push)

push

서버(원격) 저장소와의 연결을 통한 Git 기반 버전관리 시스템 완성도
서버(원격) 저장소와의 연결을 통한 Git 기반 버전관리 시스템 완성도

위 그림에서도 알 수 있듯이

로컬 저장소의 커밋을 서버 저장소로 전송하는 명령어는 push를 사용합니다.

 

앞서 $ git remote -v 를 통해 등록된 서버 저장소의 정보를 확인하였습니다.

remote -v 명령어로 원격(서버) 저장소 등록 정보 확인
remote -v 명령어로 원격(서버) 저장소 등록 정보 확인

위 결과와 같이 연결된 원격(서버) 저장소 목록을 보면

origin이라는 서버 저장소 이름과 서버 저장소의 URL, 그리고 fetch와 push로 구분되어 확인이 됩니다.

origin https://github.com/shiri0/remoterepo.git (push)와 같이

push가 가능한 서버 저장소가 등록된 것을 확인할 수 있습니다.

 

push 명령은 다음과 같이 사용할 수 있습니다.

# 로컬 저장소의 커밋을 서버 저장소로 전송하기
$ git push <서버 저장소 이름> <브랜치 이름>

<서버 저장소 이름>은 앞서 원격 저장소 정보를 추가할 때 origin이라는 이름으로 등록했습니다.

이 origin과 같은 이름을 얘기합니다.

<브랜치 이름>은 원격(서버) 저장소로 전송할 브랜치 이름입니다.

 

$ git push origin master 라고 실행한다면,

master 브랜치의 커밋 정보를 origin 원격(서버) 저장소로 전송(push) 한다는 의미가 됩니다.

 

그런데, 다른 옵션 없이 $ git push 만 실행할 수 있습니다.

<서버 저장소 이름>과 <브랜치 이름>을 생략하면,

Git은 기본적으로 등록되어 있는 서버 저장소로 현재 작업 중인 브랜치를 전송하게 됩니다.

$ git push 명령으로만 서버로 전송이 가능하기 위해서는

현재 브랜치에 대해 업스트림(upstream)이 지정되어 있어야 합니다.

 

다음은 <서버 저장소 이름>과 <브랜치 이름> 정보 없이 $ git push를 실행한 화면입니다.

실행 결과는 실패가 났고, 실패 이유를 안내하고 있습니다.

$ git push 명령만 실행한 경우의 화면
$ git push 명령만 실행한 경우의 화면

이와 같이 master 브랜치는 업스트림(upstream) 정보가 없기 때문에

어디로 전송해야 할지 Git이 알 수 없기에 설정하라는 메시지가 나오게 되고 전송을 할 수 없습니다.

 

안내 메시지와 같이 git push --set-upstream origin master라고 하면

전송하면서 업스트림 지정까지 하게 되어

이후에 다시 master 브랜치를 전송할 때는 다른 옵션 없이 $ git push 로만 실행할 수 있게 됩니다.

--set-upstream 옵션-u 옵션과 같습니다.

# 업스트림 지정과 함께 로컬 저장소의 커밋을 서버 저장소로 전송하기
$ git push -u <서버 저장소 이름> <브랜치 이름>

# 또는
$ git push --set-upstream <서버 저장소 이름> <브랜치 이름>

 

그럼, 실제 push 명령어를 사용해 master 브랜치를 origin 서버로 전송해 보면 다음과 같습니다.

master 브랜치의 정보를 origin 원격(서버) 저장소로 전송하기
master 브랜치의 정보를 origin 원격(서버) 저장소로 전송하기

정상적으로 실행이 되었고, 실행된 내용을 안내하고 있습니다.

그렇다면 서버(원격) 저장소인 GitHub로 가서 확인해 봅니다.

GitHub에 우리가 준비했던 저장소 remoterepo를 확인해 보면 다음과 같이, 조금 전 전송했던 로컬 저장소의 내용이 적용된 것을 알 수 있습니다.

GitHub의 저장소(remoterepo)의 정보 확인
GitHub의 저장소(remoterepo)의 정보 확인

 

처음 push 하게 되면 서버에 새로운 master 브랜치를 생성하고,

로컬의 master 브랜치에 있던 파일을 서버의 master 브랜치로 업로드되었음을 알 수 있습니다.

 

소스트리(Sourcetree)에서도 확인해 보겠습니다.

소스트리(Sourcetree)에서 커밋 이력 확인
소스트리(Sourcetree)에서 커밋 이력 확인

변화가 생겼음을 알 수 있습니다.

 

는 현재 로컬 저장소의 master 브랜치의 HEAD를 의미합니다.

는 <서버 저장소 이름>/<브랜치 이름>으로 표시되고 있는데, 이것은 서버 저장소 origin의 master 브랜치의 HEAD를 의미합니다.

 

다시 말해 서버(원격) 저장소로 전송한 이후에는

로컬 저장소와 서버 저장소의 HEAD 정보를 구분해서 표시해 주고 있음을 알 수 있습니다.

이 표시로 로컬 저장소와 서버 저장소가 동기화한 시점을 알 수 있습니다.

 

서버(원격) 저장소를 등록하면 서버(원격) 저장소에 대한 커밋 HEAD 정보를 함께 추적하게 됩니다.

로컬 저장소에 등록한 서버(원격) 저장소 정보와 실제 서버(원격) 저장소가 서로 매칭되게 됩니다.

로컬 저장소에서는 서버(원격) 저장소의 정보와 구분을 위해 <서버 저장소 이름>/<브랜치 이름>으로 표시하고 있습니다.

이를 “원격 브랜치”라고 합니다.

 

현재는 로컬 저장소에 origin/master라는 원격 브랜치가 있고, 서버 저장소의 master 브랜치와 매칭되어 있습니다.

그림으로 나타내면 다음과 같다고 할 수 있습니다.

로컬 저장소와 원격 저장소와의 매칭 관계
로컬 저장소와 원격 저장소와의 매칭 관계

로컬 저장소에서 이러한 원격 브랜치 목록을 $ git branch -r 명령으로 확인할 수 있습니다.

이는 다음에 “원격 브랜치”에서 더 상세히 얘기하도록 하겠습니다.

 

다시 터미널에서 $ git remote show origin 명령으로 원격 저장소 origin에 대한 상세 정보를 확인해 봅니다.

서버(원격) 저장소 origin에 대한 상세 정보 확인
서버(원격) 저장소 origin에 대한 상세 정보 확인

최초 origin으로 등록했을 때와 달리 HEAD 브랜치 정보가 생겼고, master 브랜치가 트래킹 되고 있음을 알 수 있습니다.

 

지금까지 로컬 저장소의 정보를 서버(원격) 저장소로 전송(push)하는 방법과 로컬 저장소와 서버 저장소와의 관계를 살펴봤습니다.

다음에는 전송(push)과 관련한 다양한 경우를 사례를 들어 확인해 보고자 합니다.

 

감사합니다.

 

댓글