본문 바로가기
The Others

[Git] 깃 기본편(1): 로컬, 원격 저장소 연결하기 (repository, local, remote, origin, upstream)

by JKyun 2023. 1. 10.

개발자라면 Git을 사용해 보지 않은 사람은 있을지언정 들어보지 못한 사람은 없을 것이다. 코딩을 하는 데 있어 매우 편리한 도구 중 하나이기 때문이다.

 

그럼 Git(깃)이란 무엇인가?

 

깃은 버전 관리 도구 중 하나의 소프트웨어인데, 많은 유저로부터 가장 널리 쓰인다.

버전 관리 도구란 파일이나 디렉토리에 과거, 현재 작업내역을 관리하는 도구라고 이해하면 된다. 개발자들은 소스코드를 매번 새로 작성하고 업데이트 하고를 수십번 반복 해야하는 숙명인데, 과거 코드들이 어떻게 변경되어 왔는지 그리고 어떻게 변경할 것인지 등을 관리해주는 아주 유용한 도구이다. 

 

Git의 여러가지 장점이 있지만 대표적으로,

1. 분산 버전 관리이기 때문에 중앙 저장소가 날라가도 원상 복구가 가능하다. 로컬 저장소를 통해 중앙 저장소를 복구할 수 있기 때문이다. 즉, 안정성 측면에서도 장점이 있다고 이해하면 된다.

2. Branching and Merging이라는 개념을 통해 코드를 효율적으로 작업할 수 있다. 하나의 예시로 여러 개발자들이 같은 파일을 동시에 작업하는 병렬 개발이 가능하다고 보면 된다.

3. 속도가 빠르다. 깃의 대부분의 작업이 로컬에서 진행되기에 서버와의 통신이 필요치 않다.

4. 무료이고 오픈 소스이다.

 

그럼, 기본편에서는 용어부터 하나하나씩 짚고 넘어가보자.

 

Repository(저장소)

1/ 내가 직접적으로 작업하고 있는 파일과 디렉토리

2/ 그 작업 내용을 기록하는 정보

이 두가지를 포함한 저장소이다.

 

Repository에 대한 예시를 보기 전에 local repository와 remote repository에 대해 정확히 짚고 넘어갈 필요가 있다.

local repository(=로컬 저장소)는 말 그대로 내 컴퓨터 안에 있는 저장소이며 이 저장소를 작업할 때는 네트워크가 필요하지 않다. 우리가 흔히 쓰는 집 컴퓨터에 인터넷이 안 되더라도 폴더를 만들고 수정하고 지울 수 있는 것과 마찬가지이다.

remote repository(=원격 저장소)는 원격 서버에 있는 저장소라고 보면 된다. 서버에 저장해야 하기에 네트워크가 필요하며 우리가 알고 있는 원격 저장소를 제공하는 서비스로는 github, gitlab이 대표적이다. 

 

예시를 통해 쉽게 이해해보자.

내 로컬 컴퓨터에서 작업을 할 것이니 local repository부터 만들어보자.

 

깃은 .git 이라는 파일에 작업 내용을 기록하며 .git 파일의 위치는 repository의 root directory에 생성이 된다. 

위 예시를 보면 /c/code 밑에 portfolio라는 디렉토리가 있다. 그리고 그 밑에 data라는 디렉토리가 있다고 하자.

=> /c/code/portfolio/data

portfolio라는 디렉토리를 repository로 만들어보자.

사용하고 있는 터미널을 키고 원하는 위치에서 아래 명령어를 입력하면 된다.

git init

 

그러면 portfolio 밑에 .git이라는 파일이 생성된 것을 볼 수 있다.

이제 우리가 data 파일에서 작업하는 내용들은 .git에 기록될 것이다. 그렇기에 .git 파일을 절대 건들면 안 된다.

 

자, local repository를 만들었으니 remote repository도 만들어보자.

나는 기존에 쓰던 gitlab에서 작업해보겠다. (gitlab.com)

repository의 이름을 똑같이 portfolio라고 지정하고 아래 옵션들은 default로 그냥 만들어보자. 

그럼 아래와 같이 portfolio라는 원격저장소가 만들어진 것을 확인할 수 있다.

원격저장소 안에는 README.md 라는 파일 하나로 구성되어 있다.

 

local repository과 remote repository 연결하기

이제 local과 remote repository를 연결할 차례이다.

아래 예시처럼 Clone을 누르고 Clone with HTTPS 란에 있는 주소를 복사하자 (빨간색 네모)

 

다시 터미널로 돌아와서 아래 명령어를 입력하자.

git remote add origin "원격저장소 주소"

git remote add 까지는 직관적으로 이해가 가겠지만, origin은 무엇인지 궁금할 것이다. (아닌가ㅋ;;)

우선은, 아래 정의로 가볍게 이해만 하고 넘어가자.

origin: 내가 저장하고 관리하는 저장소

upstream: 여러명이 관리하는 저장소

즉, 아래 명령어는 remote origin (내가 저장하고 관리하는 원격 저장소)를 local origin에 복제한다는 의미이다.

연결이 되었으니 아래 명령어를 통해 remote repository에 있는 파일을 불러와 local repository에 복제를 해보자.

git pull origin main

그리고 아래 로컬 저장소의 상태를 보면, 원래 없던 README.md 파일이 추가된 것을 확인할 수 있다.

 

local repository를 remote repository 에 업로드 하기

당연히 반대로도 복제할 수 있다. 우선, 간단한 .txt 파일을 로컬에 만들고 이를 원격 저장소에 업로드 해보자.

이제 아래 명령어를 순차적으로 입력하면 된다. 

git add --all
git commit -m "commit에 대한 설명"
git push "원격저장소 이름" "브랜치 이름"

위 명령어들은 다음 글에서 더 자세히 알아볼 것이니 현재로서는 간단하게 이해만 하고 넘어가자.

첫번째 명령어를 통해 로컬에 있는 모든 파일에 대해 업로드 하겠다고 명시하였다.

두번째 명령어를 실행하면 첫번째 명령어를 통해 업로드된 내용들을 하나의 단위로 묶어 원격 저장소로 보내기 바로 직전 단계로 저장한다는 뜻이다. 위에서는 문제가 생겼다. 이건 한번만 해주면 되는 것인데, git 서명 작성이다.

누가 어떤 작업을 하였는지 남기기 위해 자신만의 서명을 남기는 과정이다.

친절하게 에러메세지에 하는 방법이 나와있다.

(별표 표시의 " " 사이에 본인의 정보를 입력하고 터미널에 한줄씩 실행하자)

에러를 해결한 후에 다시 두번째 명령어를 실행하면 된다.

 

위에까지 문제가 없다면 마지막 명령어를 입력하면 된다.

push는 원격 저장소로 업로드 하라는 뜻이다.

origin은 위에서 설명했듯이 원격 저장소의 이름이고 master는 브랜치 이름이다.

브랜치는 추후 다른 글에서 설명을 하는 것으로 하고 위 예시를 보면 파란색으로 (master)가 적힌 것을 볼 수 있다.

즉, 로컬에 있는 master라는 브랜치를 원격 저장소에 업로드 하라는 뜻으로 이해하면 된다.

자, 다시 gitlab의 remote repository로 가서 master 브랜치를 보면 test.txt 파일이 추가된 것을 확인할 수 있다.

 

댓글