Git 기본 및 기본 구조

선비Sunbei·2023년 1월 17일
1

Git & GitHub

목록 보기
2/6
post-thumbnail

Git의 시작

Git Bash를 통해 Git을 실행할 수 있다.
Git Bash는 리눅스의 Bash Shell 기반이다.
그렇다보니 리눅스의 Shell을 기본적으로 다룰 수 있다면 조금 더 편하다.
딮한 수준이 아니라 쉘 내에서 폴더 이동, 경로 확인 정도의 간단한 명령어만 알면 편하다.

만약 셸을 통해서 경로르 변경하기 싫다면 아래와 같이 그냥 Git Bash를 실행하면 자동으로 그 경로로 시작된다.

시작 이전에..

git config --global user.email “메일 주소”
git config --global user.name “이름”
Git Hub 계정과 무관하게, 나중에 누가 commit했는지 구분하기 위해서 이름과 이메일을 작성해야 한다. 해당 명령어를 입력해야지 진행이 된다.

Git의 기본, 기본 구조 및 원리

Git은 이전 글에서 적었다시피 개인 PC 내에서 버전 관리를 위해서 만들어졌다.
여담으로 Git은 Linux 운영체제를 만들면서 버전관리를 위해서 처음 만들어졌다고 한다.
Shell에서 git init 명령을 실행시키면 현재 폴더를 로컬저장소로 만든다.

git은 폴더 단위로 로컬저장소를 만든다.
로컬저장소라는 뜻으로 .git 폴더를 만든다.

(README.txt는 새로만들기->텍스트 로 내가 만든 것이다.)
.git 폴더는 숨김파일로 되어있어서, [보기] 탭에서 '숨김항목도 보기'를 통해서 볼 수 있다.
해당 폴더가 있으면 이 위치가 로컬저장소의 루트 폴더란 것을 알 수 있다.
로컬저장소를 만들 때, 폴더 위치를 주의해야 한다. 후에 이 로컬저장소를 Git Hub에 올릴텐데 중요한 정보가 든 폴더에서 로컬저장소를 만들 시 하위 폴더 모두가 Git Hub에 올라가 공개된다.
실제로 한 유튜버의 썰을 듣기로 AWS의 비밀키가 포함된 폴더를 Git Hub에 올려서 해킹 당한 후 코인 채굴로 사용돼서 돈이 어마어마하게 들었다는 얘기를 들은 적이 있다.

다시 본론으로 돌아와서 .git 폴더에는 로컬저장소에 대한 정보들이 모두 담겨있다.
그런데 로컬저장소의 루트 폴더안에 들어있으면 모든 파일이 Git에서 관리되고 있느냐? 그건 아니다.

Git은 스테이지라는 용어를 써서 현재 관리하고 있다고 생각한다.
정확히는 .git/index 파일에 현재 관리하고 있는 파일들을 모두 작성한다.
(index라는 이름에서 알 수 있듯이 말그대로 index만 저장되어있고, 이 index가 가르키고 있는 것은 .git/object/ 폴더 내에 있는 파일들을 가리킨다.)

따라서 Git한테 '이 파일을 관리해줘'라고 우리가 명령어를 통해서 알려줘야 한다.

그게 바로 git add 명령어이다.
그럼 .git/object/ 폴더에 해당 파일에 대한 파일을 만들고, .git/index 파일에 ./git/object/~ 의 파일에 대한 것을 작성해 스테이징 상태라고 알려준다.
Git에서는 이렇게 관리되고 있는 파일을 '추적 중인 파일'이라고 부른다.

다음으로 스테이지에 모든 파일들을 올렸으면 우리는 해당 버전을 저장하려고 한다.
이때 사용하는 명령어가 git commit이다. -m 옵션은 message로 해당 버전의 커밋에 대해서 메시지를 남기려고 할 때 사용한다. 주로 기능 추가했다는 것에 대한 메시지를 남긴다.

이렇게 하면 우리는 해당 버전이 저장되었다고 할 수 있다.
이후부터는 파일을 수정하더라도, 다른 버전을 저장하든 해당 버전으로 돌아올 수 있다.

그런데 커밋된 상태에서 파일이 수정되면어떻게 될까?
우리는 이에대해서 다시 add를 통해 스테이지에 올려야 한다.
그 이유는 추적중인 파일이더라도 변경되어 상태가 다르기 때문이다.
Git에서 파일에 대한 상태는 4가지가 존재한다.

추적 여부파일 상태설명
x추적 안되는 상태add가 한 번도 되지 않은 파일의 상태
o스테이징 상태add로 인해 추적하고 있는 상태
o수정 없음 상태이전에 커밋 된 것에서 변경 사항이 없음
o수정함 상태이전에 커밋 된 파일이 수정된 상태

이에대한 것으로 파일 수정 후 commit 시 내용이 변경되었다면서커밋을 거부한다. 따라서 git add 명령어로 스테이징 상태로 변경해줘야 한다.

add 후에 commit를 해줬다.
git log 명령어는 현재까지 버전 저장한 상태들 즉, 커밋에 대한 로그를 볼 수 있다.
Git은 Commit에 대한 구분을 하기 위해서 SHA1로 해시한 값들로 구분한다. (게임에서 ID로 구분하듯이)

이제 우리가 2번째 상태니까 원래대로 First Commit 상태로 돌아가려고 한다.
이때 사용하는 것이 git checkout이다.

다음과 같은 명령어로 예전 커밋 상태로 돌아갈 수 있다.

반대로 최신 커밋으로 돌아가려면 git checkout - 명령어를 이용하면 된다.
(참고로 git checkout - 전에 git log를 보면 Second Commit이 안보이는 것을 확인 할 수 있다. 이는 예전 버전으로 오면서 해당 버전과 관련된 commit만 보여주기 때문이다. git log --all 명령어를 통해 모든 커밋들을 다시 볼 수 있다.)

0개의 댓글