본문 바로가기

24DAY 백엔드

24DAY 백엔드 - 6DAY GitHub

728x90

1. 기본 사용법

 

새로운 저장소 만들기

 

폴더를 하나 만들고, 그 안에서 아래 명령을 실행하세요 .

git init

새로운 git 저장소가 만들어집니다.

 

저장소 받아오기

 

로컬 저장소를 복제(clone)하려면 아래 명령을 실행하세요

git clone /로컬/저장소/경로

원격 서버의 저장소를 복제하려면 아래 명령을 실행하세요.

git clone 사용자명@호스트:/원격/저장소/경로

 

작업의 흐름

 

여러분의 로컬 저장소는 git이 관리하는 세 그루의 나무로 구성하고 있습니다.

처번째 나무인 작업 디렉토리는 실제 파일들로 이루어져있고, 두번째 나무인 인덱스는 준비 영역의 역활을 하며, 마지막 나무인 HEAD는 최종 확정본을 나타냅니다.

 

추가와 확정

변경된 파일은 아래 명령어로 (인덱스에) 추가 할 수 있습니다.

git add <파일 이름>
git add *

바로 git의 기본 작업 흐름에서 첫 단계에 해당됩니다.

하지만 실제로 변경 내용을 확정하려면 아래 명령을 내려야 합니다.

git commit -m "이번 확정본에 대한 설명"

이제 변경된 파일이 HEAD에 반영됐습니다.

하지만, 원격 저장소에는 아직 반영이 안됐습니다.

 

변경 내용 발행하기

 

현재의 변경 내용은 아직 로컬 저장소의 HEAD안에 머물고 있습니다. 이제 이 변경 내용을 원격 서버로 올려봅시다.

git push origin main(master)

(다른 가지를 발행하려면 main(master)를 원하는 가지 이름으로 바꿔주세요.)

 

만약 기존에 있던 원격 저장소를 복제한 것이 아니라면, 원격 서버의 주소를 git에게 알려줘야 합니다.

 

git remote add origin <원격 서버 주소>

이제 변경 내용을 원격 서버로 발행할 수 있습니다.

 

가지치기

 

가지는 안전하게 격리된 상태에서 무언가를 만들 때 사용합니다. 여려분이 저장소를 새로 만들면 기본으로 main 가지가 만들어 집니다. 이제 다른 가지를 이용해서 개발을 진행하고, 나중에 개발이 완료되면 main 가지로 돌아와 병합하면 됩니다.

 

 

(그림에는 master이지만 main으로 바꿔야 합니다,)

github가 업데이트 되면서 master --> main로 바꿨습니다.

 

아래 명령으로 "feature_x"라는 이름의 가지를 만들고 갈아탑니다.

git checkout -b feature_x

main가지로 돌아올 수 있습니다.

git checkout main

가지를 삭제할 수 있습니다.

git branch -d feature_x

 

새로 만든 가지를 원격 저장소로 전송하기 전까지는 다른 사람들이 접근할 수 없습니다.

git push origin <가지이름>

 

갱신과 병합

로컬 저장소를 원격 저장소에 맞춰 갱신하려면

git pull

원격 저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch), 병합(merge) 됩니다.

다른 가지에 있는 변경 내용을 현재 가지에 병합할려면

git merge <가지 이름>

첫번째 명령이든 두번째 명령이든, git은 자동으로 변경 내용을 병합하려고 시도합니다.

문제는, 항상 성공하는 게 아니라 가끔 충돌(conflicts)이 일어나기도 합니다.

이렇게 충돌이 발생하면, git이 알려주는 파일의 충돌 부분을 직접 수정해서 병합이 가능하도록 해야 합니다.

충돌을 해결했다면, 아까의 파일을 병합하라고 알려주면 됩니다.

git add <파일 이름>

변경 내용을 병합하기 전에, 어떻게 바뀌었는지 비교해볼 수 도 있습니다.

 

git diff <원래가지> <비교 대상가지>

 

로컬 변경 내용 되돌리기

 

실수로 무언가 잘못한 경우

git checkout -- <파일 이름>

로컬의 변경 내용을 변경 전 상태(HEAD)로 되돌려줍니다. 다만 이미 인덱스에 추가된 변경 내용과 새로 생성한 파일은 그대로 남습니다.

 

만약 로컬에 있는 모든 변경 내용과 확정본을 포기하려면, 원격 저장소의 최신 이력을 가져오고, 로컬 main 가지가 저 이력을 가리키도록 할 수 있습니다.

 

git fetch origin
git reset --hard origin/main

 

2. 버전관리란?

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템입니다. 

 

  • 변경점 관리: 어떤 내용을 누가 작성해서 어느 시점에 들어갔는지 확인할 수 있게 해줍니다.

  • 버전 관리: 특정 시점에 꼬리표(Tag)를 달아 버전을 표시해주고, 브랜치(Branch) 등으로 동시에 여러 버전을 개발할 수 있게 해줍니다.

  • 백업&복구: 무언가가 잘못되었을 때 다시 특정 시점으로 돌아가게 해주고, 사고로 내용이 날아간 경우에도 복구할 수 있게 해줍니다.

  • 협업: 같이 일하는 사람들에게 수정사항을 쉽게 공유할수 있습니다.

 

종류

  1. 로컬 VCS : 서버 없이 로컬 컴퓨터 내에서 버전을 관리합니다. 협업에서 쓰기에는 힘들고, 컴퓨터가 고장나면 내부 정보가 통째로 날아가버리면 복수할 방법이 없습니다.
  2.  중앙집중식 VCS : 서버에 최종본 한개가 있으며, 사용자들을 이 중 수정을 원하는 파일만 로컬에 받아 수정한 후 서버에 올리게 됩니다.
  3.  분산 VCS : 파일을 저장하는 서버가 있는 것은 동일하지만 수정을 위해 프로젝트 전체를 로컬에 다운 받은 뒤 수정 합니다. 중앙 서버가 다운되더라고 개별 사용들은 작업이 가능하고 서버가 날아가도 다운 받은 내용은 남아있기 때문에 가장 안정적입니다. 수정시에도 현재 코드는 나 혼자 수정하고 있기 때문에 충돌의 염려 없이 수정할 수 있으며, 최종적으로 서버에 올릴 대만 신경써서 Merge해주면 됩니다.

 

3. 사용하는 이유 

  • 빠른 속도
  • 단순한 구조(처음에는 단순했지만 지금은 복잡합니다)
  • 비선형적인 개발 방식 지원(전세계에 개발자가 온라인이든 오프라인이든 개발하고 기여할 수  있도록 만들었습니다)
  • 완벽한 분산(원격 저장소에 Pull/Push/Merge 하고 Branch를 무한정 만들수 있습니다)
  • Linux 커널 같은 대형 프로젝트도 감당할 수 있습니다.

4. 저장용 호스팅 서비스

GITHUb,bitBucket,GitLab 등은 원격 호스팅 서비스를 제공하는 회사의 이름입니다.

원격 저장소를 로컬에 두고 내가 관리를 하자니 내 로컬 pc를 계속 켜두어야 해서(git에서는 로컬저장소나 원격 저장소가 저장하고 있는 정보가 같기 때문에 내 로컬 PC를 계속 켜두고 접속 가능하게 하는 것이나 원격 저장소 호스트를 이용하는 것이나 거의 보시면 됩니다.) 24시간 가동되고 접이 가능한 원격 저장소가 필요하겠다는 동기에서 시작된 원격 저장소 호스트 서비스입니다.

 

그래서 원격 저장소 관리에서 시작하여 버전관리와 연관된 추가 버시스 제공하지만 git자체와는 아무런 상관이 있지 않습니다. Git서버를 만들자는 목표로 시작된 오픈소스입니다.

 

 

출처 : rogerdudler.github.io/git-guide/index.ko.html

출처 :