Git과 GitHub 기본 기능 알아보기

Bruce Han·2023년 7월 16일
0

Git-Study

목록 보기
2/2
post-thumbnail

버전 관리 이해하기

버전 관리 필요성

PC, 스마트폰 앱, 게임 등은 시도 때도 없이 업데이트된다
앱 서비스를 종료하지 않는 이상 업데이트는 벗어날 수 없다
빈번한 업데이트를 체계적으로 관리하려면 소스 코드에 언제, 어떤 변화가 있었는지 기록하고 추적하는 버전 관리가 필요하다

  • 1인 사업체의 경우 개발자 혼자서 서비스를 구현해 배포하는 경우도 있으나, 대개 둘 이상의 개발자가 함께 개발한다
    • 한 프로젝트에서 여러 개발자가 동시에 많은 기능을 추가하고 코드를 변경한다
  • 그러다 보면 코드 파일을 둘 이상이 수정하여 의도하지 않게 코드가 덮어써지는 충돌이 발생하기도 한다
    • 이렇게 복잡한 상황을 체계적으로 관리하려면 버전 관리 시스템이 필요하다

필자는 현업에서 중앙 집중 관리 방식(근데 SVN은 또 아닌)의 형상관리로 협업을 한 경험이 있다.

  • 직접 사용하면서 커밋된 소스 코드가 불러와져야 하는데 안 불러와지거나
  • 내가 아닌 다른 사람이 먼저 커밋하면, 내가 짜던 소스는 클립보드에다가 쟁여두고 그 사람의 코드를 먼저 pull(가져오기)한다
    • 그렇게 pull을 통해서 가져오면 내 소스를 커밋해야 하는 번거로움이 생긴다
  • 이러한 이유도 필자도 분산 관리 시스템의 필요성을 느껴 이를 새로 공부중이다(사실 근거가 좀 부족하다)

git

이렇게 복잡한 상황을 체계적으로 관리하려면 분산형 버전 관리 시스템이 필요하다

버전 관리 시스템

  • 체계적으로 소스 코드 변경을 관리하고 추적하려면 버전 관리 시스템이 필요하다
  • 버전 관리 시스템을 이용하면 각 개발자가 원하는 시점에 버전을 지정하고 동료에게 공유할 수 있으며, 특정 버전으로 자유롭게 이동할 수 있다

분산형 버전 관리 시스템

Distributed Version Control System

  • 분산형 버전 관리 시스템에서 원격 저장소(서버)는 각 개발자(클라이언트)의 소스 코드와 버전 이력을 동기화하는 역할을 한다
    • 각 개발자는 최신 버전의 소스 코드뿐만 아니라 모든 버전 이력을 얻을 수 있다
  • 이러한 환경에서는 원격 저장소가 동작하지 않거나 원격 저장소의 소스 코드에 접근할 수 없는 문제가 생겨도 각 개발자의 소스 코드와 버전 이력을 활용해 최신 버전을 복구할 수 있다
  • Git은 가장 많이 사용되는 분산형 버전 관리 시스템이며
  • GitHub는 깃을 이용하여 관리하는 프로젝트의 원격 저장소 역할을 수행하는 웹 호스팅 서비스이다

git1
깃허브 사진 출처

깃/깃허브 이해하기

깃 알아보기

분산형 버전 관리 시스템인 Git은 Linux Kernel을 개발한 리누스 토르발스가 리눅스 커널 개발에 참여했던 다른 개발자들과 함께 2005년에 개발했다

처음 개발은 리누스 토르발스가 시작했지만, 유지보수는 주니오 하마노가 담당하고 있다

영롱하다

깃은 코드가 모두 공개되어있는 오픈 소스이며, 리눅스/맥OS/윈도우 운영체제를 지원한다

깃의 효능(?)

여러 개발자가 한 프로젝트를 협업할 때(N : 1)의 장점은 다음과 같다

  • 이력 기록 및 추적
    • 깃은 누가, 언제, 어떤 파일을, 어떻게 수정했는지 변경 이력을 기록한다.
    • 상세 이력이 기록되기 때문에 프로젝트에서 발생한 문제를 해결하는 데 도움이 된다
  • 원격 저장소 및 공유
    • 깃은 서버 역할을 하는 원격 저장소와 각 개발자의 지역 저장소에 소스 코드를 분산 저장한다
    • 소스 코드뿐만 아니라 모든 변경 이력을 분산 저장하기 때문에 원격 저장소에 문제가 생겨도 지역 저장소를 이용하여 복원할 수 있다
  • 변경 이력 병합
    • 프로젝트를 진행하면 각 개발자가 다른 기능을 개발하더라도 동일한 소스 코드 파일을 변경하는 일이 빈번하다
    • 깃은 하나의 소스 코드 파일에 대한 여러 변경 이력을 통합하는 기능을 제공한다

깃허브 알아보기

깃허브는 깃 프로젝트를 지원하는 2008년 시작된 호스팅 서비스이며, 2018년 마이크로소프트에 인수되면서 다양한 기능이 추가되었다

깃허브의 효능(?)

  • 호스팅 서비스
    • 깃을 이용해 프로젝트를 진행하려면 원격 저장소가 필요하다. 원격 저장소를 제공할 별도의 서버를 구축할 수도 있지만 관리 측면에서 번거로운 작업이다
    • 직접 원격 저장소를 구축하는 대신에 깃허브의 호스팅 서비스를 이용하면 된다
  • 공개 및 비공개 저장소
    • 깃허브에서는 공개 저장소와 비공개 저장소를 제공한다.
      • 공개 저장소에 올리면 소스 코드가 누구에게나 공개되고
      • 비공개 저장소에 올리면 소정의 금액을 지불할 시 제한된 인원에게만 공개하도록 할 수 있다
        • 2020년 4월 14일부터 개인 계정이든 팀 계정이든 무료로 이용할 수 있다고 한다
  • 고급 기능
    • 깃허브는 깃 프로젝트 저장소 역할 외에도
      • 깃허브 액션과 깃허브 디플로이먼트 API를 이용하여 빌드 및 배포 자동화를 구성할 수 있다
      • 프로젝트 보드를 이용해 협업 프로젝트를 관리할 수 있다

깃허브 둘러보기

저장소(Repository) 생성

(2023년 7월 기준)
git2

  • Owner : 원격 저장소의 소유주, 개인 계정 혹은 팀 계정으로 지정 가능
  • Repository name : 원격 저장소의 이름을 지정하되, 한 계정 내에서 중복된 저장소 이름은 사용 불가능
  • Description : 생성하는 원격 저장소에 대한 간략한 설명 작성
  • Public, Private : 원격 저장소를 공개 저장소로 생성할지 비공개 저장소로 생성할지 선택

개인 페이지

git3

(2023년 7월 기준)

  • 검색창
    • 오른쪽 상단에 검색창에서는 메인 페이지와 동일하게 깃허브에 등록된 공개 저장소를 검색할 수 있다
    • 메인 페이지와 한 가지 다른 점은 개인 페이지의 검색창에서 검색 시 로그인한 사용자의 깃허브 저장소 검색을 우선으로 수행한다는 점이다
      • 개인 페이지에서 검색 시 아래 화면처럼 검색어 앞에 유저 이름이 자동으로 설정된다
  • Overview
    • 깃허브 원격 저장소에 대해 개인이 얼마나 많은 활동을 했는지 보여준다
      git4
    • 특정 저장소에 커밋을 남기거나 이슈 및 풀 리퀘스트를 등록하면 해당 활동에 반영된다
  • Repositories
    • 개인이 생성한 원격 저장소를 확인할 수 있는 탭
    • 내가 만든 공개 및 비공개 저장소를 모두 확인할 수 있음
  • Projects
    • 해야 하는 작업을 정의하고 우선순위를 지정 및 관리하는 도구
    • 전반적인 로드맵, 릴리스를 위한 체크리스트 관리 등을 수행할 수 있다
  • Packages
    • 깃허브를 통해 내가 만든 소스 코드를 패키지로 만들고 관리할 수 있도록 돕는 도구
      • 자바스크립트 패키지 관리자인 npm을 생각하면 된다

Visual Studio Code 둘러보기

git5

왼쪽 위에서부터 아래 순서로

  • 탐색기(접힌 종이 모양)
    • 폴더 및 파일 구조를 확인할 수 있으며, 보통 진행 중인 프로젝트 폴더 단위로 VSCode를 열고 프로젝트 내의 폴더 및 파일 구조를 확인하는 데 사용된다
  • 검색창(돋보기)
    • VSCode를 통해 열려 있는 모든 파일을 대상으로 검색할 수 있다
    • 일반 텍스트 검색 외에 정규 표현식을 통한 검색도 수행할 수 있다
  • 깃 아이콘(나뭇가지 모양)
    • 깃과 연동해 소스 코드 버전 관리를 하는 기능을 제공한다
    • 어떤 파일이 수정되었고, 어떤 파일에서 충돌이 일어났는지 등을 확인할 수 있다
  • 터미널
    • 윈도우에서는 command 창 생각하면 된다. 깃 실습은 Git Bash를 사용할 것이다.

커밋하기

지역 저장소에 커밋 생성하기

git6

실습할 루트 폴더(예: git-study)와 하위 폴더(예: chapter1-basic)를 깔쌈하게 만들어준다

터미널을 실행하여 만들었던 하위 폴더로 이동하고 git init 명령어를 입력하면 깃 지역 저장소로 지정된다

git7

Initialized empty Git repository in {프로젝트 경로}/.git 이라는 문구가 출력된다

git config 명령어를 입력하여 깃 지역 저장소에 사용자를 등록한다

git8

이제 새로운 파일을 하나 생성한 후에 내용을 작성한다

git9

VSCode 탐색기에서 폴더 추가 아이콘을 클릭하고 README.md를 입력해 md 파일을 생성한다

생성한 파일에 '깃과 깃허브 실습'이라고 입력하고 저장한다

확장자 .md는 마크다운 형식의 파일을 의미한다. 마크다운 파일에서는 간단한 문법 구조를 이용해 들여쓰기, 글꼴, 헤더 등을 표현할 수 있다.

깃허브 원격 저장소에 README.md 파일을 생성하면 해당 원격 저장소의 메인 페이지로 작동한다. 이러한 이유로 프로젝트에 대한 설명, 설치 방법 등을 설명하는 데 README.md 파일을 사용한다.

새로운 파일을 생성하고 수정했으니, 새로운 커밋을 만들 차례다

터미널에서 git add 명령어를 실행하여 README.md 파일을 커밋에 포함될 파일로 등록한다

git10

커밋에 포함될 파일 등록을 완료했으므로 새로운 커밋을 생성한다

git11

-m 옵션은 생성하는 커밋의 메시지를 작성하는 기능을 제공한다

git log 명령어로 커밋이 잘 생성되었는지 한 번 더 확인한다

git12

위 사진처럼 결과가 나오면 성공적으로 커밋이 된 것이다

원격 저장소에 커밋 등록하기

내 컴퓨터의 지역 저장소에 커밋을 생성했으니 이제 원격 저장소에 생성된 커밋을 등록한다

깃허브 페이지에서 새로운 원격 저장소를 생성하는 것으로 시작한다

git14

New repository나 깃허브에서 왼쪽 상단(2023년 7월 기준) Repositories를 클릭한 후 📗 New 를 클릭하여 새 저장소를 생성할 수 있다

git15

원격 저장소를 생성했는데 이름을 고치고 싶으면 ⚙Settings - ⚙General에 가서 저장소 이름을 변경할 수 있다

원격 저장소 이름은 지역 저장소의 이름과 같을 필요는 없다

git16

오른쪽 하단에 네모 두 개가 겹친 아이콘을 클릭하여 현재 들어가있는 원격 저장소의 주소를 복사한다

지역 저장소의 커밋을 원격 저장소에 등록하기 위해서는 원격 저장소의 주소를 지역 저장소에 알려줘야 하므로 주소를 복사한 것이다

git17

터미널에서 git remote add origin을 입력하고 그 뒤에 복사한 원격 저장소 주소를 붙여넣고 엔터를 눌러 실행한다

git18

원격 저장소의 주소를 등록할 때 사용한 origin 특정 원격 저장소를 식별하는 이름이다

지역 저장소 하나에 여러 원격 저장소를 등록할 수 있으며, origin으로 사용하거나 꼭 origin이 아니더라도 다른 이름으로 정해도 된다

지역 저장소에서 생성한 커밋을 원격 저장소에 등록해보자

git19

git push origin main 명령어로 지역 저장소에서 생성한 커밋을 원격 저장소에 등록한다
origin은 리모트 저장소 이름, main은 리모트 저장소의 branch 이름이다

그런데 만약 위와 같이 src refspec main does not match any라고 push가 안 된다면

git20

git branch -M main
git push -u origin main

(필자 해석) 브랜치를 먼저 main으로 설정하고 origin이라는 이름으로 main에 push하면 된다

git21

원격 저장소 페이지에 접속하여 커밋이 성공적으로 등록되었는지 확인한다. 정상적으로 커밋이 등록되었다면 위 사진처럼 커밋 이력을 확인할 수 있다

위에서도 언급했지만, README.md 파일은 원격 저장소의 메인 페이지 역할을 한다. 작성한 README.md 파일의 내용이 메인 페이지에 노출되면 제대로 커밋을 등록한 것이다.

깃허브 인증 방식 변경이라는 것도 있다고 한다

깃과 깃허브를 처음 사용하게 된다면 2021년 8월 13일 전까지는 패스워드 입력을 요구받았었다

하지만, 지금(2023년 7월)은 그런 깃허브 계정 패스워드를 통한 인증 방식은 중단되었다
이는 깃허브 계정을 생성할 때 만들었던 패스워드로 깃 명령어 사용에 대한 인증을 할 수 없다는 것이 된다

그래서 깃허브에서 제공하는 개인용 액세스 토큰을 발급받아 해당 토큰을 패스워드로 사용해야 한다

git22

⚙Settings (저장소에 있는 세팅 아니다) -> Developer settings -> Personal access tokens 메뉴에서 발급받을 수 있다

요즘에는 새 인증 방식을 베타로 내놓은 것 같은데, 일단 classic한 버전을 먼저 사용해서 익히는 것이 좋다

git23

이미 발급받은 상태라면 이렇게 나올 것이다

git24

토큰 생성 시 무리없이 깃을 연습하려면 Select scopes 항목에서 repoworkflow를 꼭 선택해야 한다
이렇게 생성한 토큰을 인증 패스워드로 사용하면 된다

Reference

박미정의 깃&깃허브 입문 - 1단계 : 초보자를 위한 깃&깃허브

profile
만 가지 발차기를 한 번씩 연습하는 사람은 두렵지 않다. 내가 두려워 하는 사람은 한 가지 발차기를 만 번씩 연습하는 사람이다. - Bruce Lee

0개의 댓글