오픈소스소프트웨어 정리 #12 Git

yuju9·2022년 11월 27일
0

오픈소스소프트웨어

목록 보기
12/14

버전관리시스템

  • 파일 및 자원들에 대한 변경사항을 추적하고 관리하는 소프트웨어
  • 개발자들간의 협업(공동작업)을 지원

저장소

  • 파일들을 저장하는 곳
  • 저장소는 모든 사용자들이 공유하는 것과 사용자 개인만 사용하는 것으로 구분
  • 작업중인 디렉토리의 파일은 저장소에 추가되어야 버전관리시스템의 관리 대상이 된다
  • 저장소에 들어있는 파일: 프로젝트에서 필요한 모든 것(소스파일, 빌드 파일 등)
  • 저장소에 넣지 않는 파일들: 저장소 내의 파일들로부터 생성해 낼 수 있는 것들(오브젝트 파일, 실행 파일)

GitHub

  • 가장 거대한 Git 저장소 호스트 (Git 저장소들의 집합)
  • Git을 사용하기 위해 필수적으로 GitHub를 사용할 필요는 없음

Git의 Help 기능

  • $git help <verb>
  • $git <verb> --help
  • $man git-<verb>
  • <verb> = config, add, commit 등

로컬 저장소의 접근 과정



Git의 기본 작업흐름

  • 작업디렉토리에서 파일을 변경
  • 스테이지 영역에 변경한 파일들을 추가
  • commit을 통해 스테이지 영역의 파일들을 Git에 반영

Git 사용

  1. 커밋시에 사용할 사용자의 이름과 Email 설정
  • git config --global user.name "Lee Yuju"

  • git config --global user.email "yuju@gmail.com"

    • 프로젝트 별로 다른 설정을 사용하려면 --global 플래그 사용X
    • 설정 정보 확인: git config --list
    • 커밋메시지 에디터 변경(디폴트는 vim): git config --global core.editor emacs
  1. 기존 프로젝트를 현재 디렉토리에 복제
  • git clone <url> [local dir name]
    • local dir name의 서브디렉토리를 현재 디렉토리에 생성하고 저장소에서 작업본 파일들을 모두 복사
    • Git 자체의 정보관리를 위해 .git 디렉토리 생성
  • 예) git clone https://github.com/yuju9/yuju9
  1. 현재 프로젝트를 복제 (현재 디렉토리에 대한 Git 저장소 만들기)
  • $git init
    • 현재 디렉토리에 .git 디렉토리 생성
  • 아래와 같이 새로운 파일을 스테이지 영역에 추가하고 커밋 가능
    • git add file.java
    • git commit -m "first commit"
  1. Git 명령어

커밋(commit)

  • 커밋할 파일은 반드시 먼저 스테이지 되어야함
  • 만약 파일이 변경되면 다시 스테이지 되어야함
  • 스테이지: $git add hello.java
  • 스테이지된 파일 취소: $git reset HEAD -- <file>
  • 커밋시에는 모든 스테이지된 파일이 저장소에 기록됨
  • 작업디렉토리 내의 변경된 파일을 이전에 커밋된 상태로 되돌리기: $git checkout -- <file>

status와 diff

status

  • 작업디렉토리와 스테이지 영역의 파일 상태 확인
  • $git status 또는 $git status -s (-s는 간략한 정보만 표시)

diff

  • 작업 디렉토리의 파일과 스테이지 영역 파일과의 차이 비교
  • $git diff
  • 로컬저장소의 파일과 스테이지된 파일과의 차이 비교(--cached옵션 사용)
    • $git diff --cached

Log 조회

  • 로컬 저장소에 저장된 모든 변경사항을 보려면 Log 명령 사용
  • $git log 또는 $git log --oneline (간략한 정보 표시)
  • $git log -5 (최근 5개의 변경사항만 확인)

작업 취소 또는 변경

  • git commit --amend
    : 직전 commit 작업을 변경할 때 사용. 파일의 추가, 커밋 메시지 변경 등
  • git reset HEAD <file>
    : 스테이지된 <file>을 언스테이지함
  • git restore <file>
    : 작업중인 파일을 이전에 commit한 상태로 돌림

원격저장소

  • 로컬 저장소가 아닌 네트워크를 통해 접속할 수 있는 저장소
    • 같은 컴퓨터에 원격 저장소가 존재할 수도 있음.

원격저장소 명령


Pull과 Push

Pull

  • 원격저장소에서 가장 최신 상태의 파일들을 로컬저장소에 복사
  • $git pull origin main

Push

  • 로컬저장소의 파일을 원격저장소에 복사하는 명령
  • $git push origin main

Git Alias

  • 자주 사용하는 명령을 다른 이름으로 축약해서 사용
  • ex)
    git config --global alias.cm commit → git cm
    git config --global alias.st status → git st

태깅

  • 저장소의 커밋 위치에 이름을 붙이는 것

일반태그

  • 이름만 붙임
  • ex)
    git tag v1.4 : v1.4 이름의 태그를 현재 위치에 설정
    git tag : 태그 리스트 조회
  • 원격저장소에 태그 전달
    ex) git push origin v1.5

주석태그

  • 이름, 설명, 서명 및 기타 정보 포함
  • ex)
    git tag -a v1.4` -m "my version 1.4"
    git tag -a v1.2 9fceb02 : 9fceb02 해시로 시작하는 커밋에 태그 추가

브랜치

  • 개발 과정에서 기존이 작업과 분리된 작업을 수행하기 위한 기능
  • 새로운 브랜치에서 기능 추가/버그 수정 등의 작업을 수행하고, 추후 작업이 완료되면 이전 브랜치와 병합 수행

브랜치 사용 예


SVN과 Git의 차이

SVN

  • 중앙집중화된 저장소를 채택
    • 중앙의 저장소만 파일의 완벽한 이력정보 유지

Git

  • 분산 저장소 사용
    • 각각의 저장소는 모두 동등한 기능 제공
    • 속도가 빠르고 파일이 중복해서 존재
  • 브랜치와 병합이 자주 발생

0개의 댓글