공개 글

Git과 GitHub

영발개발 2025. 1. 13. 14:25

 개발자라면 깃과 깃허브에 대해서 알고 있을 것이다. 써본 적도 있고 알고는 있는데 뭔가 제대로 알고 쓰는 거 같은 느낌이 들지 않아 유튜브에 있는 유노코딩 님의 강의를 보았다. 깃을 모르는 초보자들이나 나처럼 대충 알고 쓰고 있던 사람들이 아주 보기 좋도록 잘 정리되어 있고 도움이 많이 되었다. 그래서 해당 내용을 정리하고자 공부한 내용과 영상 내용을 요약하여 글로 남겨볼까 한다. (해당 글 안에 내용들의 출처는 유노코딩님으로, 강의 내용들을 요약한 것이다.)

 

유노코딩님의 강의 링크 : https://youtu.be/PwIei1tdHSU?si=2hphqG_O8tWuhLbE

 

 우선 강의에서 알려주는 깃과 깃허브, 브랜치 등 주요 내용들을 먼저 정리하고, 그에 관한 명령어들을 한 번에 정리하는 식으로 글을 작성하려 한다.


git에 관한 주요 내용 정리

 

깃(Git)이란?

 깃은 소규모 프로젝트에서 초대형 프로젝트에 이르기까지 모든 것을 신속하고 효율적으로 처리하도록 설계된 오픈 소스 버전 제어 시스템이다. (쉽게 생각하면 우리가 컴퓨터에 설치하는 다양한 종류의 소프트웨어 중 한 가지이다.)

 

깃의 주요 기능
  • 버전 관리 : 프로젝트 내 문서의 수정 이력을 체계적으로 관리할 수 있다. 문서의 내용을 특정 시점으로 되돌리거나, 서비스 버전과 개발 버전을 별도로 운영하는 등 프로젝트 관리에 대해 다양한 편의를 제공받을 수 있다.
  • 협업 체계 : 여러 사람이 하나의 프로젝트를 함께 수행할 때, 하나의 저장소를 기반으로 자신만의 개발 버전을 관리할 수 있어 협업에 도움이 된다. 또한 원격 저장소를 운영할 경우에는 물리적인 장치(USB)나 메일 송수신 없이도 코드를 주고 받거나 합치는 작업을 손쉽게 처리할 수 있다.

 대학교나 회사에서 문서 작업을 하다보면 '문서-초안', '문서-수정', '문서-최종', '문서-진짜 최종' 대충 요런 식으로 하나의 문서를 위해 여러가지 문서 버전들이 나오는 것을 본 적이 있을 것이다. 사실 필요한 것은 완성된 최종본 하나인데 나머지 것들을 삭제하기도, 그렇다고 가지고 있기에도 거슬리는 상황이 생겨버린다.

 

 하지만 깃을 사용하면 문서의 복사, 붙여넣기 같은 작업없이 깃 소프트웨어가 가지고 있는 내부 DB를 활용해서 문서의 수정 이력을 남겨놓을 수 있다. 결과적으로 문서 하나만을 가지고 수정 작업을 이어나가도 중간중간 이력을 남겨놓으면 문서의 다양한 버전을 잃지 않고 관리를 할 수 있게 된다.

 

깃허브(GitHub)란?

 깃과 깃허브는 엄연히 다른 것으로, 깃허브는 깃 저장소 호스팅을 지원하는 웹 서비스이다. 깃허브를 이용하면 온라인 상에 저장소를 만들어 원격으로 이를 관리할 수 있다. 또한 깃이 명령행 인터페이스를 제공하는데 반해 깃허브는 그래픽 인터페이스를 제공하기 때문에 사용자 입장에서 보다 편리하게 깃 저장소를 관리할 수 있다. (결론 : 깃허브는 깃 이용자들에게 편의를 제공하기 위해 존재하는 하나의 플랫폼이다.)

 

 보통 다른 사람들과 함께 프로젝트를 진행할 때, 내 컴퓨터(로컬 저장소)에서 작업을 한 후, 깃허브에 있는 원격 저장소에 push하면 내가 수정한 내용이 원격 저장소에 등록된다. 반대로 pull로 다른 사람이 작업하여 수정된 내용을 내 로컬 저장소로 가져올 수도 있다.

 

 깃허브 사용 방법은 글 아래 나와있는 원격저장소 관련 명령어를 참고하면 되는데, 처음에 명령어들을 이용하여 브랜치와 원격 저장소 주소를 연결시킨다. 이후 push와 pull을 이용해서 사용하면 된다.

 

깃 설치 방법

 설치 링크 : https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. Latest source Release 2.48.0 Release Notes (2025-01-10) Download Source Code GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but ther

git-scm.com

 해당 링크로 들어가 'Download for 본인의 운영체제'를 클릭하여 별다른 특별한 사항 없이 next를 눌러가며 설치하면 간단하게 설치할 수 있다. 

 

깃을 사용하는 방법

 깃을 사용하는 방법은 많지만, 기본적이고 가장 좋은 방법이며 가장 많이 사용하는 방법은 '커맨드 라인 인터페이스(Command-Line Interface, CLI)'이다. 이 CLI를 사용하려면 깃 배시를 사용해야 하는데 아래 화면처럼 내가 사용할 폴더 위치에서 우클릭 후, 'Open Git Bash here'를 클릭하여 실행시키면 된다. 참고로 윈도우는 깃 설치시에 깃 배시가 자동으로 설치되지만, 맥에서는 깃을 설치할 때 깃 배시가 따로 설치되지 않으므로 맥의 기본 프로그램인 터미널을 사용하면 된다.

 

깃 저장소 관리

 깃 프로젝트는 내부에 가상의 관리 영역을 만들어 파일의 상태를 구분하고 버전을 관리한다. 다음과 같이 세 가지의 관리 영역이 존재한다.

출처 : 유노코딩

 깃은 깃 프로젝트의 워킹 디렉토리 내 문서들의 수정 사항을 추적하는데, 상황에 따른 문서의 상태는 다음과 같다.

  • untracked file : 이제 막 생성된 파일로, 추적이 되고 있지 않은 상태.
  • unmodified file : 추적 중인 파일이나, 딱히 수정 사항이 없는 상태.
  • modified file : 추적 중인 파일이며, 수정 사항이 감지된 상태.

 깃 사용자는 워킹 디렉토리에서 감지된 신규 문서나 수정 문서를 스테이징 영역으로 이동 시킨 후, 커밋(commit)이라는 작업을 거쳐 최종적으로 리포지토리에 기록된다.

 

.gitignore 사용하기

 .gitignore를 사용하면 깃 프로젝트 내 문서 중 수정 이력에서 제외하고 싶은 문서를 추적 대상에서 완전히 제외시킬 수 있다.

 우선 'touch .gitignore' 명령어로 문서를 생성하면 숨김 문서인 .gitignore 문서가 생성된다. 해당 문서 안에 내가 추적을 피하고자 하는 파일의 이름을 적어주면 해당 파일은 깃의 추적을 피할 수 있다.

 

커밋(Commit) 이력 보기

 'git log' 명령어를 사용하면 커밋 이력이 최신순으로 출력된다. 구성 요소로는 커밋 해시, 작업자 정보, 날짜와 시간, 커밋 메시지가 출력된다. 또한 특정 커밋에 대해서는 브랜치명과 HEAD 참조자가 표시된다.

 

  • 커밋 해시 : 커밋 기록에 대한 고유 식별자. 위 사진에서 노란색 글씨로 써져있는 부분
  • 브랜치명 : 기존 저장소에서 분기된 저장소의 복사본인 '브랜치'의 이름. 위 사진에서 초록색 글씨로 써져있는 부분.
  • HEAD : 현재 작업 중인 브랜치를 가리키는 포인터

 

브랜치 

 브랜치란, 기존 저장소에서 분기된 저장소의 '복사본'이다. 개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생기는데, 코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있도록 하는 것이 브랜치의 사용 목적이다.

 깃 프로젝트가 처음 만들어지면, 'master'라는 이름의 기본 브랜치 하나가 만들어진다. 여기에서부터 개발은 시작되고, 이를 바탕으로 여러 브랜치를 분기해가며 작업할 수 있다. (경우에 따라 브랜치가 'main'인 경우도 있으나, 단지 이름일 뿐이라 상관없다.)

 개발 도중 지금 내가 수정하려는 사항이 좀 위험하거나 따로 빼내서 진행을 하고 싶을 때, 브랜치를 사용하면 좋다. 새로운 브랜치를 생성 후, 해당 브랜치로 이동하여 작업을 하면서 커밋을 하면 원래 내가 사용하던 master 브랜치에는 커밋 내용이 올라가지 않는다. 만약 수정 사항이 만족스럽다면 merge를 이용해 병합하면 되고, 별로라면 해당 브랜치를 삭제하면 그만이다.


관련 명령어 

 

명령어의 종류
  • 깃 명령어 : 저장소 내에서 버전 관리, 협업 등 깃이 제공하는 다양한 기능을 수행하기 위해 입력하는 명령어로, git으로 시작한다.
  • 시스템 명령어 : 폴더 이동, 파일 생성 및 삭제 등 컴퓨터 시스템 관련 기능을 수행하기 위해 입력하는 명령어로, 리눅스 운영체제의 시스템 명령어에 기반을 두고 있다.  

 

시스템 명령어
  • cd 디렉토리 경로 : 이동하려는 디렉토리로 이동
  • clear : 현재 터미널에 있는 내용들을 지워줌
  • ls : 현재 디렉토리 안에 있는 모든 파일 보기(숨김 파일 제외)
    ls -al : 현재 디렉토리 안에 있는 모든 파일 보기(숨김 파일 포함)
  • touch 문서이름 : 문서를 생성
  • nano 문서이름 : 편집 에디터 중 하나

 

깃 명령어
  • git : 깃에 관한 내용
  • git config : git과 관련해서 설정할 내용이 있을 때 사용
    ex) git config --global user.name "사용자이름" : 시스템에서 깃을 사용하는 사용자 이름 설정
         git config --global user.email "이메일주소" : 사용자 메일 설정
         git config user.name : 설정한 사용자 이름 확인
         git config user.email : 설정한 사용자 메일 확인
  • git init : 터미널이 열려 있는 폴더를 깃 저장소로 초기화하는 깃 명령어
  • git status : 깃 프로젝트 상태를 확인하는 깃 명령어
  • git add : 워킹 디렉터리 내 문서를 스테이징 영역에 추가하는 깃 명령어
    ex) git add 문서이름
         git add . : 현재 워킹 디렉터리에 있는 모든 언트랙드, 수정 사항을 한 번에 올린다.
  • git commit : 스테이징 영역 내에 대기 중인 문서를 리포지토리에 추가하는 깃 명령어
    -> 에디터 모드가 되고나서 'shift + i'를 누르면 INSERT 모드로 전환, 메모를 남길 수 있음. esc를 누르면 INSERT 모드에서 나옴. :wq로 저장하면 커밋됨.
    -> git commit -m "메세지" : 에디터를 추가로 열지 않고 커밋 메시지를 바로 쓸 수 있다.
  • git log : 커밋한 수정 이력을 확인하는 깃 명령어
    -> git log -p : 커밋의 변경사항까지 함께 출력하는 옵션
        git log --oneline : 각 커밋을 요약해 한 줄 씩 출력하는 옵션
  • git checkout (되돌아가자하는)커밋해시 : 문서 내용을 특정 커밋의 내용으로 되돌리는 깃 명령어
  • git reflog : HEAD(현재 내가 보고 있는 곳)포인터의 참조 이력을 출력하는 깃 명령어. (ex. 옛날 버전으로 checkout했다가 다시 최신버전 해시를 찾아서 돌아가고 싶을 때 사용하면 편리하다.)
  • git reset 파일명 : 커밋할 생각이 없는데 스테이징 해버렸을 때, 워킹 디렉터리로 되돌린다.
  • git reset (되돌아가고자하는)커밋해시 옵션 : 아예 커밋을 해버렸을때 되돌리는 방법. 세 가지 옵션 중 하나 선택
    -> --soft : 워킹 디렉터리(유지), 스테이징 영역(유지), 리포지토리(커밋이동)
        --mixed : 워킹 디렉터리(유지), 스테이징 영역(초기화), 리포지토리(커밋이동)
        --hard : 워킹 디렉터리(이동한 커밋의 상태로 변경), 스테이징 영역(초기화), 리포지토리(커밋이동)
       * 옵션을 선택 안할시 '--mixed'가 디폴트
  • git revert (없애고자하는)커밋해시: 특정 커밋의 수정 사항을 되돌리되, 이력을 남김(이력이 오히려 늘어남)

 

***깃 브랜치 관리하기 관련 명령어들***

  • git branch : 현재 브랜치 목록을 볼 수 있는 깃 명령어
  • git branch 브랜치이름 : 새로운 브랜치를 생성하는 깃 명령어
    -> git branch -d 브랜치이름 : 브랜치 삭제
  • git checkout 브랜치이름 : 새로운 브랜치를 생성하는 깃 명령어
  • git merge (병합하고자하는)브랜치이름 : 현재 브랜치에 다른 브랜치의 내용을 병합하는 깃 명령어

 

***원격 저장소 이용 관련 명령어들***

  • git remote -v : 현재 깃 프로젝트에 등록된 원격저장소 확인하는 깃 명령어
  • git remote add 원격저장소이름 원격저장소주소
    : 현재 깃 프로젝트에 원격 저장소를 등록하고, 여기에 이름(별칭)을 붙이는 깃 명령어(보통 origin)
  • git remote remove 원격저장소이름 : 원격 저장소 연결 삭제
  • git push : 로컬 저장소의 내용을 원격 저장소에 공유할 때 사용하는 깃 명령어
    -> git push -u 원격저장소이름 브랜치이름 : 처음에 어떤 브랜치를 원격저장소와 연결시킬 것인지 해줘야함. '-u'가 업스트림 설정해준다는 옵션임.
  • git pull : 원격 저장소의 내용을 로컬 저장소로 가져와 자동 병합하는 깃 명령어
  • git clone (내가 가져오고자 하는)원격저장소주소 : 원격 저장소 파일을 로컬로 가져옴.

 

'공개 글' 카테고리의 다른 글

@GetMapping? @PostMapping?  (0) 2025.02.19
html 기본 태그  (0) 2025.02.04
API와 REST API  (0) 2025.01.20
HTTP(HyperText Transfer Protocol)  (1) 2025.01.16
백준 2869번 문제 - 달팽이는 올라가고 싶다 풀이(자바)  (0) 2024.09.24