깃 개념 잡기

깃 저장소 생성

폴더와 깃 저장소

깃 저장소는 일반적인 폴더와 동일하다. 차이점이라고 한다면 숨겨진 폴더가 존재하는데 깃 저장소에는 해당 폴더에 버전관리에 필요한 파일 및 변경 이력 등을 기록한다.

초기화

저장소를 생성 하려면 초기화 작업이 필요하다.

초기화 명령으로 숨겨진 영역을 생성한다.

  • git init {경로명}
    • 새로운 폴더나 기존 폴더에서 사용 가능.
    • 로컬 저장소를 생성하는 명령이다.
dk@DongKyus-MacBook-Air git-study % mkdir 3.1-make-repo
dk@DongKyus-MacBook-Air git-study % cd 3.1-make-repo 
dk@DongKyus-MacBook-Air 3.1-make-repo % git init
힌트: Using 'master' as the name for the initial branch. This default branch name
힌트: is subject to change. To configure the initial branch name to use in all
힌트: of your new repositories, which will suppress this warning, call:
힌트: 
힌트: 	git config --global init.defaultBranch <name>
힌트: 
힌트: Names commonly chosen instead of 'master' are 'main', 'trunk' and
힌트: 'development'. The just-created branch can be renamed via this command:
힌트: 
힌트: 	git branch -m <name>
/Users/dk/Documents/git-study/3.1-make-repo/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다
dk@DongKyus-MacBook-Air 3.1-make-repo %

숨겨진 폴더 = .git폴더

dk@DongKyus-MacBook-Air 3.1-make-repo % ls -a 
.	..	.git

깃폴더는 깃으로 관리되는 모든 파일 및 브랜치 등의 이력을 기록한다.

깃 저장소를 통째로 복사하고자 할 때는 숨겨진 깃 폴더까지 같이 복사해야 한다.

소스트리와 연결

새 저장소를 생성하여 연결

  • 로컬 저장소 생성

    Untitled

  • 폴더 지정 및 이름 지정

    Untitled

  • 연동된 깃 저장소 확인

    Untitled

기존 저장소와 연결

  • 저장소 추가 하기

    Untitled

  • 폴더 선택

    Untitled

  • 연동된 깃 저장소 확인

    Untitled

워킹 디렉토리

워킹 디렉토리 란?

깃은 VCS 특성 떄문에 저장 공간을 논리적으로 분리.

깃은 저장 공간을 크게 작업하는 공간(working)과 임시로 저장하는 공간(stage), 실제 저장하여 기록하는 공간(repository)으로 나눈다.

워킹 디렉토리는 말 그대로 작업하는 공간을 나타낸다. 로컬 저장소에 접근하고 파일을 실제로 생성 및 수정하는 공간.

파일의 untracked 상태와 tracked 상태

깃의 추적 개념에 대해 알아본다.

깃이 다른 VCS 보다 뛰어난 것은 지정된 파일들의 모든 것을 추적하는 관리 시스템이기 때문이다.

  • untracked 상태

    실제 작업중인 파일은 워킹 디렉토리 안에 있다. 현재 작업 중인 소스를 담고 있다. 해당 공간은 사용자의 작업 공간이라고 생각하면 되며, 깃이 자동으로 관리해주지 않는다.

    여기에 새로 생성된 파일은 모두 추적 되지 않는 상태(untracked) 이다.

    이 파일을 관리하려면 깃에 추적 하라고 통지를 해주어야 한다.

  • tracked 상태

    워킹 디렉터리에 새 파일을 추가하면 untracked 상태이다. 이를 별도로 명령을 실행하여 추적 상태(tracked)로 만들어 주어야 한다. 이때 git add 명령을 사용한다.

    깃은 요청받은 파일들만 추적 관리 한다. 모든 걸 다 추적할 순 없다.

    관리할 파일 목록에 등록된 상태를 tracked 상태라고 한다.

스테이지

스테이지는 임시로 저장하는 공간을 의미하며, 워킹 디렉터리에서 제출된 tracked 파일들을 관리한다. 해당 영역은 나중에 배울 커밋 작업과 매우 연관이 많다.

스테이지 = 임시 영역

워킹 디렉터리에서 작업이 끝난 파일을 스테이지로 잠시 복사, 스테이지가 임시 영역이라고 파일의 콘텐츠 내용을 직접적으로 다 가지고 있는 것은 아니며, 단지 커밋하려는 파일의 추적 상태 정보들만 가지고 있는다.

파일의 스테이지 상태 확인하기.

  • git status
dk@DongKyus-MacBook-Air 3.1-make-repo % git status
현재 브랜치 master

아직 커밋이 없습니다

커밋할 사항 없음 (파일을 만들거나 복사하고 "git add"를 사용하면 추적합니다)
# 파일 상태 확인 명령
dk@DongKyus-MacBook-Air 3.1-make-repo % git ls-files --stage 

스테이지에 등록된 파일은 다시 stage 상태와 unstage 상태로 구분된다. 제외하고 싶은 파일이 있다면 .gitignore 파일에 등록한다.

파일의 stage 상태와 unstage 상태

워킹 디렉토리에서 스테이지 영역으로 등록된 파일은 모두 untracked 에서 tracked 상태로 변경된다.

스테이지 영역은 파일을 stage 상태와 unstage 상태로 구분하며, 깃이 변화 이력을 기록 하려면 최종 상태가 stage 상태여야 한다. unstage 상태라면 파일에 변화가 있다는 것을 의미한다.

스테이지 영역에 있는 파일과 워킹 디렉터리 안에 있는 파일 내용에 차이가 있을 때 unstage 상태가 된다.

unstage 상태라고 해서 실제 파일이 없어진 건 아니며, 스테이지 목록에서 제외된 것이다. git add 명령을 사용하면 스테이지에 다시 추가할 수 있다.

파일의 modified 상태와 unmodified 상태

스테이지는 수정한 파일과 원본 파일을 구분하기 위해 modified 상태와 unmodified 상태로 표현한다.

  • modified 상태

    깃은 tracked 상태인 파일만 수정 여부를 관리한다. tracked 상태인 파일이 수정되면 스테이지는 이 파일 상태를 modified 상태로 변경한다.

    그러면 수정된 파일은 스테이지에서 잠시 제외된다.

    modified로 변경된 파일은 다시 스테이지로 재등록 해야 한다. (git add 명령 사용)

  • unmodified 상태

    tracked 상태 이면서 스테이지에서 한 번도 수정하지 않은 원본 상태를 의미한다.

    스테이지에 파일을 등록한 후, 어떠한 수정도 하지 않았다면 unmodified 상태입니다.

  • 워킹 디렉토리와 스테이지 상태 구분

    Untitled

파일의 상태 확인

status 명령어로 깃 상태 확인

dk@DongKyus-MacBook-Air 3.1-make-repo % git status
현재 브랜치 master

아직 커밋이 없습니다

커밋할 사항 없음 (파일을 만들거나 복사하고 "git add"를 사용하면 추적합니다)
dk@DongKyus-MacBook-Air 3.1-make-repo %

소스트리에서 깃 상태 확인

Untitled

스테이지에 올라간 파일과 올라가지 않은 파일 구분하여 표시

새 파일을 추가하면 untracked 상태 → 올라가지 않은 파일로 구분됨

파일 관리 목록에서 제외 : .gitignore

  • 깃은 tracked 상태인 모든 것을 추적 관리.
  • 추적이 필요하지 않은 파일 등을 공유 할 때 .gitignore 설정 파일을 지정하여 공유를 막음

.gitignore 파일

이 파일에 작성된 파일 및 확장자 등은 추적하지 않음

저장소 폴더 최상위에 두어야 함

.gitignore 파일 표기법

# 주석 표기
dbinfo.php # 특정 파일 표기

# 오프젝트 파일 전체 제외
*.obj

# 제외하면 안됨
!config.obj # config.obj 파일을 제외하지 않음

# 현재 디렉터리 안에 있는 파일 무시
/readme.txt

# /pub/ 디렉터리 안의 모든 것 무시
/pub/

# doc 디렉터리 아래의 모든 .txt 파일 무시
doc/**/*.txt

깃 저장소 복제

초기화 명령(git init)은 새 저장소를 생성하는 방법 중 하나이다.

외부 저장소를 로컬 저장소로 생성하는 것을 ‘깃 저장소 복제’ 라고 함.

공개 저장소

불특정 다수에게 공개된 저장소 호스팅 서비스, 예를 들어 깃헙이나 비트버킷 등이 있음.

다운로드 vs 복제

깃을 이용하여 저장소를 복제하면 최종 코드 뿐만 아니라 중간에 커밋 같은 변화의 모든 이력을 내려받을 수 있다.

또한 일부 코드를 변경하여 기여하는 것도 가능하다.

복제 명령어

$ git clone 원격저장소URL 새폴더이름

© 2024. Chiptune93 All rights reserved.