본문 바로가기
TIL with Programmers

[TIL] 8/14 로컬 저장소와 원격 저장소 연결하기/연결 끊기, git push, git clone, git pull, 브랜치

by 보먀 2024. 8. 14.
728x90
반응형

깃 / 깃허브 사용하기 

 

1. 로컬 저장소와 원격 저장소 연결하기 - git remote add

 

로컬 저장소 -> 내 컴퓨터 안에 있는 저장소(디렉토리)

원격 저장소 -> 깃허브 레포지토리 (깃허브 안에서 프로젝트 별로 구분해서 관리할 수 있는)

 

 

일단 연결에 앞서 연결할 원격 저장소를 생성해보자.

 

로그인하고 레포지토리 탭에 들어가서 new 버튼을 누르면 아래와 같은 창이 뜬다.

레포지토리 이름을 입력하고 밑에 Public(소스코드 공개)/Private(나만봄) 선택, 그리고 Readme 추가 여부를 선택하고 만들면 된다. 

깃허브 레포지토리 생성 화면

 

 

다 만들고 나서 원격 저장소 URL 을 복사해오자.

 

 

이제 터미널을 키고 원격 저장소와 연결할 디렉토리를 열고 아래의 명령어를 치면된다.

URL 부분에 복사해온 URL 을 붙여넣기 하면 된다. 원격 저장소의 별칭은 맘대로 정하면 되지만, 관습적으로 orgin 을 많이 쓴다. 

git remote add [원격 저장소 별칭] [URL]

연결 전에 remote -v 명령어로 디렉토리에 연결된 원격 저장소를 확인하려고 했을 때는 아무것도 뜨지 않았지만,

연결 후에 remote -v 명령어로 확인했을 때는 방금 연결한 깃허브 레포지토리 주소가 뜨는 것을 확인할 수 있다. 

 

여기서 fetch 와 push 에 대해 간단하게 설명하자면,

fetch 는 서버의 코드를 가지고 올 때 사용하고

push 는 깃허브 원격 저장소에 로컬에 있는 코드를 업로드(백업)할 때 사용한다. 

 

참고로 연결할 로컬 디렉토리는 git init 으로 초기화 시켜놓은 깃 디렉토리여야 한다.

깃 디렉토리가 아닌데 연결하려고 하면 아래와 같은 에러가 뜨니 참고하길 바란다. 

 

 

 

2. 깃허브에 로컬 소스 코드 올려보기 - git push

 

아래의 명령어로 로컬에 있는 소스코드를 원격 저장소에 올릴 수 있다. 

git push [원격 저장소 별칭] [브랜치 이름]

(보통 git push origin main 을 하면 된다. 다르게 설정한 경우는 그에 맞게..)

 

만약 에러가 난다면, 올바른 브랜치에 푸쉬했는지 확인해보면 된다. 로컬 디렉토리의 브랜치와 원격 저장소의 브랜치가 같아야 한다. 

로컬 디렉토리 브랜치: main
원격 저장소 브랜치: main

 

※ 참고 - main ? master ?

main/master 에 관한 에러가 많은 거 같아서 궁금해서 찾아보았다. 

 

원래 깃에서는 전통적으로 기본 브랜치 이름을 'master' 라고 사용해왔다고 한다. 그래서 프로젝트를 처음 생성할 때 자동으로 생성되는 기본 브랜치가 'master' 였다고 한다. 

 

근데 2020년 중반부터 깃에서 기본 브랜치 이름을 'master' -> 'main' 으로 변경하는 방향으로 움직이기 시작했다. 그래서 현재 새로 생성된 깃 레포지토리 기본 브랜치는 'main' 으로 설정되어 있다! 

(필요한 경우가 아니라면 기본 브랜치 이름은 main 으로 하는게 편할 듯 하다)

 

 

 

3. 깃허브에서 소스 코드 받아오기 - git clone

 

git clone [원격 저장소 URL]

 

원격 저장소 URL 은 초록색 Code 버튼을 누르면 창이 뜨는데, 그 창에서 URL 을 복사해 오면 된다.

 

 

git clone 을 실행하고 나면, 레포지토리가 그대로 클론되어 들어온 것을 확인할 수 있다. 

 

 

클론은 원격 저장소에서 소스코드 가져오기 + 원격 저장소와 로컬 저장소를 자동으로 연결해주는 작업이다. 때문에 클론을 하고 클론해온 디렉토리를 확인해보면, 원격 저장소가 연결되어있는 것을 확인할 수 있다. 덤으로 클론해온 소스 코드 디렉토리는 이미 깃으로 초기화 되어 있다. 생각해보면 당연한데, 원격 저장소에 올리기 전에 원래 로컬 저장소에서 깃으로 초기화한 후, 푸쉬해서 원격 저장소에 업로드했기 때문이다. 

 

 

4. 원격 저장소 연결 끊기 - git remote remove

 

지금은 내 로컬과 연결된 깃허브 레포지토리에서 클론해왔기 때문에 다시 push 를 해도 권한에 문제가 없지만, push 가 안되는 경우가 있다.

다른 사람의 깃허브에서 소스코드를 클론해오는 경우, 클론해온 소스코드는 클론해온 깃허브 계정주의 깃허브 레포지토리와 연결되어 있다. 이 상태에서 내가 다시 push 를 하려하면, 그 계정의 레포지토리에 대한 push 권한을 가지고 있지 않아서 권한 문제로 push 에 실패한다. (이때 push 를 하면 내 깃허브가 아니라 다른 사람의 깃허브 레포지토리에 push 하는 것임..)

이때는 아래의 명령어를 사용해 원격 저장소 연결을 끊고 다시 내 깃허브 레포지토리 URL 로 다시 연결해주면 된다!

 

git remote remove [원격 저장소 별칭]

(ex) git remote remove origin)

 

 

 

5. 소스코드의 최신 변경 사항 받아오기(반영하기) -> git pull

 

git pull [원격 저장소 별칭] [브랜치 이름]

(ex) git pull origin main)

 

원격 저장소에서 로컬로 코드를 받아왔는데, 그 사이 원격 저장소에 있는 코드에 변화가 생겼다고 해보자. 

이때 원격 저장소 코드에 생긴 최신 변경 사항을 내 로컬 코드에 반영하고 싶다면, git pull 을 사용하면 된다. 

 

git pull 은 사실 git fetch 와 git merge 를 연속으로 실행한 것과 같다. 

  • git fetch -> 원격 저장소에서 최신 커밋을 로컬 저장소로 가져옴
  • git merge -> 가져온 변경 사항을 현재 작업 중인 로컬 브랜치에 병합

-> 즉, git pull 은 연결되어 있는 원격 저장소에서 최신 변경 사항을 받아오고 + 최신 변경 사항을 로컬 브랜치에 합치는 작업을 수행한다.

 

 

브랜치 branch

 

깃과 깃허브의 장점은 중앙집중식과 다르게 파일 단위가 아니라 프로젝트 단위로 깃허브에 올리고 가져오고 한다는 것

-> 브랜치도 마찬가지로 프로젝트들을 "통채로 복사"해서 쓴다는 것

 

브랜치는 어떤 시점의 코드를 가져와서 병렬적으로 작업을 진행할 수 있도록 한다. 

 

예를 들어 기능A와 기능B를 개발해야 한다고 했을 때, 

기능A브랜치, 기능B브랜치를 각각 만들어서 각 브랜치에서 기능 개발을 하고, 다시 main 브랜치에서 합치는 방식으로 개발이 진행된다고 생각하면 된다. 

 

 

브랜치 명령어

 

git branch

브랜치 목록을 볼 수 있는 명령어

 

현재 브랜치는 main 브랜치 밖에 없고, * 가 붙은 것은 현재 위치하고 있는 브랜치를 표시하고 있는 것이다. 

 

git branch [브랜치 이름]

새로운 브랜치를 만드는 명령어

 

dev 라는 새로운 브랜치를 만들고 git branch 명령어로 브랜치 목록을 보면,

main 브랜치 위에 dev 브랜치가 생겨난 것을 확인할 수 있다. 

 

git checkout [옮겨갈 브랜치 이름]

브랜치를 옮기는 명령어

 

git checkout 명령어로 브랜치를 옮기면, 브랜치가 스위치 됐다는 문구가 뜬다. 

커맨드 라인을 보면 브랜치가 main -> dev 로 바뀐 것을 확인할 수 있고, git branch 명령어로도 확인해보면 * 가 dev 브랜치 앞에 있는 것을 확인할 수 있다. 

 

git checkout -

옮겨오기 직전에 있던 브랜치로 옮기는 명령어

728x90
반응형