본문 바로가기
기타/Git

[Git] remote

by 코딩하는 랄로 2023. 12. 31.
728x90

리모트 저장소란?

개발을 하다보면 다른 개발자들과 협업을 할 일이 많다. 다른 사람과 같이 작업하는 파일을 관리하기 위해서는 자신만 접근할 수 있는 로컬이 아닌 모두가 접근할 수 있는 공간이 필요하다.

 

이러한 공간을 리모트 저장소, 즉 원격 저장소라 부른다. 단어가 생소할 수 있기 때문에, 간단하게 Git으로 관리되는 파일들을 클라우드 시스템을 통해 공유한다고 생각하여도 된다. 대표적으로는 현재 많은 개발자들이 사용하는 Github이 있다.

 

다른 사람과 공유할 수 있기 때문에, 여러 사람이 파일에 접근하여 개인의 컴퓨터에서 작업하고 작업 결과물을 적용시키고 하는 등의 협업이 가능하게 되는 것이다. 

 

협업에 있어서 리모트 저장소는 중요한 부분을 차지하기 때문에, Git은 이를 위한 여러 명렁어를 지원하고 있어 리모트 저장소를 관리할 수 있도록 해준다.

 

 

 

git remote

git remote 명렁어는 현재 프로젝트가 어떤 리모트 저장소의 주소를 가지고 있는지 보여준다. 리모트 저장소의 주소(url)는 꽤 길기 때문에 단축 이름을 지정하여 줄 수 있는데 일반적으로 저장소를 clone 할 시에 origin이라는 단축 이름이 자동으로 등록된다.

 

다음 예제를 살펴보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git
$ git clone https://github.com/YuSangGon/git_practice.git
Cloning into 'git_practice'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

user@DESKTOP-UCJOAKJ MINGW64 /d/git
$ cd git_practice/

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote
origin

 

리모트 저장소를 하나 clone 한 뒤, git remote를 출력하니 origin이라는 리모트 저장소를 확인할 수 있고, 리모트 저장소의 url도 같이 보고 싶다면 다음과 같이 -v 옵션을 주면 된다.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote -v
origin  https://github.com/YuSangGon/git_practice.git (fetch)
origin  https://github.com/YuSangGon/git_practice.git (push)

 

하나의 프로젝트에는 하나의 리모트 저장소만 있을 수 있는 것이 아닌 여러 개의 리모트 저장소를 가질 수 있다. ( 리모트 저장소 추가는 아래에서 다룸 ) 그렇기 때문에 리모트 저장소가 여러개 일 경우에는 모든 리모트 저장소를 보여준다.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote -v
origin  https://github.com/YuSangGon/git_practice.git (fetch)
origin  https://github.com/YuSangGon/git_practice.git (push)
portfolio       https://github.com/YuSangGon/portfolio.git (fetch)
portfolio       https://github.com/YuSangGon/portfolio.git (push)

 

 

 

git remote add

위에서 리모트 저장소는 추가하여 여러개를 가질 수 있다고 하였는데, git remote add는 이를 위한 명렁어이다. 리모트 저장소를 clone 할 시 origin 이라는 이름을 가지는 리모트 저장소가 추가된다 하였는데, add 명렁어의 과정을 거쳐 자동으로 추가되는 것이다.

 

git remote add를 통해 새로운 리모트 저장소를 추가 하기 위해서는 해당 저장소를 지칭한 단축 이름과 해당 저장소의 주소이 url을 추가로 기입하여 주어야 한다.

git remote add [단축 이름] [url]

 

이를 이용하여 새로운 리모트 저장소를 등록해보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote add coding https://github.com/YuSangGon/codingTest.git

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote -v
coding  https://github.com/YuSangGon/codingTest.git (fetch)
coding  https://github.com/YuSangGon/codingTest.git (push)
origin  https://github.com/YuSangGon/git_practice.git (fetch)
origin  https://github.com/YuSangGon/git_practice.git (push)
portfolio       https://github.com/YuSangGon/portfolio.git (fetch)
portfolio       https://github.com/YuSangGon/portfolio.git (push)

 

이렇게 리모트 저장소의 단축 이름을 지정하여 추가하면 url을 사용하지 않고 단축 이름만으로 리모트 저장소를 관리할 수 있다. 이후에 살펴볼 fetch, pull 등에서도 리모트 저장소의 url을 사용하는 것이 아닌 단축 이름을 통해 간편하게 사용한다.

 

 

 

git pull / fetch

git remote add 명렁어는 리모트 저장소의 주소를 저장하는 것 뿐이다. 간단하게 전화번호 목록을 작성을 하는 것이라 생각하면 된다. 만약 내가 홍길동(리모트 저장소)의 생일(데이터)이 궁금하다면 어떻게 해야 할까? 당연히 전화번호 목록에 있는 홍길동의 전화번호로 전화하여 생일을 물어보면 되는 것이다.

 

이렇게 리모트 저장소에서 데이터를 가져오기 위한 명렁어가 바로 git fetch 명렁어이다.

git fetch [리모트 저장소의 단축 이름]

 

해당 명령어를 사용하면, 로컬에는 없지만 리모트 저장소에 있는 모든 데이터를 가져오게 되고, 해당 저장소의 모든 브랜치에 접근하여 언제든지 merge를 하거나 내용을 살펴볼 수 있다. 

 

git fetch 명렁어는 위의 설명에서 알 수 있듯이, 자동으로 merge를 해주지는 않는다. 그렇기 때문에 수동으로 해주어야 하는데 만약 데이터를 가져옴과 동시에 merge까지 자동으로 해주기 위해서는 git pull 명렁어를 사용하면 된다.

git pull [리모트 저장소의 단축 이름] [리모트 저장소의 브랜치(optional)]     => fetch + merge

 

git pull 명렁은 원격 저장소의 브랜치(default main/master)에서 fetch한 데이터를 현재의 working directory에 merge 시킨다.

 

 

 

git push

반대로 로컬에 있는 데이터를 리모트에 보내고(공유하고) 싶을 때는 push 명렁어를 사용한다. git push 명렁어의 사용법 또한 간단하다.

git pulsh [리모트 저장소의 단축 이름] [리모트 저장소의 브랜치]

 

git push의 경우, git pull과의 차이점은 리모트 저장소의 어떤 브랜치로 데이터를 보낼 것인지에 대해 명시하여 주어야 한다. 그렇게 되면, 현재 작업 폴더에 있는 데이터를 해당 저장소의 브랜치로 보낼 수 있게 되는 것이다.

 

추가로, push를 할 때는 주의하여야 할 점이 있는데 해당 명령을 사용하기 위해서는 리모트 저장소에 대해 쓰기 권한이 있어야 하고, 자신이 pull을 한 이후에 다른 사람이 push를 하지 않았을 때만 push를 할 수 있다. 그렇기 때문에, 다른 사람이 push하였을 경우에는 pull ( fetch + merge ) 을 한 후에 push를 해주어야 한다.

 

 

 

git remote show

git remote show 명렁어를 사용하면 해당 리모트 저장소의 구체적인 정보를 확인할 수 있다.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote show origin
* remote origin
  Fetch URL: https://github.com/YuSangGon/git_practice.git
  Push  URL: https://github.com/YuSangGon/git_practice.git
  HEAD branch: main
  Remote branch:
    main tracked
  Local branch configured for 'git pull':
    main merges with remote main
  Local ref configured for 'git push':
    main pushes to main (up to date)

 

리모드 저장소의 url과 현재의 로컬 프로젝트의 브랜치와 추적하고 있는 리모트 브랜치를 보여준다. 또한 현재 git pull 또는 git push를 할 경우, 로컬의 어떤 브랜치와 리모트의 어떤 브랜치가 작업이 되는지에 대한 정보도 출력해준다.

 

 

 

git remote rename/remove

리모트 저장소의 단축이름을 변경하고 싶다면 git remote rename을 사용하여 변경할 수 있다.

git remote rename [origin] [new]

 

직접 변경하여 보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote
coding
origin
portfolio

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote rename portfolio pf

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote
coding
origin
pf

 

 

리모드 저장소를 삭제하고 싶다면 remove 명렁어나 rm 명렁어를 사용하여 삭제할 수 있다.

git remote remove/rm [리모트 이름]

 

해당 명렁어를 사용하여, origin 이외의 리모트는 모두 삭제해 주겠다.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote
coding
origin
pf

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote remove coding

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote
origin
pf

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote rm pf

user@DESKTOP-UCJOAKJ MINGW64 /d/git/git_practice (main)
$ git remote
origin

 

리모트 저장소를 삭제하게 되면 해당 리모트 저장소와 관련된 추적 브랜치 정보와 모든 설정 내용도 같이 삭제된다.

 

 

 

 

 

reference : pro git

728x90

'기타 > Git' 카테고리의 다른 글

[Git] checkout  (1) 2024.01.03
[Git] branch 생성  (1) 2024.01.02
[Git] 되돌리기  (0) 2023.12.27
[Git] log  (1) 2023.12.20
[Git] mv  (0) 2023.12.20