Git

Git 정리 첫 번째 (로컬 저장소, init, add, commit, .gitignore, 개행문자 통일)

더즈 2022. 2. 12. 21:54

Repository(저장소)

깃 저장소에는 로컬 저장소와 원격 저장소가 존재한다. 원격 저장소로 push하기 전까지는 로컬 저장소에서만 작업하게 된다. 로컬 저장소에는 세 가지 영역이 있다.

  • Working Directory - 작업 중인 곳 (add 하기 전)
  • Staging Area - 어느 정도 작업하다가 버전 히스토리에 저장할 준비가 되어있는 곳. (add 후, commit하기 전)
  • .git directory -  버전 히스토리를 가지고 있는 곳 (commit 후)

저장소 초기화

프로젝트를 Git으로 관리하려면 저장소를 초기화해야한다. 먼저 저장소 디렉터리로 이동한 뒤에 init 명령어를 입력한다.

$ git init

이 다음부터는 status로 상태를 확인할 수가 있다.

$ git status
On branch master
nothing to commit, working tree clean

이하의 예시는 인텔리제이에서 자바 프로젝트를 생성하여 /src/main/java 하위에서 진행되었다. 터미널은 git bash를 사용한다.

IntelliJ IDEA Git Bash 연동하기

1.      ctrl + alt + s를 눌러 settings를 연다.

2.      검색 필드에 terminal 입력

3.      Shell 경로를 "C:\Program Files\Git\bin\sh.exe" -login -i로 변경


파일 추가해서 add 후 commit 해보기

src/ 하위에 Member.java 파일을 추가하고 (아직 add는 하지 않은 상태이다) status를 확인하면 아직 추적하고 있지 않다는 Untracked files에 src/가 있는 걸 볼 수 있다. 아직 Member.java는 Working Directory에 있다는 뜻이다.

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/

nothing added to commit but untracked files present (use "git add" to track)

이 파일을  Staging Area로 옮겨보자.

$ git add .

이 명령어를 사용하면 추가된 전체 파일을 Staging Area로 옮긴다. 특정 파일만 옮기고 싶다면 그 파일 이름(혹은 경로까지 포함한)을 add 다음에 적어주면 된다. 그리고 status를 확인해보면 다음과 같이 상태가 변경되어 있다.

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   src/main/java/Member.java

이 상태는 아직 .git directory 에 옮겨가기 전, 즉 커밋된 상태는 아니다. 커밋 이력은 다음 명령어로 볼 수 있다.

$ git log

참고로 다음 명령어를 통해 Staging Area에서 Working Directory로 다시 가져올 수 있다.

$ git rm --cached src/main/java Member.java

커밋을 해보자.

$ git commit -m "feat: Member 도메인 생성"
$ git log
commit 439fecbe4e0e3a9699950e5134cc7464e1edd82b (HEAD -> master)
Author: DOES <ldk980130@gmail.com>
Date:   Sat Feb 12 21:41:26 2022 +0900

    feat: Member 도메인 생성

커밋 후 로그를 확인해보니 정상적으로 커밋된걸 확인할 수 있다.


.gitignore

.gitignore파일이란 Git 버전 관리에서 제외할 파일 목록을 지정하는 파일이다. git으로 프로젝트를 관리할 때, 그 프로젝트 안의 특정파일들은 Git으로 관리할 필요가 없는 경우가 있다.

# 이렇게 #를 사용해서 주석

# 모든 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 config --global core.autocrlf true

줄 바꿈이 윈도우는 crlf, 맥에서는 lf이다. 이 차이점 때문에 깃 저장소를 다양한 OS에서 사용하게 되면 문제가 생길 수도 있다. 윈도우에서 core.autocrlftrue로 설정해주게 되면 깃에 저장할 때 carriage-return을 삭제하게 되고 다시 깃에서 윈도우로 가져올 때는 carriage-return을 붙여준다. 맥에서는 input으로 설정하면 깃에 저장할 때는 아무 일도 안하지만 깃에서 받아올 때 혹시 붙어있을 수도 있는 carriage-return을 삭제해준다.