Github에 계속 작업을 하다보니 한번 정리해보면 좋겠다는 생각에 작성합니다.
본 필자는 Mac 환경에서 작업하고 있음을 알립니다.
Git을 사용하다보면 무슨 원리로 git에 올라갈까라는 생각을 해본적이 있을 것이다.
우리가Git을 사용하면서 단순히 파일 업로드/다운로드를 하는 것이 아닌
Git의 Status와 파일 Upload 개념과 원리에 대해 정리해 보려고 한다.
스테이징(Staging)이란?
작업트리에서 변경사항을 임시로 저장하는 행위를 스테이징이라고 한다.
임시 저장된 파일은 스테이지에 올라간다.
Git에 저장소를 하나 만들고
git remote add를 통해
파일을 연결했다면 해당 repository에 대해 로컬과 연결된다.
여기서 작업트리의 파일은modified상태와untracked상태로 구분할 수 있다.
처음 생성한 파일에 대해서는 untracked 파일
이미 생성한 파일은 modified 파일이라고 생각하면 된다.
즉, git에 push를 하기 전 모든 상태들은 tracked 상태라고 보면 된다.
그리고 tracked 상태를 세부적으로 나누면 3가지로 나눌 수 있는데
- Unmodified(수정되지 않음)
- Modified(수정중)
- Staged(커밋으로 저장소에 기록되기 전)
이를 잘 기억해 두자.
파일을 수정하고 나면
add->commit->push의 과정을 거쳐서 파일을 수정한다.
글로만 보면 감이 안올것 같아 그림을 통해 확인을 해보면
git add는 파일이 Staged(커밋으로 저장소에 기록할)상태가 되며
그 때는 내 로컬 working directory에서 staging area로 이동된다.
쉽게 말하면 git에 업로드 대기 상태라고 생각하면 쉽다.git commit상태에서 파일은 Unmodified(수정되지 않음) 상태이다.
여기서는 staging area에서 localrepo로 이동하며
또한 내가 작성한commit에 대해서는
아직까지는 내 PC local에서 기록중이다.git push에서는 내가 수정한 파일과 작성한 commit에 대해서 이제
내가 연결해둔 remote repository에 올리는 명령어이다.
이때부터는 원격 디렉토리에 내가 올리는 과정이다.
밑에있는pull,checkout,merge에 대해서는 다음 주제로 다루겠다.
그렇다면 해당
add,commit,push에 대해 사용방법을 알아보자.
명령어를 알아보자면 다음과 같다.
- git add [변경사항 저장을 하는 파일 경로]
- git commit -m "Commit Message"
commit이란?스테이지의 파일이 문제가 없는 경우 작업을 완료하는 행위라고 하며
여기서-m은 commit을 하려면 원래 vi 에디터에 들어가서 commit을 작성해야 하지만
이러한 귀잖은 과정을 스킵해주는 것이라고 생각하면 될 것 같다.
- git push -u origin [내가 사용하는 브런치 이름]
처음 파일을 만들었다면 기본값으로 master로 되어 있을 것이다.
이것은 내가 원하는대로git branch명령어를 통해 바꿀 수 있으며
메인 프로젝트의 branch는main으로 많이 사용한다.
branch는 간단히 작업 프로젝트를 나누는 것이라고 생각해도 되며
이 또한 다음 주제에서 세세하게 다뤄보겠다.
저번 포스트에서 빠르게
Git에 프로젝트를 올리는 것을 알아보았다.
이번에는 좀 세세하게 다뤄볼까 한다.
- 먼저 저번에 연결해 두었던 Spring Boot 파일을 열어보자.
스프링 부트를 처음 시작할 때 많이 하는 것이 propoties파일을 yml파일로 바꾸는 작업이다.
내가 이 파일을 바꾼다고 쳤을 때 리펙토링을 눌러 이름 바꿔주려고 한다.
- 이름을 바꿔주었다면 인텔리제이 기준 파일이 파란색으로 바뀔 것이다.
이는 내가 작업하던 파일에 수정이 일어났다는 것을 의미하며 이는 곳git add를 통해
파일을 업로드할 수 있다.
또한commit으로 내가 작업한 것에 대해 설명을 작성할 수 있다.
- 여기서 만약 내가 작업한 부분에 대해 세세하게 커밋을 하려면
git add .을 사용하는 것이 아닌
git add [해당 파일 경로]를 통해 커밋을 할 파일을 제대로 정해줘야 한다.
예를 들어
내가entity와Controller를 생성해서 파일을 만들었다고 해보자.
그런데 두 파일의 커밋을 다르게 주고 싶다는 생각을 했다.
그런데git add .으로 모든 파일에 변경사항을 선택했다면
그 변경된 모든 파일에 대한 커밋은 하나로 통일될 것이다.
하지만 내가 선택한 파일에 대해 커밋을 주기 위해서는
아래와 같이 내가 변경할 파일에 대한 부분 커밋을 해주면 된다.
- 위와 같은 방법으로 Commit을 모두 완료했다면 이제
git push를 통해
내 로컬에서 github repository로 올려보면
필자는 main 브런치를 사용했기에 origin 뒤에 main(브런치 이름)이 들어왔다.
해당 repository의 커밋을 확인해 보면
내가 선택한 파일에 따라 커밋이 잘 작성된 것을 확인할 수 있다.
저번 포스트에서 자세히 다루지 않았던
git의add,commit,push에 대해 알아보았다.
다음에는 내 프로젝트에 방향성에 맞게branch하는 방법과
브런치를 옮겨다니는checkout가져오는pull에 대해 다뤄보려한다.
원리를 잘 기억해두자!