Git

유제승·2022년 9월 30일
1
post-thumbnail

01. 서버 저장소 (= 원격 저장소[Remote Reprository])

로컬 저장소의 코드를 복제한 복사본입니다. 서버를 사용하면 코드를 안전하게 보관 할 수 있고, 서버에 있는 소스 코드를 다른 사람들과 공유하고 협업 할 수 있습니다.

  • 깃의 특징
  1. 협업 저장소 : 여러 개발자와 협업하려고 탄생한 도구로써 인터넷에 항상 접속되어 있거나 인터넷에 연결 할 수 없는 개발환경에 고려하여 분산형 모델 형태로 만들어져 있습니다.

  2. 연속된 작업 : 사무실에서 작업하고 서버에 올린 코드를 자신의 컴퓨터에 동기화 할 수 있습니다. 즉, 사무실, 집, 다른 여러 컴퓨터에 코드를 동기화하고 연속된 작업을 이어 갈 수 있습니다. 서버 저장소는 여러 컴퓨터에 동일한 깃 저장소를 복제하고, 작업한 결과물을 다시 서버로 통합합니다.

  3. 새 맴버 : 기존에는 코드 공유 방식은 이메일 및 외부 저장 장치 였으나, 이제는 깃의 원격 저장소 주소만 알려줌으로써 모든 구성원에게 코드의 최종 결과물을 동기화 합니다.

02. 깃허브 서버 준비

깃허브[Github] (=깃호스팅 서비스)

  1. 깃허브 회원가입
    깃허브 사이트 (https://github.com)

    1.1) 회원 가입을 하려면 이메일 주소가 필요합니다.

    1.2) 일반적으로 개별 깃허브 주소는 다음과 같습니다.

    ++ ex)https://github.com/사용자이름

    1.3) 회원가입시 입력했던 이메일에서 [GitHub] please verify your email address.로 표시된 이메일을 클릭 후 이메일 안에 있는 Verify email address를 클릭합니다.

    1.4) 저장소 생성
    새로운 저장소 생성: 대시보드에서 New 버틀을 클릭하거나 + > New Repository를 선택합니다.

    1.5) 새 저장소 생성 화면으로 전환하고 저장소를 생성할 소유자(owner)를 선택합니다.

    1.6) Pepository name에 저장소 이름을 입력합니다.

    1.7) 생성 된 URL 주소를 확인 합니다. https://github.com/소유자/저장소
    ++ 단, 한 소유자 안에서 같은 저장소 이름은 중복하여 생성할 수 없습니다.

03. 깃허브 연동 및 원격 등록

(= 로컬 저장소 [Local Reprository] use Github )


원격 저장소에 연결하려면 먼저 로컬 저장소가 있어야한다.

새로운 로컬 저장소를 생성하고 원격 저장소를 연결하는 방법

1. 새로운 로컬 저장소를 생성하고 초기화

$ mkdir gitstudy05 //새폴더 만들기
$ cd gitstudy05
$ git init //정장소를 깃으로 초기화
2. 저장소 소개 페이지 파일 생성 
    
$ echo "# gitstudy05" >> README.md //파일 생성
3. README.md 파일을 추적 등록하고 커밋

$ git add README.md
$ git commit -m '(commit messege)'

■ 프로토콜

프로토콜이란 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙체계이다. 깃은 서버와 통신할 수 있는 Local, HTTP, SSH, Git 총 4종류의 프로토콜을 지원한다.


  • Local(로컬)

    • 로컬 컴퓨터에 원격 저장소를 생성하는 것을 의미

    • 해당 방식은 자신의 컴퓨터를 NFC(Network File System) 등의 서버로 이동할 때 편리

      ** 로컬 저장소를 서버로 이용할 때는 폴더 경로만 입력
      
      $ git remote add (원격저장소 별칭 폴더 경로)
  • HTTP

    • 기존 아이디와 비밀번호만으로 접속자를 인증하여 처리 가능.

    • 익명으로도 처리가 가능하며 계정을 이용하여 처리할 수 있다.

  • SSH

    • 깃에서 권장하는 프로토콜

      • HTTP와는 달리 익명으로 접속이 불가능하다는 장점
    • 계정을 생략하여 현재 로그인된 사용자로 대체 할 수 있다.

    • SSH 프로토콜을 이용하려면 주소 앞에 'ssh://계정@주소'와 같은 프로토콜 타입을 지정

    • 인증서를 만들어서 사용하는 프로토콜이므로 별도의 회원 로그인 절차를 거치지 않는다.

      • 인증서는 공개키와 개인키로 구분하는데 공개키는 서버에 등록하며, 개인키는 로컬에 저장
  • Git

    • 데몬 서비스를 위한 전용 프로토콜 방식

      • SSH와 비슷해 보이나 취약하다는 단점이 있다.

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

깃은 원격 저장소(서버)를 관리하는 데 remote 명령어를 사용한다. remote 명령어를 사용함으로써 현재 연결된 원격 저장소 목록을 확인 할 수 있으며 동시에 등록과 취소 등의 작업도 할 수 있다.

1. remote 명령어를 독립적으로 사용시 연결된 원격저장소의 이름(별칭)을 출력

$ git remote
2. -v 옵션을 사용하면 원격 저장소의 별칭 이름과 URL을 확인 할 수 있다.

$ git remote -v

■ 주소와 별칭

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

  • 별칭 : 긴 서버 URL 문자열을 별칭으로 만들어 사용할 수 있다.
  • origin : 대표적으로 사용하는 별칭

■ 원격 저장소에 연결

1. 원격 저장소와 연결하려면 add옵션을 사용합니다.

$ git remote add (원격저장소별칭) (원격저장소 URL)


2. 원격 저장소가 연결되면 fetch[서버에서 가지고오기]와 push[서버로 전송] 두 주소를 출력한다.

■ 소스트리에서 원격 브랜치

원격 저장소를 등록하면 아래 이미지와 같이 기존 master(현재 로컬 저장소) 브랜치와는 달리 또 하나의 브랜치가 표시된다.


■ 별칭 이름 변경과 정보

등록된 서버의 별칭 이름은 다시 변경할 수 있다.

1. remote 명령어로 별칭 이름 변경

$ git remote rename (변경전) (변경후)

2. 상세한 원격 저장소의 정보를 확인

$ git remote show (원격저장소별칭)

■ 원격 서버 삭제

로컬 저장소는 여러 개의 원격 저장소와 연결이 가능하다. 깃을 사용하다 보면 Pull Request[풀 리퀘스트] 테스트 등 목적으로 임시 등록된 원격 저장소들도 있다.

1. 원격 저장소 삭제

$ git remote rm (원격저장소별칭)

04. 서버 전송

(= 로컬 저장소의 커밋을 원격 저장소로 저장 [Push])


■ push란?

  • 원격 저장소로 커밋된 파일들을 업로드하는 동작입니다.

  • 로컬 저장소 -> 원경저장소로 가는 동작을 push동작이라고 합니다.

  • 원격 저장소로 로컬 깃 저장소의 내용을 전송할 때는 push 명령어를 사용합니다.

■ push 명령어

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

■ push명령어를 사용한 예시

  • push 명령어를 사용하여 현재 master 브랜치를 origin 서버로 전송하는 예시
     $ git push origin master -- 원격 서버로 전송

원격 저장소를 사용하면 좋은 점

  • 자신의 로컬 저장소를 백업하는 용도로 원격 저장소를 사용할 수 있습니다.
    꼭 다른 사람들과 협엽하려고 깃의 원격 저장소를 사용하는 것은 아니기 때문에, 혼자 개발할 때도 백업을 위해 원격 저장소를 같이 사용하면 좋습니다.

05. 자동으로 내려받기

(= 복제 [Clone], 원격 저장소의 최신 커밋 내용 내려받기 [Pull])


05-1 Clone: 복제

복제란 기존 저장소를 이용하여 새로운 저장소를 생성하는 방법 중 하나입니다. 하지만 일반적인 복제와 원격 저장소를 복제하는 방법은 조금 차이가 있습니다.

  1. 원격 저장소에서 다른 이름의 로컬 저장소로 복제하기
    ex) git clone 복사할 저장소 주소

    ```bash
    $ cd 메인폴더
    $ mkdir gitstudy05_clone    복제할 새 폴더 만들기
    $ cd gitstudy05_clone/      clone 해올 폴더로 이동
    $ cd git clone 저장소 주소     clone 하기
    $ ls -all                   목록확인
    ```
  2. remote 명령어를 사용하여 원격 저장소 정보 확인

    $ git remote -v             원격 저장소 목록
    origin https://github.com/사용자 아이디/저장소 이름(fetch)
    origin https://github.com/사용자 아이디/저장소 이름(push)

    -> 원격 저장소와 로컬 저장소 연결

05-2. Pull : 서버에서 내려받기

복제 후 원격 저장소의 갱신된 내용을 추가로 내려받기. pull을 주기적으로 사용하면 최신 커밋 정보로 로컬 저장소를 유지할 수 있습니다.

$ git pull
  1. 실습을 위해 원본 로컬 저장소로 이동
    $ cd ../gitstudy05              원본 폴더로 이동
  2. 작성한 파일 커밋하기
    $ git add 파일명
    $ git commit -m ['커밋 코멘트']
  3. 커밋한 내용을 원격 저장소(서버)로 업로드
    $ git push origin master        푸시,원격 서버로 전송
  4. 커밋 로그 확인
    $ cd ../gitstudy05_clone        복제 저장소 이동
    $ git log                       로그 확인
    commit [커밋명] (HEAD->master, origin/master,origin/HEAD)
    first commit
  5. 원격 저장소에서 갱신된 새 커밋 정보를 가지고 오기
    $ git pull
    : pull 명령어는 원격 저장소에 갱신된 커밋을 로컬 저장소의 커밋 정보와 비교하여 갱신합니다.

06. 수동으로 내려받기

(= 임시 브랜치로 내려 받기 [Fetch], 병합 [Merge])

: 원격 저장소의 내용을 내려받는 방법은 크게 두 가지 [pull],[fetch] 입니다. 병합을 자동 처리하는지에 따라 차이가 생깁니다.

6-1. 자동 병합

: 풀(pull)은 원격 서버에서 현재 커밋보다 더 최신 커밋 정보가 있을 때 내려받습니다. 내려받은 커밋 정보는 임시 영역에 저장하고 스테이지 영역이 아닌 원격 저장소를 위한 전용 임시 브랜치가 따로 있습니다.

6-2. fetch : 가져오기

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

$ git fetch 원격저장소URL

6-3. 실습

  1. 원본저장소로 이동
    $ cd ../gitstudy05        
    $ code server.htm   //VS Code실행  
  2. 수정된 파일 스테이지 영역에 등록과 동시에 커밋하기
    $ git commit -am ["커밋 코멘트"]
  3. 커밋된 수정 내용 -> 원격 저장소 전송
    $ git push origin master
  4. 갱신된 원격 저정소 내용 패치
    $ cd ../gitstudy05_clone        //복제 폴더 이동
    $ git fetch                     //커밋 내려받기
  5. 커밋 내용 페치 후 로그 확인
    $ git log

6-4 merge 명령어로 수동 병합

: 페치는 데이터를 내려받기만 할 뿐 자동 병합하지 않습니다. 내려받은 커밋을 로컬 저장소에 적용하려면 병합 명령을 실행해야 하는대, merge 명령어를 사용합니다.

$ git merge 원격저장소별칭/브랜치이름

임시 원격 브랜치 병합

$ git merge origin/master

07. 순서


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

  • 최신 상태

    • 원격 저장소에 푸시하려면 자신의 로컬 저장소를 최신 상태로 유지해야합니다.

    • 커밋이 순차적이지 않을 때 깃은 푸시 동작을 거부합니다.

  • 충돌 방지

    • 깃이 최신 상태에서만 푸시를 허용하는 것은 충돌을 방지하기 위해서 입니다.

    • 원격 저장소의 커밋을 내려받는 풀 작업은 내려받은 커밋들을 현재 브랜치로 자동 병합합니다.

    • 이때 커밋 내용이 순차적이지 않으면 병합 과정에서 충돌이 발생합니다.

    • push 명령어를 사용할 때는 충돌을 최소화하기 위해 미리 원격 저장소를 확인합니다. 새로운 커밋 갱신이 없는지 pull 명령어를 사용하여 지속적으로 확인하는 것이 좋습니다.

    • 최대한 충돌을 피할 수 있는 방법은 자신의 저장소와 원격 저장소의 상태를 자주 최신으로 유지하는 것입니다.

  • 권장 순서

    • pull -> coding -> commit -> push -> push
    • 풀과 푸시를 자주 하여 충돌을 최소한으로 줄여 나가면서 작업을 유지합니다.
profile
안녕하세요 개발자 꿈나무 입니다.

1개의 댓글

comment-user-thumbnail
2022년 10월 2일

깃에 대해 꼼꼼하게 정리되어 있어 좋았고, 꼭 필요한 명령어들만 잘 정리되어있는 것 같아요!!

답글 달기