Git 정리 1편

민선규·2023년 10월 7일

기타

목록 보기
10/16
post-thumbnail

- Git 정리 2편
- Git 정리 3편

프로젝트를 진행하면서 형상 관리를 위해 Git을 많이 사용하였다. 대중적이기도 하면서 제일 먼저 사용한 프로그램이 Git이기 때문이다. 취업을 준비하면서 Git에 대한 역량이 중요하다고 생각하였고 기초부터 정리를 할 필요성을 느껴 학습한 내용을 정리해보겠다.

Git

Git은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다. 여기서 중요한 키포인트는 변경사항 추적여러 명의 사용자이다.

변경사항 추적

보통 하나의 서비스를 개발하고 운영할 때는 버전이라는 것이 존재한다.우리가 즐겨 쓰는 카카오톡 또한 버전이 업그레이드된다. 예시로 v1, v2, v3 버전이 있다고 가정하자.

만약 v3버전을 출시했는데 예상치 못한 심각한 오류가 있다고 가정하자. 그렇다면 v2버전으로 재출시를 하고 v2에서 v3로 무엇이 바뀌었는지 알아야한다. 또는 v1 버전에서 숨겨져 있던 오류를 찾았다고 가정하자. 그러면 v1버전에서 오류 코드를 찾아야한다.

이때 Git을 통해서 해결할 수 있는 점이 장점이다.

여러 명의 사용자

보통 프로젝트를 진행할 때 각 각의 개발자가 서로의 코드를 전혀 관여하지 않는 방식도 있지만 보통은 그렇지가 않다. 만일 두 명의 개발자가 하나의 코드를 수정한다면 큰 문제가 발생할 수 있다.

이 또한 Git을 통해 예방하고 해결할 수 있는 점이 장점이다.

Git 기본

이름, 이메일 설정

Git 전역으로 사용자 이름과 이메일 주소를 설정하는 방법이다.

// 이름, 이메일 설정 명령어
git config --global user.name "(본인 이름)"
git config --global user.email "(본인 이메일)"

// 설정된 이름, 이메일 확인 명령어
git config --global user.name
git config --global user.email

// 기본 브랜치명 변경 명령어
git config --global init.defaultBranch main

autocrlf 설정

Git을 사용하다 보면 아래와 같은 에러를 볼 수 있다.

warning: LF will be replaced by CRLF in (파일경로)
The file will have its original line endings in your working directory

에러 내용에서 LF는 Line-Feed의 약자로 Mac, Linux(Unix)에서 사용되는 줄바꿈 문자열(\n)이다. CRLF는 Carriage Return Line-Feed의 약자로 Windows에서 사용되는 줄바꿈 문자열(\r\n)이다. 그래서 이러한 개행 차이를 방지하기 위하여 autocrlf 설정을 해주어야 한다.

// Windows
git config --global core.autocrlf true

// Max
git config --global core.autocrlf input

.gitignore

Git을 사용할 때 Git의 관리에서 특정 파일/폴더를 배제해야 할 경우가 있다. 이러한 경우에는 .gitignore 파일을 사용하여 해결할 수 있다. 사용 방식은 아래와 같다.

주석 처리는 #을 이용한다.

모든 file.c
file.c

최상위 폴더의 file.c
/file.c

모든 .c 확장자 파일
*.c

.c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

logs란 이름의 파일 또는 폴더와 그 내용들
logs

logs란 이름의 폴더와 그 내용들
logs/

logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c

logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
logs/**/debug.log

Git 기본 명령어

Git 생성

Git을 생성하는 명령어는 git init 이다. 현재 경로를 기준으로 저장소가 생성되며, 확인은 .git 폴더가 생성된 것으로 알 수 있다. 기본으로 숨김 설정이 되어 있다. .git 폴더에는 Git 관리내역이 담겨져 있다.

Git 상태

Git의 상태를 알려주는 명령어는 git status 이다. 여기서 Git의 상태는 워킹 디렉토리와 스테이징 영역의 상태를 의미한다.

워킹 디렉토리란 실제 로컬 내 영역을 의미하고 스테이징 영역은 commit할 내용을 담는 영역을 의미 한다. 스테이징 영역에 담기 위해서는 앞으로 배울 git add 명령어를 통해 담을 수 있다.

파일을 생성한 후에 git status를 실행하면 Untracked files에 생성한 텍스트 파일을 확인할 수 있다.

git add을 실행한 후에는 Untracked files이 사라지고 Changes to be committed에 new file을 확인할 수 있다.

git commit을 실행한 후에는 변경된 사항이 없다는 것을 확인할 수 있다.

수정했을 때에는 Changes not staged for commit에 modefied, 삭제했을 때에는 deleted를 확인할 수 있다.

git status 명령어를 실행하면서 3가지 상태를 확인할 수 있다. 각 3가지 상태가 의미하는 바가 무엇인지 정리해 보았다.

  1. Untracked files : 아직 한 번도 스테이징 영역에 들어가지 않은 상태를 의미한다.
  2. Changes not staged for commit : 워킹 디렉토리 영역에서 변경된 상태를 의미한다.
  3. Changes to be committed : 스테이징 영역에서 변경된 상태를 의미한다.

이 외에 파일의 관점에서 4가지 상태 또한 간단하게 정리해보겠다.

  1. Untracked : 아직 한 번도 스테이징 영역에 들어가지 않은 상태를 의미한다.
  2. Unmodified : 최근 commit 내용과 비교했을 때 변경된 사항이 없는 상태를 의미한다.
  3. Modified : 최근 commit 내용과 비교했을 때 변경된 사항이 있는 상태를 의미한다.
  4. Staged : 스테이징 영역에 올라온 상태를 의미한다.

파일의 관점에서의 라이프사이클은 다음 이미지와 같다.

스테이징 영역 등록

스테이징 영역에 등록하는 명령어는 git add이다. git add 파일명을 통해 한 개씩 등록할 수 있으며, git add 파일명1 파일명2 ...방식도 가능하다. git add . 명령어를 통해 모든 파일을 한번에 등록할 수 있다.

스테이징 영역 취소

스테이징 영역에 등록된 파일을 취소하는 명령어는 git reset 파일명이다. 등록된 모든 파일을 취소하는 명령어는 git reset 이다.

스테이징 영역 저장

스테이징 영역을 저장하는 명령어는 git commit이다. 현재 저장소의 상태를 저장하며 명령어는 git commit이다. commit 메세지까지 한 번에 저장하기 위해서는 git commit -m "내용" 명령어를 사용 한다.

git add와 git commit을 동시에 실행하기 위해서는 git commit -am "(메시지)" 명령어를 사용한다.(단 Untracked 파일이 존재하지 않을 때 사용한다.)

로그 확인

git log를 통해 commit한 히스토리를 알 수 있다. 이 전 테스트에서 커밋을 하였는데 git log를 통해 기록을 확인할 수 있다. 여기서 좀 전에 설정한 이름과 이메일 또한 확인할 수 있으며 commit 메세지도 확인할 수 있다.(여기서는 테스트를 위해서 commit 메세지를 1이라고 하였는데 실제 사용에는 유의미한 내용을 담도록 하자!)

commit 되돌리기 - ①

Git에서 과거로 돌아가는 두 방식 중 하나는 git reset <옵션> (commit 해시)이다. 원하는 시점으로 돌아간 뒤 이후 내역들은 전부 삭제가 된다.

soft 옵션 : 커밋 취소, Staging 상태 유지(add)
mixed 옵션 : 커밋 취소, Staging 취소, local은 변경 상태로 유지 (옵션설정 없을시 default)
hard 옵션 : 커밋취소, Staging 취소, local 변경 상태 취소

만일 git reset 명령어 뒤에 commit 해시를 작성하지 않는다면 제일 마지막 commit 기준으로 실행한다.

commit 되돌리기 - ②

Git에서 과거로 돌아가는 두 방식 중 남은 하나는 git revert (commit 해시)이다. 되돌리기 원하는 시점의 commit을 반대로 실행한다.

git revert 명령어는 실행과 동시에 커밋이 되는데 git revert --no-commit (commit 해시)를 사용하면 내용은 변경된 채 커밋은 되지 않은 상태가 된다. 이는 사용자의 추가적인 작업이 필요할 때 사용된다.

git reset과 git revert의 차이

앞서 과거로 돌아가는 명령어 두 가지를 알아보았다. 두 가지 명령어는 차이점을 가지고 있는데 이를 정리해보았다.

  1. git reset은 명령어 내역이 남지 않지만 git revert는 내역이 존재한다.
  2. git reset은 어느 기점 commit으로 돌아가는 거지만 git revert는 어느 기점에 commit을 되돌린다.

참고 문서 및 링크

0개의 댓글