일상속에서 버전이라는 말은 흔히 접할 수 있습니다.
무언가를 만들때 100%완벽하게 만들수도 없을 뿐더러 기술은 하루가다르게 발전을 하기 때문이지요.
소프트웨어 개발에서는 수정 내용이 쌓이면 새로운 번호를 붙여 이전 상태와 구별을 하게 되는데 이런 번호를 통해 구별되는 것을 버전이라고 합니다.
깃을 이용하면 파일의 이름은 그대로 유지하면서 파일에서 무엇을 변경했는지를 변경 시점마다 저장할 수 있습니다.
또 각 버전마다 작업했던 내용들 확인하수 있고 이전 버전으로 되돌아 갈수도 있습니다.
그렇다면 어떻게 깃으로 버전관리를 할까요?
작업 트리(working tree)라는 디렉터리는 파일수정, 저장 등의 작업을 하는 디렉터리입니다.
다른말로 작업 디렉터리라고도 합니다.
만약 GitTest를 git init 명령을 통해 초기화 시켜 저장소로 만들었다면 GitTest디렉터리가 작업트리가 됩니다.
작업트리는 우리 눈으로 볼수 있는 디렉터리입니다.
이후 스테이지(stage)라는 버전으로 만들 파일을 대기하는 디렉터리가 있습니다.
스테이징 영역이라고 부르기도 합니다.
만약 작업트리에서 10개의 파일을 수정했으나 4개의 파일만 버전으로 만들고 싶다면 4개의 파일만 스테이지로 넘겨주면 됩니다.
이제 저장소(repository)는 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳입니다.
자 정리해보면 만약 hello.txt파일 문서를 수정하고 저장했다면 그 파일은 작업트리에 있게됩니다.
우리는 작업트리에 있는 파일중 버전으로 만들고 싶은 파일은 add명령으로 스테이지로 올리게 되며 스테이지에서 커밋(commit)명령을 통해 저장소에 올립니다.
작업트리 -> 스테이지 -> 저장소 순서가 되겠지요?
git status
git status 명령을 사용하면 깃의 상태를 확인 할 수 있습니다.
깃의 상태를 확인하기 위해 해당 명령을 입력해보겠습니다.
On branch master의 경우 현재 master 브랜치에 있다는 의미입니다.
No commits yet은 아직 커밋한 파일이 존재하지 않는다 라는 의미입니다.
Untracked files는 버전관리를 하지 않은 파일입니다.
nothing to commit은 현재 커밋할 파일이 없다는 의미입니다.
vim명령을 이용해 새로운 파일을 만들어 보겠습니다.
vim hello.txt
hello.txt파일에는 1이라는 글자를 적어 두었습니다.
(vim으로 파일을 만든후 insert상태로 바꾸어 1을 입력하고 :wq를 입력하여 종료하였습니다)
잘 만들어져 있죠?
버전관리를 하지 않은 파일이라고 hello.txt도 뜨네요!
작업 트리에서 파일을 만들거나 수정했다면 스테이지에 올릴수 있습니다.
이러한 과정을 '스테이징' 또는 '스테이지에 올리다'라고 합니다.
자 이제 이 파일을 스테이지로 올려볼까요?
git add hello.txt
스테이징을 하는 명령어는 git add 명령어 인데 명령 뒤에 파일명을 붙이면 해당파일이 스테이징 되고 .을 붙으면 모든 파일이 스테이징 됩니다.
사실 원래라면 커맨드창에 아무 내용도 안나오고 다음 명령을 입력받아야 정상인데 warning이 발생했습니다.
깃은 리눅스 기반이고 윈도우에서는 git bash프로그램을 거쳐서 깃 명령을 사용합니다.
윈도우의 줄바꿈 문자와 리눅스의 줄바꿈 문자가 다르기 때문에 방생하는 warning인데 EOL(end of line)는 Enter를 눌렀을 때 그 위치에 삽입되는 문자입니다.
윈도우에서 문서를 저장했을 경우에는 줄이 바뀌는 자리에 CR문자와 LF문자가 삽입됩니다.
하지만 맥이나 리눅스에서는 문서를 저장 했을때 줄이 바뀌는 자리에 LF라는 문자가 삽입되기 때문에 warning이 발생하는데 별도의 조치가 필요한 warning은 아니므로 크게 신경쓰지는 않으셔도 됩니다.
이번에는 다시한번 git status명령을 이용해 상태를 확인 해보겠습니다.
Changes to be committed라는 문구가 나오며 new file: 이라는 수식어가 붙습니다.
commit 명령을 내리면 hello.txt를 커믹할 것이다 라는 의미로 이해하면 되겠네요.
스테이지에 파일이 있다면 버전을 만들수 있게됩니다.
스테이지에서 저장소로 올리는 과정을 커밋이라고 하는데 커밋을 할때는 확인 메세지를 기록해두어야합니다.
변경내용등과 같은 내용을 저장하면 좋겠죠?
git commit -m "message"
커밋의 기본 명령은 git commit 이지만 -m 옵션을 붙이면 커멧 메세지도 함께 작성 할수 있습니다.
또한 커멧 메세지는 영문과 한글 모두 작성 할 수 있지만 영문으로 작성하는 것을 권장드립니다.
( 혹시 나중에 외국인이 볼수도 있기때문이기도하죠... )
다시한번 status명령으로 상태를 확인해보면 아직 커밋된 내용이 없다는 메세지인 No commits yet 문구가 사라진걸 볼수 있습니다.
그러면 test.txt파일도 커밋하고 다시한번 상태를 확인해보겠습니다.
git add .
git add test.txt 로 올려도 되지만 굳이 한번 .을 사용해보았습니다.
.은 모든이라는 의미이며 만약 test.txt파일 이외에도 여러 파일이 있다면 모든 파일이 스테이징됩니다.
다시한번 상태를 확인해보니 다른 문구는 사라지고 notting to commit, working tree clean 이라는 문구가 추가되었네요
git log
git log 명령을 이용하여 방금 커밋한 버전에 어떤 정보가 들어있는지 확인할수 있습니다.
위에서 부터 순서대로 커밋해시 / 작성자 / 버전 만든 날짜 / 커밋 메세지 입니다
commit이라는 항목 옆에 영문과 숫자로 이루어진 암호문 같은 문자열을 커밋 해시 또는 깃 해시라고 합니다.
커밋을 구별하는 고유 아이디라고 이해하시면 됩니다.
그리고 그 오른쪽에 HEAD -> master 라는 것은 버전이 가장 최신상태라는 것을 의미해줍니다.
Author 항목은 버전을 누가 만들었지를 보여주며 Date는 언제 만들어 졌는지를 보여줍니다.
그리고 그아래 작성된 내용이 커밋 메시지입니다.
이 모두를 커밋 로그라고 합니다.
다음 작업을 위해서 hello.txt파일에 2라는 글자를 추가해서 다시커밋해보겠습니다.
그리고 다시 2를 지우고 two로 바꾸고 저장해보겠습니다.
이렇게 버전이 바뀌게 되면 어디가 수정되었는지 어떻게 확인할까요?
git diff
-2 2가 사라지고 +two two가 추가되었다는 의미입니다.
다른 테스트를 위해 다시 2로 수정해놓겠습니다!
그리고 2아래에 3이라는 글자도 써서 다시 저장해주세요!
vim hello2.txt
hello2.txt파일을 만들어서 a, b, c, d를 작성해보겠습니다.
이전에 커밋해놨던 hello.txt파일은 Change not staged for commit이라는 문구가 있습니다.
변경된 파일이 아직 스테이징 되지 않았다는 의미입니다.
또 파일이름 옆에는 modified라고 되어있는 걸로 봐서는 hello.txt가 수정된 내용이 있다는 것을 알수있습니다.
깃은 한번이라도 커밋한 파일은 수정여부를 계속해서 파악합니다.
이렇게 파악하는 것을 추적한다고도 하는데 깃이 추적하고 있다는 뜻에서 tracked파일 이라고 부릅니다.
hello2.txt는 커밋한적이 없으며 파일이름 옆에 아무것도 적혀있지 않습니다.
또한 untracked files라는 문구가 있습니다.
hello2.txt파일은 한번도 버전관리를 하지 않았으며 수정 내용을 파악하지 않습니다.
따라서 untracked파일이라고 표시합니다.
git add hello.txt $git add hello2.txt
hello.txt파일과 hello2.txt파일 모두 스테이징 해보겠습니다.
git status
차이점이 눈에 들어오시나요?
두 파일 모두 스테이징 되었으며 버전이 바뀐 hello.txt파일은 연두색 modified로 바뀌었고 처음 스테이징된 hello2.txt는 new file 문구가 추가되었습니다.
git commit -m "message11" $git log
커밋을 한후에 log를 확인해보면 각 커밋에 어떤 파일들이 관련된 것인지 알아보기 힘들죠?
git log --stat
--stat 옵션을 추가하면 가장 최근의 커밋부터 순서대로 커밋메시지와 관련된 파일이 나열됩니다.
로그 메세지가 너무 많을 경우 한화면씩 나누어서 보여주는데 Enter키를 누르면 다음 로그를 볼수 있고 Q를 누르면 다시 명령을 입력하는 창으로 넘어올수 있습니다.
본 포스팅은 DO it! 지옥에서 온 문서 관리자 깃&깃허브 입문 도서를 참고하며 공부한 내용을 포스팅 하였습니다.
'Git > Github' 카테고리의 다른 글
[Git & GitHub] 깃허브 방금 커밋한 메세지 수정하기 --amend (0) | 2022.06.14 |
---|---|
[Git & GitHub] 깃허브 .gitignore 파일로 버전관리 제외하기 (0) | 2022.06.13 |
[Git & Github] 깃 저장소 만들기(git init) (0) | 2022.06.11 |
[Git & GitHub] 환경 설정하기 git config --global(***please tell me who you are) (1) | 2022.06.10 |
[Git] CL 리눅스 기반 명령어 (0) | 2022.06.09 |