본문 바로가기

잡다/git

[Git 05] remote

 Git은 로컬 영역에서 버전을 관리하는 시스템이다. 따라서 협업이나 코드의 공유 목적으로 원격(remote) 서버를 이용하는데, 이때 외부 서버의 내용과 내부 Git 시스템을 연결하기 위한 명령어가 remote 이다. 또한 이런 원격 서버 중 가장 잘 알려져 있는 것이 Github이다.

 

 프로그래머들은 외부 서버를 이용하여 동일 코드를 유지하면서 각자의 코드를 작성할 수 있다. 이때 외부 서버를 지칭하기 위해 이름 및 주소가 필요하며, 해당 주소를 통해 다른 프로그래머들은 동일 코드에 접근할 수 있다.

 

저장소 목록 보기

git remote // 단순히 이름만 출력
git remote -v // 이름과 경로 출력

 

저장소 등록

git add <name> <address> // address를 name으로 등록
//origin 등의 이름을 원래 서버의 별칭으로 보통 사용한다

 

저장소 삭제

git remote rm <name>

 

원격 저장소 서버로 전송

git push <repository_name> <branch_name>

 

원격 저장소 복사하기

init + 원격 서버에 접속하기 위한 추가 설정을 자동으로 수행한다. 파일만 받는 것이 아니라 파일에 대한 변경 내역도 저장되므로, 외부 저장소의 코드에 기여하기 위해서는 clone 명령어를 사용해야 한다.

git clone <address>

 

서버에서 내려받기

서버에서 내용을 내려받는 방법은 크게 2가지로, pull과 fetch가 존재한다.

pull은 원격 서버에서 현재 커밋보다 최신 정보가 있을 때 내려받으며, 이를 원격 저장소를 위한 임시 브랜치에 잠시 저장한 후, 최신 커밋들을 현재 브랜치에 대해 자동으로 병합한다.

fetch는 커밋 정보를 임시 브랜치로 내려 받기는 하지만, 이를 자동 병합하지는 않는다. 즉, 가져오기'만' 한다.

git pull //pull로 얻기. 자동 병합

git fetch <url> // fetch로 얻기. 수동 병합과정 필요

 

그렇기 때문에 fetch로 받아온 브랜치를 병합할 필요가 있다. 이때는 merge를 이용한다.

 

git merge <name> //원격저장소 혹은 브랜치 이름

 

 원격 저장소에는 여러 개발자들에 의한 많은 커밋이 존재한다. 이때, 커밋은 동시에 푸시될 수 없으며 순서를 정해 순차적으로 푸시해야 한다. 또한 푸시는 자신의 로컬 저장소가 원격 저장소의 것보다 최신 상태일때만 가능하다. 만약 다른 프로그래머가 내가 푸시하기 이전에 커밋을 하면 나의 로컬 저장소는 상대적으로 최신 상태가 아니게 된다. 따라서 깃은 푸시를 거부한다. 

 최신 상태가 아닐 때 푸시를 거부하는 것은 충돌을 방지하기 위해서이다. 만약 다른 개발자가 동일한 코드에 대해 작업한다면, 해당 코드에는 충돌이 발생할 가능성이 높다. 만약 이런 충돌이 발생한다면, 한명의 개발자를 제외한 사람들은 각각의 코드를 충돌에 대해 수정하여 다시 푸시해야 하는데, 이런 동작은 매우 껄끄럽다. 이런 일을 쉽게 처리하기 위해 깃은 푸시할 때 커밋의 순차적인 기록을 확인하게 된다. 

 충돌을 최대한 줄이기 위해서는 pull을 통해 로컬 저장소를 최신 상태로 유지해야 한다.

'잡다 > git' 카테고리의 다른 글

[Git 07] 서버  (0) 2021.12.27
[Git 06] Alias  (0) 2021.10.31
[Git 04] commit  (0) 2021.10.30
[Git 03] .gitignore 파일  (0) 2021.10.29
[Git 02] 깃 저장소와 파일의 상태  (0) 2021.10.29