Git&GitHub

artp·2024년 12월 26일

git&github

목록 보기
1/18
post-thumbnail

Git이란?

Git은 프로젝트의 시간과 차원을 자유롭게 넘나들 수 있도록 해주는 분산 버전 관리 시스템(Distributed Version Control System, DVCS)입니다.
Git을 사용하면 파일의 변경 내역을 기록하고, 특정 시점으로 되돌리거나 변경 내용을 비교할 수 있습니다.

버전 관리 시스템(VCS, Version Control System)이란?

데이터나 프로그램 등의 파일을 버전별로 관리하고, 협업을 원활하게 진행할 수 있도록 도와주는 도구입니다.
파일의 변경 사항을 추적, 관리, 백업, 복구, 공유할 수 있으며 대표적인 버전 관리 시스템으로는 Git, Subversion(SVN), Mercurial 등이 있습니다.

Git의 주요 기능

  1. 시간 관리:

    • 프로젝트의 버전을 과거로 되돌리거나 특정 변경 내역을 취소할 수 있습니다.
    • 과거 작업 기록을 확인하거나, 잘못된 변경 사항을 되돌리는 것이 가능합니다.
    • git checkout, git reset, git revert 등의 기능을 이용하여 특정 시점의 코드 상태를 복원할 수 있습니다.
  2. 차원 관리 (브랜치 기능):

    • 프로젝트의 여러 모드(브랜치)를 쉽게 전환하고 관리할 수 있습니다.
    • 새로운 기능을 개발하거나 실험할 때 기존 작업에 영향을 주지 않고 독립적으로 작업할 수 있습니다.
  3. 협업 지원:

    • 여러 개발자가 동시에 같은 프로젝트에서 작업할 수 있도록 도와줍니다.
    • 코드 충돌을 해결하거나 변경 사항을 통합하는 기능을 제공합니다.
    • GitHub, GitLab, Bitbucket과 같은 원격 저장소를 사용하여 협업할 수 있습니다.

Git의 필요성

Git이 없다면 프로그램 소스의 변경 사항을 확인하기 어렵습니다.
특정 변경이 일어나기 전으로 되돌리거나, 협업을 진행하는 것이 매우 어려울 수 있습니다.

  • 파일의 변경 이력을 쉽게 관리
    • git log 명령어를 통해 파일의 변경 이력을 확인할 수 있습니다.
    • 언제, 누가, 어떤 변경을 했는지 추적할 수 있습니다.
  • 특정 시점으로 되돌리기 용이
    • git switch, git reset, git revert 등의 명령어를 통해 특정 버전으로 돌아갈 수 있습니다.
  • 동료 개발자와 소스코드를 공유하고 협업 가능
    • git push를 통해 GitHub 같은 원격 저장소로 코드를 공유할 수 있습니다.
    • git pull을 통해 최신 코드를 받아 협업할 수 있습니다.

Git의 장점

Git은 SVN(Subversion)과 비교하여 다음과 같은 장점을 가지고 있습니다.

1. 분산 버전 관리 시스템(Distributed Version Control System, DVCS)

  • Git은 중앙 서버 없이도 로컬에서 버전 관리가 가능합니다.
  • 개발자는 인터넷 연결 없이도 로컬 저장소(Local Repository)에서 커밋과 브랜치 작업을 수행할 수 있습니다.
  • SVN은 중앙 서버에서만 버전 관리가 가능하기 때문에 인터넷이 없으면 작업이 어렵습니다.

2. 빠른 속도

  • Git은 모든 버전 이력을 로컬에 저장하므로, SVN처럼 서버와 매번 통신할 필요 없이 빠르게 작업할 수 있습니다.
  • 파일을 비교하고 저장할 때 전체 데이터를 저장하지 않고 스냅샷(snapshot) 방식으로 관리하여 빠르고 성능이 뛰어납니다.
  • 반면, SVN은 변경된 파일의 차이(델타)만 저장하는 방식이라 속도가 느릴 수 있습니다.

3. 효율적인 브랜치 관리

  • Git에서는 브랜치를 쉽게 만들고 관리할 수 있으며, 브랜치 이동이 간편하고 빠릅니다.
  • 브랜치를 활용하여 여러 명이 동시에 독립적으로 개발할 수 있습니다.
  • 반면, SVN은 브랜치 생성과 이동이 어렵고, 작업 속도가 느립니다.

4. 데이터 무결성 보장

  • Git은 파일의 모든 데이터를 SHA-1 해시값(체크섬)으로 관리하여 데이터 변조를 방지합니다.
  • 데이터 손상이 발생했을 경우, 해시값을 비교하여 문제를 감지하고 복구할 수 있습니다.
  • SVN은 중앙 저장소에서 데이터를 관리하기 때문에 서버에 문제가 발생하면 데이터가 손실될 수 있습니다.

Git의 단점

1. 초기 학습 비용이 높음

  • 초보자가 Git의 개념(스테이징, 커밋, 브랜치, 머지 등)을 학습하는 데 시간이 필요합니다.
  • 명령어가 다양하고 편리하지만, 제대로 사용하지 않으면 충돌, 코드 사라짐 등의 문제가 발생할 수 있습니다.

2. 충돌(conflict) 해결이 필요함

  • 여러 개발자가 같은 파일을 동시에 수정하면 충돌이 발생할 수 있습니다.
  • SVN은 파일 잠금 기능이 있어 충돌을 방지할 수 있지만, Git은 파일 잠금 기능이 없기 때문에 브랜치 전략과 코드 리뷰를 활용하여 충돌을 예방해야 합니다.

3. 대형 프로젝트에서 성능 저하 가능성

  • Git은 모든 변경 이력을 로컬에서 관리하기 때문에 대형 프로젝트에서 저장소 크기가 커질 수 있습니다.
  • 수십 기가바이트 이상의 큰 프로젝트에서는 클론(clone) 속도가 느려질 수 있으며, 특정 파일을 제외하려면 .gitignore 설정이 필요합니다.

GitHub란?

GitHubGit 저장소를 온라인에서 관리하고 협업할 수 있도록 지원하는 클라우드 기반 플랫폼입니다.
Git이 로컬에서 파일의 변경 사항을 추적하고 버전 관리를 수행한다면, GitHub는 이를 클라우드 서버에 저장하여 팀원들과 공유하거나 협업할 수 있도록 지원합니다.
GitHub를 사용하면 원격 저장소를 활용하여 코드 리뷰, 이슈 관리, 풀 리퀘스트(PR) 등을 통해 효율적인 협업이 가능합니다.

GitHub의 주요 기능

  1. 원격 저장소(Remote Repository):

    • GitHub는 프로젝트를 원격 저장소에 저장하여, 어디서나 작업을 이어갈 수 있도록 도와줍니다.
    • GitHub 저장소에 변경 사항을 푸시(push)하거나 가져오기(pull)할 수 있습니다.
  2. 협업 도구:

    • 여러 팀원이 동시에 작업하면서, 코드 변경 사항을 효율적으로 관리할 수 있습니다.
    • Pull Request를 통해 팀원 간의 코드 리뷰와 의견 교환이 가능합니다.
  3. 버전 기록 및 이력 관리:

    • 모든 커밋 기록을 클라우드에서 관리하며, 언제든지 변경 이력을 확인할 수 있습니다.
  4. 문서화와 오픈소스 지원:

    • 프로젝트에 대한 설명이나 작업 내용을 정리할 수 있는 README.md 파일을 통해 문서화를 지원합니다.
    • 누구나 프로젝트를 공개하거나, 다른 오픈소스 프로젝트에 기여할 수 있습니다.

Git 세팅(Mac)

Git이 설치되어 있는지 확인하려면 아래 명령어를 터미널에 입력합니다:

git --version

Git 최신 버전 설치

  • 공식 Git 사이트 참조(windows/mac)

    • Git 공식 웹사이트에 접속하여 최신 Git 설치 프로그램을 다운로드합니다.
    • 다운로드 후 안내에 따라 설치를 진행합니다.
  • Homebrew를 이용한 설치(mac)

    • Homebrew는 macOS에서 패키지를 관리하는 도구입니다. 이를 이용하면 Git을 쉽게 설치하거나 업데이트할 수 있습니다.
    • Homebrew가 설치되지 않은 경우 Homebrew 공식 웹사이트를 참조하여 Homebrew를 설치합니다.
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    • Homebrew 설치 후, Git을 설치하려면 다음 명령어를 실행합니다:
      brew install git

Git 설치 확인

Git 설치가 완료되면 다시 아래 명령어를 실행하여 설치된 버전을 확인합니다:

git --version

MacOS Git 설정

  1. 사용자 정보 설정
    Git을 사용할 때, 사용자 이름과 이메일을 설정해야 합니다. 이 정보는 커밋 기록에 포함됩니다:
   git config --global user.name "name"
   git config --global user.email "email@example.com"
  1. 설정 확인
    설정된 정보를 확인하려면 다음 명령어를 입력합니다:
   git config --global user.name
   git config --global user.email
	또는
   git config --global --list
  1. 기본 브랜치명 변경
    아래 명령어를 입력하여 기본 브랜치명을 main으로 변경합니다.
    브랜치명을 main으로 변경하는 이유는, 이전의 기본 브랜치명인 master가 포괄적이지 않다는 지적에 따라 main이 표준으로 자리 잡았기 때문입니다.
   git config --global init.defaultBranch main
profile
donggyun_ee

0개의 댓글