수학과의 좌충우돌 프로그래밍

02. git 설치 및 버젼관리(저장소 만들기 add, commit) 본문

git

02. git 설치 및 버젼관리(저장소 만들기 add, commit)

ssung.k 2019. 2. 3. 05:15



안녕하세요 강민성입니다.


저번 시간 git을 왜 배워야 하는 지 알아보았다면


이번에는 git을 실습해보도록 하겠습니다.




git 설치하기


사실 git 설치는 설명하기 무안할 정도로 단순하고 쉽습니다.


http://git-scm.com/


다음 주소로 들어가면 각 운영체제에 맞게 git을 설치할 수 있습니다.


좌측 하단 노트북 이미지에서 download를 할 수 있습니다.


각 운영체제마다 다운로드받은 이미지가 다르기 때문에 따로 첨부하지 않겠습니다.


다만 다운로드 중 나오는 추가항목들은 따로 바꿀 필요없이 계속 확인만 눌러주시면 됩니다.


이렇게 쉽게 git 을 설치하면 git bash라는 것이 함께 설치됩니다.



git bash란?


git을 설치하면 git bash는 자동으로 설치된다고 했습니다.


git bash는 window의 cmd, mac, linux의 terminal가 같은 역할을 합니다.


명령어를 입력함으로서 컴퓨터와 대화를 하는 거죠.


근데 당연한 말이지만 운영체제마다 명령어가 다릅니다.


따라서 git bash는 window에서도 리눅스체제의 명령어를 쓸 수 있도록 해주는 역할을 합니다.


따라서 mac이나 linux를 쓰시는 분들은 기존의 terminal을 사용하여도 지장이 없고


window를 쓰시는 분들은 git bash를 쓰시길 추천합니다.



이제 git을 공부하기 위한 준비가 모두 끝났습니다.


그러면 git이 잘 설치되었는지 확인해보겠습니다.


git


다음과 같이 git 이라고 치시면 git 내부적으로 어떤 명령어들이 있는지 볼 수 있습니다. 


git 이 제대로 설치가 안되있다면 명령어가 나오질 않을겁니다.

지금은 무슨 명령어인지 모르셔도 됩니다.


앞으로 함께 배워가도록 하겠습니다.




저장소 만들기




그러면 실습을 진행하기 위해서 저장소를 만들어보도록 하겠습니다.


저장소는 폴더로 폴더 안에 있는 파일들을 관리할 수 있다고 생각하시면 되겠습니다.


먼저 terminal 에서 프로젝트를 보관할 원하는 경로로 이동을 합니다.


 terminal 명령어는 아래 링크에서 확인하실 수 있습니다.


terminal 명령어 보러가기


원하는 위치로 이동했다면 다음 명령어를 쳐줍니다.


git init

초기화를 의미하는 initialize 의 줄임말로서 git 소프트웨어에게


해당 디렉토리에서 작업을 진행하겠다고 선언하는 역할을 합니다.


눈에는 보이지 않지만, 숨겨진 폴더로 .git 폴더가 생성되며


이 안에 버젼 정보가 저장이 됩니다.


이제 프로젝트를 진행할 저장소가 준비되었습니다.



git이 관리할 대상으로 파일 등록



연습을 위해서 쉬운 예제로 진행을 해보도록 하겠습니다.


추가적으로 여기서부터는 vim을 사용해서 작업을 하게 됩니다.


vim은 terminal에서 바로 사용가능한 텍스트 편집기로서


git bash에서도 추가적인 설치 없이 사용가능합니다.


물론 vim으로 하는 모든 작업은 다른 편집기를 사용해도 무방합니다.



vim에 대해서 가볍게 알아보자



먼저 작업 디렉토리에 test.txt 라는 이름을 가진 파일을 하나 만들어주겠습니다.


vim test.txt

만약 test.txt 라는 파일이 없다면 파일을 만들고 vim editor를 실행,


있다면 바로 vim editor를 실행합니다.

다음과 같은 모습이 vim editor입니다.


파일을 수정하기 위해서는 insert 모드로 변환해야 하는데 명령어는 i 입니다.

파일에 test 라는 글을 입력한 후 insert 모드를 종료하기 위해서 esc를 눌러줍니다.


이제 명령어를 입력할 수 있는 모드인데 :wq 를 입력하면 저장 후 editor를 종료합니다.


: 를 명령어를 입력할 수 있도록 하고 wq 는 write and quench 를 의미합니다.

그리고 test.txt 에 적힌 내용을 확인해보면 입력한대로 test가


잘 입력되있는 걸 볼 수 있습니다.

이제 내 디렉토리가 어떤 상태인지 확인해보겠습니다.


명령어는


git status

입니다.


현재 상태를 보면 방금 만든 파일이 untracked files 상태임을 알 수 있습니다.

아직 git이 이 파일을 관리하고 있지 않기 때문에 git에 관리를 명령해야 합니다.


git add test.txt

다음의 명령어로 관리를 명하고 다시 상태를 확인해보면


 git이 새로운 파일이 생겼음을 인식하고 있습니다.


버전 만들기(commit)



지금부터 할 일은 변경을 기록하는 일입니다.


기록이 남을 때는 누가 언제 어떤 걸 변화 했는지 남게 되는데


여기서 '누가' 를 어떻게 표시할지 알아보도록 하겠습니다.


'누가' 에는 이름과 이메일이 표시가 되는데 설정하는 방법은 다음과 같습니다.


git config --global user.name "사용자 이름"


git config --global user.email "사용자 이메일"

저는 minsung 이라는 이름과 rkdalstjd9@naver.com 으로 설정했는데


이는 뒤에서 확인해보도록 하겠습니다.


현재까지 상황은 git add 를 통해서 git에게 새로 생긴 파일의 관리를 명령했습니다.


여기서 git commit 을 하면 아래와 같이 commit 메세지를 남길 수 있도록 vim이 실행됩니다.

git commit


표시하기 위해 1을 입력하고 종료해보겠습니다.


입력하고 종료하는 과정을 위에서 했으므로 생략하고 넘어가겠습니다.

메세지를 다 입력했으면 다음과 같이 commit이 완료됩니다.


이 과정을 게임으로 비유하자면 save pointer와 유사합니다.


이제 우리는 언제든지 commit 한 시점으로 이 파일을 되돌릴 수 있습니다.

이번에는 test.txt 를 test2 로 수정하였습니다.

다시 add 하고 commit 해주는데 아까와 다른 점이 있습니다.


git commit -m "원하는 메세지"

다음의 코드로 메세지까지 한 번에 commit이 가능합니다.


이번에는 메세지를 2로 해보겠습니다.

현재까지 어떤 commit 들이 있는지 확인해볼 수 있습니다.


git log 

기존에 설정했었던 이름, 이메일과 commit한 시간, 그리고 메세지까지 확인할 수 있습니다.


git add는 왜하는거지?


혹시 다음과 같은 의문이 생기지 않으셨나요?


add 하는 과정없이 바로 commit 을 한다면 더 쉽게 편할거 같은데 굳이 add 를 하는 이유가 무엇일까..


지금 부터 이에 대해서 답변을 해보고자 합니다.


먼저 commit 을 언제해야 하는지 생각을 해보면


이는 굉장히 주관적일수도 있지만 하나의 작업을 담는 것이 가장 이상적입니다.


그런데 작업을 하다보면 commit을 까먹고 


서로 연관성이 없는 파일들을 많이 작업할 수도 있을 겁니다.


이럴 경우 사용하는 것이 바로 add 입니다.


add 를 통해서 관련 있는 작업끼리 묶어서 add 후 commit 을 하면


잊어먹고 많은 작업을 했더라도 하나의 작업씩 commit을 할 수 있을 것 입니다.


이 점이 바로 git이 다른 분산처리시스템과 다른 점입니다.


또 다른 이유들도 있지만 이 이유 덕분에 git이 더욱 경쟁력을 얻었다고 해도 과언이 아닙니다.



정리를 해보자면,


add 는 변경사항이 있다고 해서 전부 commit 이 되는 것을 막기 위한 중간 과정이라고 생각하면 되겠습니다.


추가적으로,


add 를 하게 되면 commit 이 가능한 공간으로 이동하게 되고 이 공간을 stage area 라고 부릅니다.


commit 을 하게 되면 stage area 있던 파일들이 또 이동을 하는데 이동한 곳을 repository 라고 부릅니다.




마무리


오늘 배운 내용의 git의 가장 핵심적인 내용입니다.


아마도 git 을 사용하게 된다면 가장 많이 쓰게 될 명령어들 입니다.


그런 만큼 확실하게 어떤 원리로 이루어지는 알고 하시면


더 도움이 될 거라 생각합니다 :)

Comments