상세 컨텐츠

본문 제목

Git - 기본 개념과 커밋의 이해

카테고리 없음

by maymj9798 2024. 7. 14. 13:23

본문

#Git 의 기본 개념

 

이런식으로 발표 준비를 해본적 있죠? 하지만 중간에 어떤 내용이 바뀌었고, 뭘 썻는지 보려면 모든 

모든 파일을 열어봐야지만 알 수있습니다. 이를 방지하기 위해 ‘버전 관리’ 를 해야합니다. 버전관리는 파일을 시간의 순서로 정리하고 나중에 꺼내올 수 있는 시스템을 의미합니다. 관리를 하면 지난 과정을 전체 리뷰가 가능해지고, 잘못 된 부분이 발생하면 이전으로 돌아갈 수 있습니다. 새로운 시작이 가능한거죠. 컴퓨터 포맷과정과 유사하다 보면 됩니다.

이런식으로 하나의 파일에 보기 쉽게 적용이 됩니다.  이는 동시협업 과정에서도 보기 좋게 해주는 역할을 하게 되죠. 또한 다른 컴퓨터로 작업물 보내기도 가능합니다. 작업물을 보낸다의 의미는 백업본을 만드는 것과 동일합니다. 백업본이 있기 때문에 문제 발생 시 , 다시 가져와 작업이 가능한거죠. 여기서 ‘다른 컴퓨터’ 의 역할을 대신 해주는게 ‘GITHUB’ 입니다. 위에서 본 깃은 버전관리 / 지금 본 깃허브는 외부 컴퓨터 역할입니다.(원격 저장소) 깃허브의 장점은 내가 올려놓은 데이터를 모두가 볼 수 있다는 점입니다. 그럼 이 파일을 다른 사람이 가져가서 수정 후 재업로드도 가능해지겠죠? 이런 방식으로 협업이 이루어 집니다.

깃의 작업을 정리해보면, 

버전관리 / 동시협업 (각자 파일 만들어서 붙이기) / 다른컴퓨터에 작업물 보내기

 

 

#깃설치하기

 

https://git-scm.com/ 로 이동 후 파일을 다운 받아줍니다. 실행 후 GIT BASH만 조심해서 설치해줍니다.



#레파지토리 (repository) - 저장소

 

깃을 활용하여 프로젝트를 진행하면, 먼저 가장 큰 폴더인 디렉토리를 만듭니다. 이걸 앞으로 ‘프로젝트 디렉토리’ 라고 칭하겠습니다. 이 안에 프로젝트의 모든 디렉토리와 파일을 넣겠죠. 그리고 각 시간마다 만들어지는 버전을 깃에 저장하며 버전을 관리 할수 있습니다. 

깃이 이런 정보를 저장하는 곳을 ‘레퍼지토리’ 라고 합니다. 여기에는 초기버전부터 완성버전까지 전부 들어 있는거죠. (.git 으로 저장됩니다) 

다음으로 ‘커밋’입니다. 프로젝트디렉토리의 모습을 버전으로 남기는 걸 커밋한다 라고 표현합니다. 지금까지 만든 과정을 커밋하면 버젼1로, 조금 더 만들고 커밋하면 버전2로 남겨지면서 버전관리가 되는거죠. (커밋의 결과물도 버젼1이 아닌 커밋1이라고 부릅니다) 

 

쉽게 정리하면, 커밋은 스크린샷, 레파지토리는 폴더에 저장(버젼관리) 으로 봐도 될 것 같습니다.



#프로젝트 만들어보기



1.프로젝트 디렉토리 

 

그럼 실전에서 진행해보겠습니다. 먼저 깃에 프로젝트 디렉토리를 만들겠습니다.

mkdir 프로젝트디렉토리명

다음으로, cd Mathtool 로 이동하고 작업을 시작하면, Mathtool이 프로젝트 디렉토리가 되는 개념입니다.



2. 깃시작

 

그리고 깃으로 어떤 작업을 하려면 git 으로 시작하고 커맨드를 입력하면 됩니다.

지금은 버젼관리 시작을 위해 init을 넣어보죠

git inint

그러면 밑에 문장이 출력되면서, 비어있는 레파지토리를 생성합니다. 레파지토리를 만들었기 때문에 이제부터 버젼관리가 가능해진거죠.

폴더를 확인하면 .git이 정상적으로 생성된걸 볼 수있습니다. .git안에는 깃이 버젼관리를 하기 위해 여러 파일을 가지고 있습니다.

 

3.파일생성

 

메모장이나 vs코드를 통해서 파일을 작성합니다. 파일작성 후 저장 경로를 지정해주면 되는데요,

pwd 를 통해서 경로 확인 후, Mathtool 을 찾아 저장해주면 됩니다. 저장 후 ls 를 하면 추가 된 모습을 볼 수 있습니다.

 

4. 커밋초기 설정하기

 

먼저해줘야하는 작업이 있습니다. 내가 누구인지 / 이메일 / 변경사항 을 차례로 적어줘야 합니다.

git config user.name “내이름”

git config user.email “ckx12@naver.com

위 두가지를 초기에 작업 해줘야합니다.

 

5. add 로 스테이징 하기

 

위 두가지를 잘 마무리 했으면 add 할 상태가 된것 입니다.

커밋을 위해서는 파일을 관리대상으로 지정해줘야합니다. 그렇지 않으면

untracked 오류가 뜨게 되죠.

git add 파일명 을 적어주면 관리대상으로 지정하는 거죠. 두가지 파일을 만들었으니 각각 add해줍니다.

add 를 통해서 파일을 스테이징 하는거죠.

*참고로 디렉토리를 새로 만들고 안에 파일들을 만들었으면,
새로만든 디렉토리 하나만 add해도 하위 파일은 전부 같이 add됩니다.

 -> 여기서는 git add MathTool/ ( / 이거 써주면 디렉토리라는 것을 표현하게 됩니다.  )

 

*상태??

깃의 파일은 ‘상태’ status를 가집니다. 

먼저 untracked / tracked 으로 나뉘고

tracked 은 다시 staged / unmodified / modified 로 나뉘게 됩니다.

 

-untracked : git add 를 해주지 않았을때, 추적되지 않은 상태입니다

-tracked : git add 를 해서 추적되는 상태입니다.

-unmodified : 전혀 바뀌지 않은, 원본 상태입니다.

-modified : 변경사항이 있는 상태입니다.

-staged : add를 통해서 스테이징 에어리어에 올라온 상태입니다.

 

*add 취소하기 

add 를 통해서 스테이징 한 파일을, 저장안하려면 어떻게 할까요?

git reset  파일명 

을 통해서 스테이징 에어리어에 있는 파일을 제거할수있습니다.

(하지만 아직 수정사항은 워킹디렉토리에 남아있어서 언제든 다시 add 할수 있습니다.)

 

(5-1) 확인하기

git status 를 통해서 현재 어떤 상태인지 확인이 가능합니다.

첫번째 노란 박스는 커밋에 반영될 사항을 의미합니다.

두번째 초록 박스는 커밋에 미반영 사항입니다. 

해석해보면 calculator.py는 add로 스테이징 에이리어로 옮겨졌고, 커밋하면 변경사항이 저장됩니다.

반면에 License는 변경사항이 반영되지 않고 원본 그대로 커밋이 되는거죠.

그래서 커밋 전에 전부 다 add 했는지 확인하기 위해 status를 활용하시면 됩니다.

 

(5-2) 한번에 add하기

git add . 

하면 현재 프로젝트 디렉토리 내 변경사항을 한번에 add 해줍니다.

실무에서 정말 많이 씁니다.




6. 커밋하기

 

이제 커밋을 할 수 있습니다.

반드시 수정사항을 옵션을 활용해서 커밋메시지로 남겨줘야합니다. 

git commit -m “수정사항을 자세하게 설명” 

이러면 커밋이 완성된겁니다.

루트커밋은 첫번째 버젼, 뒤에는 추가사항과 변경내용이 차례로 나옵니다.

 

  • 커밋메시지 작성 가이드

 

#깃의 작업영역 (중요)

깃에는 세가지 영역이 있습니다. 

첫번째, 워킹디렉토리는 작업영역입니다. 위에서 만든 Mathtool 디렉토리가 지금의 워킹디렉토리죠.

두번째, 스태이징 영역입니다. 여기에는 git add를 한 파일들이 저장됩니다.

세번째, 레파지토리 영역입니다. 여기는 커밋이 저장됩니다. (버젼저장소)

→ 워킹에서 파일을 만들고, add로 스테이징에 올리고, 커밋으로 버젼저장한다.

 

그럼 A,B모두 수정 후 B만 스테이징하면 어떻게 될까요? 

커밋 후 모습은 A는 그대로, B만 수정된 모습으로 버젼2로 저장될것입니다.