[Git] 5장 서버

참조

서버 저장소

  • 서버 저장소는 다른 말로 원격(remote) 저장소라고도 합니다.
  • 서버 저장소는 로컬 저장소의 코드를 복제한 복사본이라고 할 수 있습니다.
  • 서버를 이용하면 코드를 안전하게 보관할 수 있습니다.
  • 또 서버에 있는 소스 코드는 다른 사람들과 공유하고 협업하여 개발을 진행할 수도 있습니다.

협업 저장소

  • 깃은 여러 개발자와 협업하려고 탄생한 도구입니다.
  • 과거와 달리 요즘 컴퓨터는 항상 인터넷에 접속되어 있습니다.
  • 하지만 아직도 365일 24시간 인터넷에 연결하여 작업할 수 없는 개발 환경도 많이 있습니다.
  • 깃은 이 두 가지 환경을 고려하여 분산형 모델 을 선택했습니다.

연속된 작업

  • 원격 저장소가 있다면 언제 어디에서든지 개발을 이어서 할 수 있습니다.
  • 사무실에서 개발 중인 코드를 서버에 저장하고, 집에 와서는 사무실에서 작업하고 서버에 올린 코드를 자신의 컴퓨터에 동기화 할 수 있습니다.
  • 이처럼 사무실, 집, 다른 여러 컴퓨터에 코드를 동기화하고 연속된 작업을 이어 갈 수 있습니다.
  • 깃은 분산된 저장소 여러 개를 하나로 통합하고, 최신 코드를 배포할 수 있습니다.
  • 서버 저장소는 여러 컴퓨터에 동일한 깃 저장소를 복제하고, 작업한 결과물을 다시 서버로 통합합니다.

새 멤버

  • 깃의 분산형 관리 체계는 다수의 사람과 협업하는 데 매력적입니다.
  • 기존 프로젝트에 새로운 멤버가 참여할 때, 지금까지 작업한 소스 코드의 마지막 버전을 공유해야 합니다.
  • 기존에는 코드를 공유하려고 이메일, 외부 저장 장치 등을 이용했지만, 이제는 깃의 원격 저장소 주소만 알려 주면 모두 해결됩니다.
  • 원격 저장소로 모든 구성원에게 코드의 최종 결과물을 동기화합니다.

깃허브 서버 준비

  • 독립적인 깃 서버를 직접 운영하여 사용할 수 있습니다.
  • 직접 서버를 운영하지 않아도 전문적인 깃 호스팅으로 서버를 대체할 수 있습니다.
  • 호스팅을 받으면 직접 서버를 관리하지 않아도 쉽게 원격 저장소를 운영할 수 있습니다.

깃허브

  • 깃은 잘 모르지만 깃허브 는 한 번쯤 들어 보았을 것입니다.
  • 깃허브는 대표적인 깃 호스팅 서비스입니다.
  • 깃허브의 모든 서비스는 무료로 사용할 수 있습니다.

로컬 저장소

  • GitLab에서 생성한 새 저장소

프로토콜

  • 서버와 통신하려면 프로토콜을 사용해야 합니다.
  • 깃은 서버와 통신할 수 있는 다양한 프로토콜을 지원합니다.
  • 깃은 기본적으로 Local, HTTP, SSh, Git 네 종류의 전송 방식을 지원합니다.

Local(로컬)

  • 로컬 컴퓨터에 원격 저장소를 생성하는 것을 의미합니다.
  • 이 방식은 자신의 컴퓨터를 NFS(Network File System) 등 서버로 이용할 때 편리합니다.
  • 로컬 저장소를 서버로 이용할 때는 폴더 경로만 입력하면 됩니다.
  • 로컬은 간단하게 원격 서버로 구축할 수 있을 뿐만 아니라 빠른 동작이 가능합니다.
  • 하지만 모든 자료가 자신의 컴퓨터에 집중되는 위험도 있습니다.
$ git remote add 원격저장소별칭 폴더 경로

HTTP

  • 깃은 HTTP 방식의 프로토콜을 지원합니다.
  • HTTP는 SSH처럼 많이 사용하는 프로토콜 중 하나입니다.
  • 깃허브, 비트버킷, 같은 호스팅 서비스도 기본 HTTP 프로토콜을 지원합니다.
  • 서버에 접속하려면 로그인 절차를 거쳐야 합니다.
  • HTTP 는 기존 아이디와 비밀번호만으로 접속자를 인증하여 처리할 수 있습니다.
  • HTTP는 익명으로도 처리할 수 있으며, 계정을 이용하여 처리할 수도 있습니다.

원격 저장소의 리모트 목록 관리

  • 깃은 원격 저장소(서버)를 관리하는데 remote 명령어 를 사용합니다.
  • remote 명령어를 사용하면 현재 연결된 원격 저장소 목록을 확인할 수 있습니다.
  • 동시에 등록과 취소 등 작업을 할 수 있습니다.
  • remote 명령어를 독립적으로 사용하면 연결된 원격 저장소의 이름(별칭)을 출력합니다.
  • 깃은 복수의 원격 저장소를 연결하여 사용할 수 있습니다.
  • 원격 저장소가 여러 개 있을 때는 목록을 모두 출력합니다. 하지만 저장소의 권한 정보까지는 알 수 없습니다.
$ git remote

주소와 별칭

  • 로컬 저장소에 원격 저장소(서버) 를 등록하려면 서버 주소 가 필요합니다.
  • 깃허브 같은 저장소를 이용해 보면 프로토콜 + 도메인 주소 형태로 된 것을 알 수 있습니다.
  • 로컬에 서버 저장소를 생성할 때는 폴더 경로를 사용할 수 있습니다.

별칭

  • 원격 서버의 주소는 긴 문자열로 되어 있습니다.
  • 매번 원격 서버에서 작업할 때마다 긴 문자열을 입력하는 것은 피곤합니다.
  • 간략하게 긴 서버 URL 문자열을 별칭으로 만들어 사용할 수 있습니다.

origin

  • origin은 대표적으로 사용하는 별칭입니다.
  • 기본적으로 원격 서버와 연결할 때 별칭으로 origin 을 사용하는 것을 많이 볼 수 있습니다.
  • 하지만 자신의 목적에 따라 다른 이름을 사용해도 괜찮습니다.

원격 저장소에 연결

  • 원격 저장소와 연결하려면 add 옵션 을 사용합니다.
  • 원격 저장소가 연결되면 fetch와 push 두 주소를 출력합니다.
  • push(푸시) 는 서버로 전송하는 동작을 의미하고, fecth(페치)는 반대로 서버에서 오는 동작을 의미합니다.
$ git remote add 원격저장소별칭 원격저장소 URL

소스트리에서 원격 브랜치

  • 원격 저장소를 등록하면 기존 master 브랜치와 달리 또 하나의 브랜치가 표시됩니다.
  • master 는 현재 로컬 저장소를 의미합니다.
  • origin/master 같은 별칭/브랜치 는 원격 저장소의 브랜치를 의미합니다.
  • 즉, 로컬 저장소와 서버 저장소를 구분하여 표시합니다. 이것으로 서로 동기화한 시점을 파악할 수 있습니다.

별칭 이름 변경과 정보

  • 별칭은 긴 문자열의 서버 주소를 대체합니다.
  • 등록된 서버의 별칭 이름은 다시 변경할 수 있습니다. rename 옵션을 같이 사용합니다.
$ git remote rename 변경전 변경후
  • remote 명령어는 간략한 원격 저장소 정보만 출력합니다.
  • 원격 저장소의 좀 더 상세한 정보를 확인하고 싶다면 show 옵션을 같이 사용합니다.
$ git remote show 원격저장소별칭

원격 서버 삭제

  • 로컬 저장소는 복수의 원격 저장소와 연결할 수 있습니다.
  • 깃을 사용하다 보면 풀 리퀘스트(pull request), 테스트 등 목적으로 임시 등록된 원격 저장소들도 있습니다.
  • 등록된 원격 저장소는 rm 옵션으로 삭제할 수 있습니다.
$ git remote rm 원격저장소별칭

서버 전송

  • 로컬 저장소의 커밋을 원격 저장소로 전송하는 방법을 알아보았습니다.
  • 원격 저장소가 연결되면 로콜 저장소의 커밋들을 업로드 할 수 있습니다.

push: 서버에 전송

  • 푸시(push) 는 원격 저장소로 커밋된 파일들을 업로드하는 동작입니다.
  • 원격 저장소와 연결된 서버 목록을 확인해 봅니다.
$ git push 원격저장소별칭 브랜치 이름

clonde : 복제

  • 복제는 기존 저장소를 이용하여 새로운 저장소를 생성하는 방법 중 하나입니다.
  • 하지만 일반적인 복제와 원격 저장소를 복제하는 방법은 조금 차이가 있습니다.
  • 복제할 때는 clone 명령어 를 사용합니다.
  • clone 명령어는 초기화 init 명령어 외에 원격 서버 접속에 필요한 추가 설정을 자동으로 수행합니다.
  • 서버의 연결 설정을 마친 후 서버 안에 있는 모든 커밋된 코드 이력들을 한번에 내려 받습니다.
$ cm 메인폴더
$ makdir gitstudy05_clone ----- 복제할 새 폴더 만들기
$ cd gitstudy05_clone/

pull: 서버에서 내려받기

  • 복제는 원격 저장소에서 모든 내용을 한 번에 내려받습니다.
  • 복제 후 원격 저장소의 갱신된 내용을 추가로 내려받으려면 pull 명령어를 사용해야 합니다.
  • pull 명령어는 로컬 저장소보다 최신인 갱신된 원격 저장소의 커밋 정보를 현재 로컬 저장소로 내려받습니다.
  • pull 명령어를 주기적으로 사용하면 최신 커밋 정보로 로컬 저장소를 유지할 수 있습니다.
$ git pull

수동으로 내려받기

  • 원격 저장소 내용을 내려받는 방법은 크게 두 가지입니다.
  • pull(풀)과 fecth(페치) 입니다.
  • 이 두 방법의 차이는 병합을 자동 처리하는지 여부입니다.

자동 병합

  • pull은 원격 서버에서 현재 커밋보다 더 최신 커밋 정보가 있을 때 내려받습니다.
  • 내려받은 커밋 정보는 임시 영역에 저장합니다.
  • 스테이지 영역이 아닌 원격 저장소를 위한 전용 임시 브랜치가 따로 있습니다.
  • 내려받은 최신 커밋들을 현재 브랜치로 자동으로 병합처리 합니다.
  • 여기서 병합은 원격 서버 파일과 로컬 파일을 하나로 합치는 과정입니다.
  • 혼자서 개발하는 프로젝트는 pull 명령어만으로도 편리하게 사용할 수 있습니다.
  • 하지만, 여러 개발자와 협업으로 코드를 작성할 때 pull 명령어를 사용한 자동 병합은 가끔씩 문제가 생깁니다.
  • 여러 개발자와 협업하는 과정에서 pull 명령어가 자동으로 브랜치 병합을 하지 못하고 충돌이 발생하기도 합니다.
  • 이처럼 pull 명령어로 자동 병합을 하지 못할 때는 페치(fetch) 방식 을 사용해야 합니다.

fecth: 가져오기

  • fecth(페치) 는 원격 저장소에서 코드를 수동으로 내려받는 작업을 합니다.
  • 페치는 원격 저장소에서 커밋된 코드를 임시 브랜치로 내려받습니다. 내려받은 후 현재 브랜치와 자동 병합하지 않습니다.
$ git fetch 원격저장소URL

merge 명령어로 수동 병합

  • 페치는 데이터를 내려받기만 할 뿐 자동 병합하지 않습니다.
  • 내려받은 커밋을 로컬 저장소에 적용하려면 병합 명령을 실행해야 하는데, merge 명령어를 사용합니다.
$ git merge 원격저장소별칭/브랜치이름

순서

  • 원격 저장소에는 다수의 개발자가 동시에 커밋을 푸시할 수 없습니다.
  • 여러 명이 협력해서 개발할 때는 순차적으로 푸시해야 합니다.

최신 상태

  • 원격 저장소에 푸시하려면 자신의 로컬 저장소를 최신상태 로 유지해야 합니다.
  • 즉, 자신의 저장소가 원격 저장소의 커밋보다 최신이어야 한다는 의미입니다.
  • 최신 이라는 의미를 좀 더 구체적으로 알아봅니다.
  • 누군가 내 저장소보다 먼저 커밋하여 새로운 커밋으로 서버를 갱신했습니다.
  • 하지만 나는 간발의 차이로 갱신된 서버 정보를 가지고 있지 않습니다.
  • 푸시는 서버의 마지막 커밋과 푸시되는 커밋을 병합니다. 이때 내 커밋은 서버의 최신 커밋보다 늦은 커밋으로 밀리게 됩니다.
  • 커밋이 순차적이지 않을 때 깃은 푸시 동작을 거부합니다.
  • 푸시 동작이 거부되면 풀 또는 페치 작업으로 자신의 로컬 저장소를 갱신해 주어야 합니다.
  • 갱신 후에 다시 push(푸시) 합니다.

충돌 방지

  • 깃이 최신 상태 에서만 푸시를 허용하는 것은 충돌을 방지하기 위해서입니다.
  • 원격 저장소의 커밋을 내려받는 풀 작업은 내려받은 커밋들을 현재 브랜치로 자동 병합합니다.
  • 이때 커밋 내용이 순차적이지 않으면 병합 과정에서 충돌이 발생합니다.
  • 개발자 1과 개발자 2가 서로 다른 작업을 했다면 충돌이 없을 수도 있지만, 같은 영역을 동시에 수정했다면 개발자 2가 풀 작업을 할 때 무조건 충동 이 발생합니다.
  • Push 명령어를 사용할 때는 충돌을 최소화하기 위해 미리 원격 저장소를 확인합니다.
  • 새로운 커밋 갱신이 없는지 pull 명령어를 사용하여 지속적으로 확인하는 것이 좋습니다.
  • 최대한 충돌을 피할 수 있는 방법은 자신의 저장소와 원격 저장소의 상태를 자주 최신으로 유지하는 것입니다.
  • pull -> coding -> commit -> pull -> push 순으로 작업하는걸 습관화 해야 합니다.

정리

  • 깃은 코드 이력을 관리해 줄 뿐만 아니라 다른 개발자와 협업 도구로도 많이 사용됩니다.
  • 다른 개발자와 협업하려면 공유 매개체의 역할을 수행할 서버가 필요합니다.
  • 깃은 다양한 종류의 서버를 지원합니다.
  • 깃 서버를 직접 만들 수도 있고, 인기 있는 깃 호스팅 서비스를 이용할 수도 있습니다.
  • 깃은 서버 역할을 수행하는 원격 저장소와 커밋 정보들을 주고 받습니다.
  • 로컬 컴퓨터는 원격 저장소에 커밋 코드를 전송하거나 추가된 커밋들을 내려받을 수 있습니다.
  • 이러한 원격 저장소 기능은 좀 더 많은 사람이 깃을 사용하게 하는 촉매제가 되었습니다.
728x90

'버전관리' 카테고리의 다른 글

[Git] 7장 임시 처리  (0) 2022.06.20
[Git] 6장 브랜치  (0) 2022.06.19
[Git] 4장 커밋  (0) 2022.06.18
[Git] 3장 깃 개념 잡기  (0) 2022.06.18
[Git] 2장 깃과 소스트리 설치 및 환경 설정  (0) 2022.06.18

이 글을 공유하기

댓글

Designed by JB FACTORY