ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] remote: 로컬 저장소와 원격 저장소를 연결하기
    Github/Git 2020. 11. 19. 12:05
    728x90
    반응형

    Github에 있는 원격 저장소를 로컬 PC에 다운을 받고 싶다면 git clone을 사용하면 된다. 

     

     

    그러면 만약 이미 작업을 하고 있는 로컬 저장소가 있고 이를 원격 저장소와 연결하고 싶다면 어떻게 해야할까?

    빈 원격 저장소를 로컬 PC로 clone받고 기존에 작업한 코드 파일들을 다 옮긴 후에 push하는 방법도 있겠지만 상당히 번거로울 것 같다.

    이러한 상황 때 사용하는 명령어가 git remote이다. 바로 어떻게 사용하는지 차근차근 알아보자.

     

    먼저 Github에서 아래와 같이 레포지토리를 하나 만들어보자.

    이번에는 실습을 위해서 위와 같이 Add a README.file을 체크해서 만들었다. (하지만 평상시에 레포지토리를 만들 때는 체크하고 만들지 않는 것을 추천한다. 이유는 아래에서 설명한다)

     

    레포지토리를 만들었을 때, Add a README.file을 체크하지 않고 만들었다면 위와 같은 화면을 볼 수 있다. 자세히 보면 명령어를 통해서 어떻게 연결해야 하는지를 설명해주고 있다.

     

    그러면 바로 위의 명령어를 이용해서 로컬에서 작업 중인 프로젝트를 원격 저장소와 연결을 해보자.

    • git init: 로컬저장소를 만든다.
    • git add, commit: 설명 생략
    git remote add 저장소별칭 https://github.com/사용자이름/원격저장소이름.git
    ex) git remote add origin https://github.com/wjdrbs96/Gyunny_Spring_Study.git
    지금은 '원격 저장소 별칭'을 'origin'이라고 하였다.

     

    그리고 위와 같이 명령어의 순서로 입력을 하면 위와 같은 화면을 볼 수 있고 git remote -v를 했을 때 fetch, push 2개가 나온다면 잘 연결이 된 것이다.

     

     

    git push: 로컬 작업 내역을 원격 저장소에 올리기

    이제 push를 통해 로컬 저장소의 내용을 원격 저장소에 올리면 된다. 방법은 아래와 같다.

    git push 원격저장소별칭 로컬브랜치이름
    ex) git push origin master

     

    하지만 push를 하면 아래와 같이 안되는데 왜 그럴까?

    위에 내용을 보면 push를 하기 전에 pull을 먼저하라는 문구를 볼 수 있다. 그 이유는 아까 레포지토리를 만들 때 Add a README.file를 체크하고 만들었기 때문이다. 

     

     

    그러면 왜 레포지토리를 만들 때 README.md를 만들지 말라고 하는 것일까?

    Git은 원격 저장소에 로컬 저장소의 브랜치와 같은 이름의 브랜치가 있다면 해당 브랜치를 변경하고 없다면 새 브랜치를 원격 저장소에 만든다. 여기서 주의할 점은 같은 이름의 브랜치가 있는데 서로의 내역이 다르다면 push를 거부한다.

     

    즉, commit 이력이 없는 백지상태인 원격 저장소에다 로컬 저장소의 내용을 push해야 하는데 그렇지 못하기 때문에 README.md를 만들지 말라고 했던 것이다.

     

    레포지토리를 만든 후에 Add a README.file을 체크하고 만들었다면 아래와 같은 상황일 것이다.

    현재의 상황을 정리하면 Gihub 원격 레포지토리에서 Create README.md라는 하나의 커밋이 생겼고, 위에서 로컬 저장소를 commit을 했을 때 필자는 initial commit이라는 커밋을 만들었다.

    이러한 상황을 Git Kraken을 이용해서 확인해보면 위와 같은 상황이다. 이 때 Github 원격 저장소의 내용을 로컬 저장소에 최신화 시키면서 병합하는 명령어인 git pull을 사용하는 방법을 생각해볼 수 있다.

     

     

    그러면 여기서 git pull을 하면 원격 저장소와 로컬저장소가 Merge가 될까?

    pull을 했는데 fatal: refusiong to merge unrelated histories라는 것이 뜨면서 제대로 작동하지 않는다.

     

     

    pull 명령어가 작동하지 않는 이유는 무엇일까?

    git에서는 서로 관련 기록이 없는 이질적인 두 프로젝트를 병합할 때 기본적으로 거부하기 때문이다. 따라서 이것을 허용해주기 위해서는 아래의 명령어를 입력해야 한다.

    git pull origin 브랜치면 --allow-unrelated-histories
    ex) git pull origin master --allow-unrelated-histories
    반응형

    댓글

Designed by Tistory.