[Git] 깃과 깃허브에 대한 이해

node·2023년 10월 16일
0

이해 시리즈

목록 보기
10/11

깃과 깃허브란?

깃(Git)은 2005년 리누스 토르발스(Linus Torvalds)가 발표한 버전 관리 시스템이고,
깃허브(GitHub)는 깃으로 관리하는 프로젝트를 올려둘 수 있는 온라인 깃 저장소다.




깃의 핵심기능

  • 버전관리
    : 파일을 작성하고 수정할 때마다 언제, 어떤 것을 수정했는지 편하고 구체적으로 기록하여 버전별로 수정사항을 관리한다.

  • 백업
    : 깃으로 관리되는 프로젝트를 깃허브 같은 온라인 저장소를 통해 파일들을 백업할 수 있다.

  • 협업
    : 깃허브 같은 온라인 저장소에 등록된 프로젝트를 여러 사람이 내려받아 각자의 부분을 수정하고 병합할 수 있다.

버전관리 - 백업 - 협업 순으로 단계별로 학습해야 이해하기 쉽다.




깃 기본 용어

  • Repository 저장소
    : Branch에 따라 버전을 저장하는 저장소. 작업자가 변경한 모든 히스토리를 확인 가능.
    Local Repository: 내 PC에 저장되는 작업 저장소
    Remote Repository: 작업사항을 업로드/다운로드하는 원격 저장소 ex)깃허브, 깃랩, 빈스톡

  • Branch 분기점
    : 작업을 진행할때 기존 파일에 영향을 끼치지 않고 작업하기 위해 사용되는 분기점.
    현재 상태를 복사하여 새로운 Branch를 만들어 작업이 끝나면 Merge 하여 작업 내용을 적용시키는 용도로 사용한다.

  • Head
    : 현재 작업중인 Branch를 가리킨다.

  • Commit
    : 현재 변경된 작업 상태를 확정하고 저장소에 저장하는 작업.

  • Staging area
    : 저장소에 Commit 하기 전에 Commit을 준비하는 위치.

  • Merge 병합
    : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.



깃으로 버전관리하기

이후 내용은 Window 환경에서 Git Bash 프로그램을 사용할때를 기준으로 설명한다.
Git Bash 프로그램은 Linux 명령어를 기반으로 작동하며 Linux 기본 명령어들을 알고 있다는 가정 하에 작성하였다.


깃 저장소 만들기

깃을 설치하고 사용하기 위해서는 우선 원하는 디렉토리를 초기화하여 깃으로 관리할 준비를 해야한다. 원하는 디렉토리에서 git init을 수행하고 나면 .git 디렉토리가 생성되는데 버전정보가 해당 디렉토리 내에 기록된다.


버전 만들기

버전은 문서를 수정하고 저장하여 커밋될 때마다 생기는 기록을 뜻하며,
작업 트리 - 스테이지 - 저장소 순서로 이동하며 반영된다.

  • 작업 트리 Working tree
    : 실제로 파일의 수정, 저장 작업을 하는 디렉토리.
    git add [파일 or 디렉토리] 명령어를 사용해서 스테이지로 이동한다.

    △ 붉게 표시된 파일은 작업 트리에서 추가/수정되었지만 저장소에 반영되지 않은 파일을 뜻한다.
  • 스테이지 Stage
    : 작업 트리에서 수정된 파일들이 버전이 되기 전에 대기하는 곳.
    git commit -m [남길 메세지] 명령어를 사용해서 저장소로 이동한다.

    △ 초록색으로 표시된 파일은 git add를 통해 스테이지에 등록된 파일을 뜻한다.

  • 저장소 Repository
    : 스테이지에 등록된 파일들을 버전으로 만들어 저장하는 곳.

    git commit 으로 만들어진 버전들은 git log를 통해 확인 가능하다.


작업 되돌리기

작업 중 잘못 처리하여 되돌려야 할 경우에 사용하는 방법들을 소개한다.

  • 작업 트리에서 수정한 파일 되돌리기
    git checkout -- [파일명] 명령어로 최신 버전의 파일 상태로 되돌릴 수 있다.
    해당 명령어는 스테이지에 올린 파일에는 적용되지 않으니 잘 확인해야 한다.

  • 스테이징 되돌리기
    git reset HEAD [파일명] 명령어로 스테이지에 등록된 파일을 작업 트리로 되돌릴 수 있다.

  • 최신 커밋 되돌리기
    git reset HEAD^ 명령어로 가장 최근 커밋을 취소할 수 있다.

    • 이용 가능한 옵션들

      명령어적용
      --soft HEAD^최근 커밋을 하기 전 상태로 작업 트리를 되돌립니다.
      --mixed HEAD^최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌립니다. Default 값
      --hard HEAD^최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업트리를 되돌립니다.
  • 특정 커밋으로 되돌리기
    git reset --hard [커밋해시값] 명령어로 특정 커밋으로 되돌리며 이후 커밋들을 전부 삭제한다.

  • 커밋 삭제하지 않고 특정 커밋으로 되돌리기
    git revert [커밋해시값] 명령어로 특정 커밋으로 되돌리지만 이후 커밋들은 삭제하지 않는다.




깃허브로 백업하기

원격 저장소

원격 저장소는 컴퓨터나 서버에 만든 저장소를 뜻하며 깃허브 같이 서버 내에 올려두고 사용하는 곳을 뜻한다.
지역 저장소(Local Repository)와 원격 저장소(Remote Repository)를 연결하여 버전 관리 파일들을 쉽게 백업할수 있다.

깃허브 활용법

  • 원격 저장소에서 깃을 사용
    : PC 내에 깃을 직접 설치하지 않고 온라인 상에서 깃의 버전 관리 기능을 사용할 수 있다.

  • 지역 저장소의 백업
    : 깃허브에 원격 저장소를 만들고 PC의 지역 저장소와 연결한 후 동기화하여 깃허브에 작업내역을 백업할 수 있다.

  • 협업 프로젝트에 사용
    : 팀 프로젝트를 진행할 때 기본 저장소로 이용하여 여러 명의 팀원이 하나의 저장소에 프로젝트를 진행하기 쉽다.

  • 다른 사람의 소스를 조회하고 오픈 소스에 참여
    : 전세계 개발자들이 공개해 놓은 소스들을 조회 할 수 있어 응용하여 활용하거나 직접 참여할 수 있다.

지역 저장소를 원격 저장소에 연결

깃허브를 원격 저장소를 사용하기 위해서 지역저장소에서 사용하는 명령어를 소개한다.

  • 지역 저장소에 origin이라는 이름의 원격 저장소를 연결
    git remote add origin [원격 저장소 주소]

원격 저장소에 올리기 및 내려받기

연결된 원격 저장소에서 데이터를 주고 받을 때 사용하는 명령어를 소개한다.

  • 지역 저장소의 저장된 버전 정보들을 지정된 원격 저장소의 브랜치로 전송
    git push

    push를 처음할 때에는 git push -u origin [원격저장소 브랜치명] 명령어로 upstream을 지정해주어야 한다.

  • 지정된 원격 저장소의 버전 정보들을 지역 저장소로 불러오기
    git pull




깃허브로 협업하기

원격 저장소 함께 사용하기

  • 원격 저장소 복제
    : 다른 사람들과 하나의 원격 저장소로 협업을 하기위해 우선 원격 저장소의 데이터를 각자의 지역 저장소에 복제를 해야한다.
    git clone [원격 저장소 주소] [생성할 디렉토리명] 명령어로 원격 저장소의 데이터를 복제할 수 있다.

  • 원격 브랜치 정보 가져오기
    : Clone으로 복제해온 데이터는 원격 저장소가 갱신되어도 자동 반영되지 않기 때문에 수시로 원격 저장소의 데이터와 동기화 해야합니다. 이 때 2가지 명령어가 주로 사용됩니다.

    • 원격 저장소의 Commit 정보만 가져오고 Merge는 하지 않음
      git fetch

    • 원격 저장소의 Commit 정보를 가져오면서 Merge를 진행함
      git pull

둘의 차이점은 병합을 하느냐 안하느냐의 차이로 pull이 더 간편하긴 하지만 지역 저장소에서 작업하던 같은 파일이 수정되었을 경우 지역 저장소의 데이터에 손실이 있을 수 있어 fetch로 수정 사항을 확인후에 반영하는 것이 좋다.

협업의 기본 순서

  1. 공동 작업자 추가
    : 기본적으로 원격 저장소의 수정 권한은 본인에게만 있기 때문에 같이 작업할 인원을 추가해야 한다.

    Settings > Collaborators > Add prople

  2. 작업환경 구성하기
    : 작업자의 PC에 지역 저장소를 구성한다.

    • PC내에 사용할 디렉토리 생성과 동시에 초기화하고 이동.
      git init [디렉토리명]
      cd [디렉토리명]

    • 개인 설정 정보를 입력.
      git config user.name "사용자 이름"
      git config user.email "메일 주소"

  3. 지역 저장소에 원격 저장소 데이터 복제
    : 작업을 진행하기 전 원격 저장소에 있는 데이터를 불러와 작업자의 PC에 복제한다.
    git clone [원격 저장소 주소]

    • 작업용 브랜치 생성하기
      : 일반적으로 개발하는 각 기능마다 브랜치를 만들어 작업하고 업로드를 진행한다.

    • 작업 할 브랜치를 생성
      git checkout -b [새로 만들 브랜치명]

  4. 작업 사항 전송
    : 지역 저장소에서 작업한 내용을 원격 저장소에 업로드하기 전에 원격 저장소에 변경 사항이 있을 수도 있기 때문에 지역 저장소를 동기화 먼저 해주어야 한다. fetch나 pull을 통해 데이터를 동기화 하고 push로 업로드 한다

    • 지역 저장소 동기화
      git fetch/pull

    • 원격 저장소에 브랜치를 새로 만들어 업로드
      git push origin [원격 저장소에 새로 만들 브랜치명]

  5. 풀리퀘스트
    : 보통 원격 저장소는 master 브랜치를 기준으로 운영이 되기 때문에 내가 전달한 브랜치를 master에 병합해 달라고 요청해야한다.

  • 새로운 브랜치로 push하면 풀리퀘스트하도록 버튼이 생성된다.
  • 풀리퀘스트 작성창. 프로젝트 담당자가 정해준 포맷대로 작성하여 관리하는게 일반적이다.
  • 관리자를 통해 검토가 완료되면 Merge 버튼이 활성화 된다.



자주 쓰는 명령어 목록

  • git help
    : 사용법이 궁금한 명령어에 대해 'git help [궁금한 명령어]'를 타이핑시, 해당 깃 명령어의 설정과 사용에 대한 도움말 출력.

  • git init
    : 원하는 위치에서 깃 작업을 시작하기 위해서 현재의 위치를 깃 저장소로 초기화.

  • git clone
    : 원격 저장소의 데이터를 로컬 저장소로 복사.

    작업중이던 내역 있을시 덮어쓰기 되므로 빈 디렉토리에서 진행하는 게 좋음.
    기존에 진행중인 프로젝트에 투입 될 때 사용.

  • git status
    : 저장소 상태 체크. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등의 상태정보 출력.

  • git branch
    : 새로운 브랜치를 생성.

  • git checkout
    : 작업할 브랜치로 이동하여 로컬 저장소의 파일들을 해당 브랜치에 맞게 변경시킨다.

    이때 기존 브랜치에 커밋되지 않은 내용들이 있다면 데이터가 꼬일 수 있으니 체크아웃 전에 작업사항들을 커밋해야 한다.

    # 기존에 존재하는 old라는 branch로 이동
    git checkout old
    
    # 새로운 new라는 branch를 만들고 해당 branch로 이동
    git checkout -b new
    
    # 커밋되지 않은 작업 사항들을 무시하고 b2 branch로 이동
    git checkout -f b2	
  • git add
    : staging area에 변경된 내용을 추가.

    # 해당 파일 혹은 디렉토리 변경 내용 staging area 등록
    git add [업로드 하고싶은 파일 혹은 디렉토리 경로]
    
    # 현재 디렉토리 모든 변경내용 staging area 등록(상위X)
    git add .
    
    # 작업 디렉토리 모든 변경내용 staging area 등록
    git add -A
    
    # 터미널에서 staging area로 넘길 파일 선택 가능
    git add -p
  • git commit
    : staging area에 있는 변경 내용을 반영하고 반영된 버전을 정의하는 명령어.
    메시지가 비어있을 경우 이후 작업에 문제가 발생할수 있으니 반드시 -m 옵션을 넣어주는 것이 좋다.

    # 메시지를 포함하여 현재 버전을 정의한다.
    git commit -m [메시지]
    
    최근에 작업한 커밋을 수정한다.
    git commit --amend
  • git log
    : 커밋 내역 확인.

  • git merge
    : 개별 branch에서 마친 작업을 master branch로 병합.

  • git push
    : 로컬 저장소에서 원격 저장소로 변경사항을 전송.

  • git fetch
    : 원격 저장소로부터 최신 버전 데이터가 있는지 확인하고 Commit들을 가져온다.
    Merge하지는 않음.

  • git pull
    : 원격 저장소로부터 최신 버전 데이터를 가져와 현재 브랜치와 Merge한다.
    기존 작업 내용은 유지하면서 최신 코드로 업데이트 할 때 사용.




profile
NOvice + DEveloper

0개의 댓글