개발 이야기/Git

[GIT] git init, git status, git add란? (feat. core.autocrlf)

제이온 (Jayon) 2020. 11. 23.

 

 

안녕하세요? 코딩중독입니다.

 

저번 시간에는 git을 설치하고 사용자 등록을 하는 방법에 대해서 알아 보았습니다.

 

이번 포스팅에서는 기본적인 명령어인 git init, git status, git add에 대해서 설명하겠습니다.

 

 

초기 작업

git init을 하기 위해서는 일단 버전 관리를 하기 위한 폴더를 만들어야 합니다.

 

이때, git bash는 리눅스 언어로 동작하기때문에 간단하게 리눅스 문법도 맛보기를 하면서 초기 작업을 해 보겠습니다.

 

먼저, git bash를 실행하고 pwd라는 명령어를 입력해 봅시다.

 

아마, 콘솔창에는 /c/Users/(유저 이름)이라는 경로가 뜰 것입니다. pwd는 현재 작업 중인 디렉토리의 이름을 출력하는 명령어입니다.

 

자, 이제 cd라는 명령어를 통해서 버전 관리를 하기 위한 폴더를 어디에 저장할지 이동해 봅시다.

 

저는 그냥 바탕화면에 두기 위해서 cd desktop을 입력하였습니다.

 

 

 

 

다음과 같이 경로가 변했습니다. 오른쪽 노란 글씨를 보면 ~에서 ~/desktop으로 말이죠. 여기서, '~'은 로그인한 유저의 홈 디렉토리를 의미합니다. 다시 말하면,  /c/Users/(유저 이름)인것이죠.

 

즉, cd desktop을 입력하면 현재 작업중인 경로는 /c/Users/(유저 이름)/desktop이 되는 것입니다.

 

아무튼 경로는 이야기는 여기까지 하고, 여기서 버전 관리할 폴더를 하나 만듭시다.

 

저는 "gitProject"라고 폴더명을 정했고, mkdir (폴더명)을 입력하면 폴더가 생성됩니다.

 

 

 

 

위 명령어를 입력하면 폴더가 하나 생길 겁니다. 이제, cd 명령어를 통해 그 폴더로 이동합시다.

 

자 이제, git 안에는 어떠한 명령어가 있는지 확인하기 위해 git을 입력합니다.

 

 

 

 

git init

위의 사진 중 빨간색 네모 박스를 유심히 봅시다. 제목이 "start a working area"라고 되어 있죠?

 

이름에서 알 수 있듯이, 버전 관리를 하기 위해 가장 처음 해야 하는 일입니다. 명령어는 clone과 init이 있는데, 우리는 init을 사용합니다. clone은 복제라는 뜻인데, 지금은 우리가 다른 소스를 복사해 오는 일을 하지 않을 것이기때문이죠.

 

init은 빈 git repository를 만들거나 이미 있는 repository를 다시 초기화하는 명령어입니다. 여기서, repository란 한글로 번역하면 저장소로, 파일이나 폴더를 저장하는 공간을 말합니다.

 

한 번, git init 명령어를 입력해 보겠습니다.

 

 

 

 

위와 같이 빈 git 저장소가 초기화되었으며, 맨오른쪽에 보면 .git이라는 폴더가 생성되었음을 알 수 있습니다.

 

이 .git 폴더에 대해서는 나중에 따로 포스팅을 다룰 예정이니, 궁금하시더라도 조금 참으시고 이 폴더가 git의 중요한 정보들이 들어가 있구나라고만 알고 계시면 될 것 같습니다.

 

한 마디로, git init은 git 저장소를 만드는 명령어라고 이해하시면 되겠습니다.

 

 

초기 작업2

git status와 git add를 설명하기 위해 초기 작업을 하나 더 해야 합니다.

 

간단합니다. 파일을 하나 만드는 것이죠. 사실 이 내용도 그냥 리눅스 언어로 하지 않고, 단순히 바탕화면에서 새 파일만들고 내용을 키보드로 입력해도 됩니다.

 

하지만, 이 포스팅에서는 리눅스 언어도 간단히 사용하려고 합니다. 그래서 원치 않으시는 분은 스킵하셔도 좋습니다.

 

자, 우리는 처음 설치를 할 때, git을 사용하기 위한 기본 에디터를 vim으로 사용하기로 하였습니다.

 

엥? 기억이 나지 않으신다고요?

 

 

 

 

ㅎㅎ 여기서 했습니다. 그리고 우리는 이 vim 편집기를 통해서 새로운 파일을 만들어 보려고 합니다.

 

자, vim test.txt 라고 명령어를 쳐 봅시다.

 

 

 

 

그러면, 뭔지는 모르겠으나 막 물결 무늬와 함께 맨 윗줄에는 커서가 깜빡 깜빡하고 있는 모습이 보이실 겁니다.

 

하지만, 이상하게도 뭔가를 입력하려고 하면 화면에 반응이 없습니다.

 

그건 아직 vim 편집기의 입력 모드를 실행하지 않았기때문입니다.

 

vim 편집기는 크게 입력 모드와 명령 모드가 있는데, 명령 모드에서 입력 모드를 전환하기 위해서는 알파벳 i를 누르시면 됩니다. (사실, 입력 모드는 여러 가지가 있습니다만, 여기서는 i만 소개하겠습니다.)

 

그러면 이제 글자를 칠 수 있는데, 적당히 국룰 문장인 Hello, world를 입력해 보겠습니다.

 

 

 

 

이제, 이 파일을 저장하고 나가야 합니다. 그럴 때는 [esc] 버튼을 눌러서 명령 모드로 돌아온 뒤, :wq를 입력하시면 됩니다.

 

 

 

 

여기서 w는 저장이고, q는 종료입니다. 이 상태에서 엔터를 누르면 vim 편집기 화면을 나가게 됩니다.

 

파일의 내용이 잘 입력되었는지 확인할 때는 cat 명령어를 사용합니다. cat test.txt를 입력해 봅시다.

 

 

 

 

잘 뜨는군요. 파일이 성공적으로 만들어졌습니다.

 

 

git status, git add

사실, 이번 포스팅에서 git status를 이런 것이 있구나정도만 아셔도 괜찮습니다. 나중에 따로 포스팅을 다룰 예정이니까요.

 

일단, status를 단어에서 알 수 있듯이 '상태'를 의미합니다. 백문이불여일견, 일단 입력해 봅시다.

 

 

 

 

뭔지는 모르겠으나, Untracked files 목록 중에 불길하게 빨간 글씨로 test.txt라고 뜹니다.

 

여기서, Untracked라는 뜻은 git이 해당 파일을 추적하지 않았다는 의미입니다. 쉽게 말하면, 아직 git은 이 파일의 존재 자체를 모르고 있습니다. 따라서, git한테 이 파일을 버전 관리하게 넣어줘라고 명령할 때, git add 명령어를 사용하는 것입니다.

 

한 번, git add test.txt를 입력해 봅시다.

 

 

 

 

명령어는 잘 수행된 것 같은데, 이상한 경고문이 하나 떴군요. 이 부분은 가장 마지막에 설명하겠습니다.

 

일단, git add이 끝났다면, 다시 git status를 입력해 봅시다.

 

 

 

 

commit이라는 모르는 용어는 있지만, 아무튼 Untracked라는 문구는 사라져서 git이 test.txt 파일의 존재를 알게 되었다정도는 이해할 수 있습니다.

 

 

자, 이제 아까 git add를 입력하였을 때 나왔던 경고 문구를 해석해 봅시다.

 

 

경고 : test.txt에서 LF가 CRLF로 대체됩니다.

 

파일은 작업 디렉토리에 원래 줄 끝이 있습니다.

 

 

그런데, LF와 CRLF.. 어디서 많이 보지 않았나요?

 

 

 

 

네, git 설치할 때 봤던 설정입니다. 저는 그때 줄바꿈가지고 고통받지 않아서 default로 대충 찍고 넘어갔는데, 그 다음 시간에 바로 오류를 겪는군요.

 

위 사진을 보면 각 기능의 맨 마지막 괄호를 보면, core.autocrlf라는 값이 있고, 그 값을 true나 input, false로 초기화할 수 있다는 사실을 알 수 있습니다.

 

먼저, CR과 LF가 무엇인지 알아봅시다. CR은 현재 커서를 줄 올림 없이 가장 앞으로 옮기는 동작을 말하고, LF는 커서를 그 자리에 그대로 둔 상황에서 종이만 한 줄 올려 줄을 바꾸는 동작을 말합니다.


이때, Mac, Linux(Unix 계열) 등의 운영체제에서는 LF를 사용하고, 윈도우는 CR+LF를 사용하기때문에 서로 줄바꿈을 하는 시선이 다릅니다.

 

여기서, Git bash는 Linux이기때문에 줄바꿈을 LF를 사용하지만, 현재 제 운영체제는 윈도우이므로 줄바꿈을 CRLF를 사용합니다. 그런데, 처음 git을 설치할 때는 LF를 CRLF로 자동변환하도록 설정하였기때문에 warning이 발생하는 것입니다.

 

따라서, 우리는 core.autocrlf를 변경해야합니다. 그리고 값이 true, input, false 때의 의미는 각각 다음과 같습니다.

 

 

 

1. true
체크아웃할 때는 윈도우 스타일, 커밋할 때는 유닉스 스타일 적용합니다.



2. input
체크아웃할 때는 스타일 변환을 하지 않고, 커밋할 때만 유닉스 스타일 적용합니다.



3. false
스타일 변환을 하지 않습니다.

 

 

체크아웃이란 명령어도 따로 있지만, 여기서는 단순히 어떠한 text 파일을 읽는 것입니다.

 

따라서, core.autocrlf에 input 또는 false를 주면 경고문은 사라집니다. 보통, 오류 방지를 위해서 input으로 초기화한다고 합니다.

 

 

내용이 좀 길었습니다. 이제, core.autocrlf에 값을 바꾸는 명령어를 알아 봅시다.

 

git config (--global) core.autocrlf input를 입력하면 됩니다. 여기서 괄호친 부분은 git 전체에 영향을 끼치는 명령어이므로 만약, 프로젝트 내에서만 값을 바꿀 것이라면 --global은 빼고 쓰셔야 합니다.

 

그리고나서 경고문이 안 뜨는지 확인하기 위하여, vim test_2.txt을 만들어서 아무 내용이나 입력해 봅시다.

 

저는 대충 Hello만 썼습니다.

 

 

 

 

아까와는 다르게 경고문이 뜨지 않는 것을 볼 수 있습니다. 마찬가지로, git status를 입력하면 제대로 git이 test_2.txt파일을 인식하였다는 것을 알 수 있습니다.

 

 

정리

지금까지 간단한 리눅스 문법과 git init, git status, git add, 그리고 LF와 CR을 알아 보았습니다.

 

사실 LF와 CR은 같은 윈도우 환경에서 개발된 파일에 대해서 버전 관리를 수행할 때에는 core.autocrlf = ture로 설정하면 됩니다. 그리고 core.eof같이 줄바꿈을 처리하는 개념들이 더 있지만 여기서는 소개하지 않으려고 합니다.

 

제가 아래 참고 링크에 올려드릴테니 줄바꿈을 더 공부하고 싶으신 분은 읽어보시면 되겠습니다.

 

다음 시간에는 또 기초 git 명령어를 알아 보겠습니다~

 

 

참고 사이트

www.lesstif.com/gitbook/git-crlf-20776404.html

 

git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기

 

www.lesstif.com

 

opentutorials.org/course/2708

 

지옥에서 온 Git (새 수업으로 대체) - 생활코딩

이 수업은 GITn 시리즈로 완전히 대체 되었습니다. GITn은 보다 많은 내용을 작은 단위로 쪼개서 선택적으로 공부하실 수 있도록 제작된 수업입니다. 아래 주소를 통해서 GITn 을 접할 수 있습니다.

opentutorials.org

 

 

 

 

이 포스팅과 관련된 다른 글도 읽어 보세요.

 

[개발 이야기/Git] - [GIT] Git 설치 방법


[개발 이야기/Git] - [GIT] Git이란?

 

'개발 이야기 > Git' 카테고리의 다른 글

[GIT] git branch란? - 작업을 분기하는 방법  (0) 2020.11.28
[GIT] git log와 git diff란?  (2) 2020.11.24
[GIT] git commit이란?  (1) 2020.11.23
[GIT] Git 설치 방법  (2) 2020.11.23
[GIT] Git이란?  (0) 2020.11.23

댓글

추천 글