IT탐험

서버 저장소(GitHub, remote, push, clone, pull, fetch, merge) 본문

공부내용정리/Git

서버 저장소(GitHub, remote, push, clone, pull, fetch, merge)

watercase 2021. 12. 26. 03:10
  • 서버 저장소를 원격(remote) 저장소라고도 하며 로컬 저장소의 코드를 서버에 안전하게 보관할 수 있고 다른 사람들과 공유하고 협업하여 개발을 진행할 수 있음
    • 개발하려는 소프트웨어 품질이 높아지고 규모도 점점 커지고 있어 협업하여 개발하는 것이 필수적인 상황이 되었고, 협업 프로그램이 너무나도 중요해짐
    • 원격 저장소를 사용하면 사무실에서 개발 중인 코드를 서버에 저장하고, 집 컴퓨터에 동기화하여 개발을 연속적으로 진행할 수 있음
    • 독립적으로 깃 서버를 직접 운영하여 사용할 수 있지만 365일 안정적인 서버를 운영하는것은 어려움이 따르므로 Github, Gitlab 등 전문적인 깃 호스팅 서비스를 이용함
    • 서버와 통신하려면 프로토콜을 사용해야 하는데 깃은 기본적으로 Local, HTTP, SSH, Git 네 종류의 전송 방식을 지원함
      • Local : 로컬 컴퓨터에 원격 저장소를 생성하는 것을 의미하며 자신의 컴퓨터를 NFS(Network File System) 등 서버로 이용할 때 편리함
        • 간단하게 원격 서버를 구축할 수 있을 뿐만 아니라 빠르게 동작하지만 모든 자료가 자신의 컴퓨터에 집중되는 위험이 있음
        • 로컬 저장소를 서버로 이용할 때 폴더 경로만 입력하면 됨
          • git remote add 원격저장소별칭 폴더경로
      • HTTP : 서버에 접속하려면 로그인 절차를 거쳐야 하는데 HTTP는 기존 아이디와 비밀번호만으로 접속자를 인증하여 처리할 수 있음
        • 익명으로도 처리할 수 있으며 계정을 이용하여 처리할 수도 있음
      • SSH : 깃에서 권장하는 프로토콜로, 높은 수준의 보안 통신으로 처리하기 때문에 깃 서버를 좀 더 안전하게 운영할 수 있음
        • SSH(Secure Shell)는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜로써 통신이 노출되도 이해할 수 없는 암호화된 문자로 보임 
        • 'ssh://계정@주소' : SSH 프로토콜을 사용하는 방법으로써 계정을 생략하여 현재 로그인된 사용자로 대체할 수 있음
        • SSH 접속을 할 때는 인증서를 만들어 사용하는데 별도의 회원 로그인 절차를 거치지 않아도 됨
          • 인증서는 공개키와 개인키로 구분하는데 공개키는 서버에 등록하며 ,개인키는로컬에 저장함
        • SSH는 HTTP와 달리 익명으로 접속할 수 없어 기업에서 깃 서버를 운영할 때 사용하는 프로토콜임
      • Git : 깃의 데몬 서비스를 위한 전용 프로토콜 방식으로써 SSH와 유사하지만 인증 시스템이 없어 보안에 취약할 수 있기 때문에 잘 사용하지 않음
  • remote 명령어를 사용하면 현재 연결된 원격 저장소 목록을 확인할 수 있고 등록과 취소 등의 작업을 할 수 있음
    • 'git remote' : 연결된 원격 저장소의 이름(별칭)을 출력함
    • 'git remote -v' : 원격 저장소의 별칭 이름과 URL을 출력함
    • 별칭 : 긴 문자열로 이루어진 원격 서버의 주소를 별칭으로 만들어 사용할 수 있는데 대표적으로 사용하는 별칭으로서 origin이 있음
    • 'git remote add 원격저장소별칭 원격저장소URL' : 원격 저장소와 연결함
      • push : 서버로 전송하는 동작을 의미함
      • fetch : 서버에서 가지고 오는 동작을 의미함
    • 'git remote rename 변경전 변경후' : 등록한 서버의 별칭 이름을 변경함
    • 'git remote show 원격저장소별칭' : 원격 저장소의 상세한 정보를 출력함
    • 'git push 원격저장소별칭 브랜치이름' : 커밋된 파일들을 원격 저장소의 브랜치로 업로드함
      • 처음 푸시하면 서버에 새로운 master 브랜치를 생성하고 master 브랜치로 업로드함
  • 새로운 로컬 저장소를 생성하고 원격 저장소를 연결하려면 아래의 순서를 따름
    1. 새 로컬 저장소를 생성하고 초기화하고 저장소의 소개 페이지 파일을 생성, 추적 등록, 커밋함
      • mkdir folder
        cd folder
        git init
        
        echo "# folder presentation" >> README.md
        
        git add README.md
        git commit -m "first commit"
         
    2. 원격 저장소로 연결함
      • git remote add 원격저장소별칭 원격저장소URL
    3. 원격 저장소의 브랜치로 커밋된 파일들을 업로드함
      • git push 원격저장소별칭 브랜치이름
  • clone : 원격 저장소를 로컬 컴퓨터로 복제함
    • 원격 접속에 필요한 추가 설정을 자동으로 수행하고 모든 커밋된 코드 이력들을 한 번에 내려받음
    • mkdir GitExercise_clone
      cd GitExercise_clone
      
      git clone 원격저장소URL .
  • pull : 원격 저장소의 최신 커밋 정보를 내려받음
    • git pull
    • 내려받은 최신 커밋 정보는 원격 저장소를 위한 전용 임시 브랜치에 저장하고 현재 브랜치와 자동 병합 처리함
  • fetch : 원격 저장소의 커밋 정보를 내려받음
    • git fetch 원격저장소URL
    • 내려받은 커밋 정보는 원격 저장소를 위한 전용 임시 브랜치에 저장하고 현재 브랜치와 자동 병합하지 않음
    • 여러 개발자와 협업으로 코드 작성시 pull 을 사용한 자동 병합에서 충돌이 발생할 때 fetch 방식을 사용함
    • fetch 명령으로 내려받은 정보를 merge 명령으로 병합함
      • git merge 원격저장소별칭/브랜치이름
        
        ex) git merge origin/master

 

  • 원격 저장소에 푸시하려면 자신의 로컬 저장소가 원격 저장소의 커밋보다 최신이어야 함
    • 동료가 내 저장소보다 먼저 커밋하여 서버를 갱신했다면 내 커밋은 서버보다 최신의 상태가 아니므로 깃은 푸시 동작을 거부함
    • 푸시 동작이 거부되면 pull 또는 petch 작업으로 자신의 로컬 저장소를 갱신한 후 다시 푸시해야함

'공부내용정리 > Git' 카테고리의 다른 글

복귀(reset, revert)  (0) 2021.12.28
병합과 충돌(merge, rebase)  (0) 2021.12.27
스태시(stash)  (0) 2021.12.27
브랜치(branch, checkout)  (0) 2021.12.26
Git의 기초(init, add, .gitignore, clone, commit)  (0) 2021.12.25
Comments