Git 설치

Violet_Evgadn·2023년 9월 2일
0

Git

목록 보기
3/33

Git 설치 과정

1. Git 파일 다운로드

필자는 Windows 64-bit이므로 "64-bit Git for Windows Setup"을 설치했다.
이후 나오는 모든 선택지를 읽고 원하는 값을 선택 후 [Next]나 [Install] 버튼을 클릭하자.

2. Git 설치 확인

Git이 설치되었는지 확인하기 위해 Git Bash를 실행해 보자.

이후 나온 CLI 창에 "git" 명령어를 입력한다면 아래와 같은 Git 명령어에 대한 안내가 나올 것이다.
이 경우 Git 설치에 성공한 것이다.


로컬 저장소 만들기

1. 로컬 저장소 역할을 할 폴더 생성

필자는 바탕화면에 "local_git"이라는 폴더를 만들 것이다.
여기에서 중요한 것이 로컬 저장소 역할을 할 폴더 절대 경로에 한글이 포함되면 가끔 에러가 발생하는 경우가 있다.

이렇게 절대 경로에 한글이 포함될 경우 문제가 발생하는 경우가 생각보다 잦다.
따라서, 웬만하면 절대 경로에 한글을 포함하지 말자.

2. 폴더 내 텍스트 파일 생성

테스트를 위해 폴더 내 텍스트 파일이나 생성해 보자.
새로 생성할 파일 이름은 "README"로 설정해 보자.
그리고 README 파일에는 "Git 테스트를 위한 발걸음"이라는 내용을 저장해 두자.

3. Git Bash에서 로컬 저장소로 Working Directory 변경

Git Bash는 Linux 환경이다.
따라서 이전에 배웠던 cd 명령어와 절대 경로를 활용하여 접근할 수 있다.

cd [로컬 저장소 폴더 절대 경로]

4. 폴더에 로컬 저장소 역할 부여

1번 과정에서 생성한 폴더는 아직은 단순한 폴더일 뿐이다.
이 폴더가 로컬 저장소 역할을 하기 위해선 git init이라는 명령어를 입력해 줘야 한다.

이렇게 특정 폴더에 로컬 저장소 역할을 부여 하기 위해선 Git Bash나 명령어 창에서 해당 폴더에 접속한 후 git init 명령을 입력해서 주면 된다.

해당 폴더에 .git 폴더가 생성되었다면 성공적으로 로컬 저장소를 생성한 것이다.
하지만 대부분 .git 폴더가 보이지 않을 것인데, 이는 .git 폴더가 숨김 폴더이기 때문이다.
따라서 숨겨진 폴더를 보기 위해 보기 > 표시 > 숨긴 항목을 선택해 주자.

그럼 숨겨져 있던 .git 폴더가 보이게 되며, 우리가 생성한 폴더가 로컬 저장소가 되었음을 확인할 수 있다.


.git 폴더 설명

.git 폴더가 어떤 구성으로 되어 있고, 내부 구성 파일이 어떤 역할을 하는지 아는 것은 필수적이진 않다.
하지만 필자는 이 구성을 공부하며 Git 동작 방식에 대한 이해가 한층 깊어졌기에 한 번 정리해 보려 한다.

https://tecoble.techcourse.co.kr/post/2021-07-08-dot-git/
이 사이트에서 많이 공부했다.

.git 폴더

로컬 저장소에 생성되는 파일로써 Git으로 생성한 버전들에 대한 정보와 원격 저장소 주소 등이 저장된다.

objects

  • 2글자의 폴더 밑에 38글자의 파일이 여러 개 있는 구조

    • SHA1 해시값 40자 중 2자는 폴더명, 38자는 파일명으로 두어 식별자로 활용
  • 저장되는 파일 형태 : Blob, Tree, Commit

Blob

  • 소스 코드, 이미지 등 다양한 파일 데이터 저장

  • 파일의 메타 데이터는 저장하지 않고 데이터 자체만 저장

  • 동일한 소스 코드를 가진 파일이 여러 개 있더라도 하나의 Blob 파일만 생성됨

Tree

  • 파일 식별자, 파일 데이터의 해시값, 파일 이름 저장

  • 폴더 구조를 관리

  • 폴더가 파일과 폴더로 구성되는 것처럼 Tree는 "Blob + 또 다른 Tree"로 구성됨

  • 파일 식별자 구성 : 100644(읽기 파일 - Blob), 100755(실행 파일 - Blob), 040000(디렉터리 - Tree)

    • 커밋을 진행하면 업로드한 파일 권한이 644 혹은 755로 변경되기도 하는데 이는 git에서 지원하는 파일 시스템 모드가 2가지(100644, 100755) 2가지뿐이기 때문이다.

Commit

  • git으로 관리되는 가장 바깥 Tree의 해시값, author, commiter, 커밋 메시지가 저장됨

  • LinekdList 형태로 커밋들이 구성되어 있음

    • Parent 영역에 연결된 직전 커밋의 해시값이 저장되어 있음

/refs

git에서 관리하는 Branch들의 정보가 저장되어 있다.
로컬 저장소의 Branch들은 heads, 원격 저장소의 Branch들은 remotes에 저장되어 있으며, 각 브랜치 별 마지막 커밋의 해시값을 저장하고 있다.

  • 현재 로컬 저장소가 가르키고 있는 브랜치

  • HEAD는 특정 커밋의 해시값을 저장하고 있음

HEAD는 특정 브랜치에 대한 정보를 가지고 있는 것이 아니라 단순히 커밋의 해시값을 저장하고 있다는 것이 중요한 점이다.

나중에 Git을 사용하다 보면 이 HEAD가 매우 큰 역할을 수행한다.
HEAD를 움직임으로써 현재 소스 코드를 과거로 되돌릴 수도 있으며, 다른 Branch로도 이동시킬 수 있다.

이때 HEAD를 이동시킬 경우 HEAD가 이동된 커밋의 소스 코드를 모두 읽은 뒤 참조한다기보다는, 단순히 해당 커밋 소스 파일로 현재 파일을 대체한다고 보는 것이 맞다.

과거에 빨간색이었던 공이 파란색이 되었을 때 만약 빨간색 공을 다시 불러오고 싶다면 HEAD를 빨간색 공으로 변경시키면 될 것이고, 이는 공을 빨간색으로 다시 칠하는 것이 아닌 과거에 존재했던 빨간색 공을 타임머신을 활용해 가져옴으로써 원하는 결과를 끌어낸다고 보면 된다.

Index

  • Stage에 있는 파일들
    • git add를 진행하면 index 파일들이 수정됨
    • Stage에 등록된(스테이징 된) 내용이 기록됨

Git은 Index와 마지막 커밋을 비교하여 커밋할 파일의 존재 여부와 수정 여부를 확인할 수 있다.
나중에 Git의 스냅샷에 대해 배울 때 알아두면 좋은 개념이므로 일단 외워두기라도 하자.

작업폴더(HEAD)와 저장소(Repository) 사이의 가상 준비 영역(Staging Area)로써 다음에 커밋할 것들과 Staging Area에 등록된 파일들을 저장하고 있다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글