Git 기초 사용법 – 내 컴퓨터에서만 버전 관리하기

이 글은 Windows 10에서 Visual Studio를 가지고 Git을 설명합니다.

그리고 Visual Studio 안에서 Git을 사용하지 않고 https://git-scm.com/에서 Git for Windows를 설치해 Git Bash를 사용해 버전 관리를 설명합니다.

따라서 에디터에 상관없이, 운영체제에 상관없이 이해하실 수 있을 것입니다.

추가로 Git은 프로그램이며 GitHub는 사이트 이름입니다.

Git으로 관리하는 저장소를 GitHub 같은 곳에 저장하여 다른 사람과 공유할 수 있죠.

이 글에서는 인터넷을 사용하지 않고 한 컴퓨터에서만 Git으로 관리하는 기본적인 방법을 설명합니다.

내용 순서

  1. windows용 Git 설치
  2. git config –global 이름, 이메일 설정
  3. Visual Studio 프로젝트 만들기
  4. git init으로 프로젝트 폴더를 깃 저장소로 초기화
  5. git add로 소스 파일 추적
  6. .gitignore 파일을 만들어 추적하지 않는 파일 무시
  7. .gitignore 파일도 추적하고(git add) 첫 번째 저장(git commit)
  8. 소스 파일을 수정 후 두 번째 저장(git commit)
  9. 상황에 따라 작업을 되돌리는 네 가지 방법(checkout –, checkout HEAD, reset, reset –hard)

 

그전에 중요한 내용!

관리하려는 코드가 세 가지 상태로 나눠진다는 것을 기억해주세요.

  1. 코드를 바꾸고 있는 상태(작업 영역, working directory)
  2. 저장하려고 대기 중인 상태(커밋 대기 영역, staged for commit)
  3. 어떤 시점의 코드가 저장된 상태(커밋됨, commit)

이것 말고도 애초에 관리 대상에 넣을지 말지를 결정해야 하지만 그건 본문에서 설명하겠습니다.

또한 가지치기(branch)는 다른 글에서 다룹니다.

 

windows용 Git 설치

먼저 Git은 프로그램이니 없다면 설치해야 합니다.

https://git-scm.com/에 들어갑니다.

Download~ 부분을 누릅니다.

자동으로 설치파일이 받아지는데 32bit 설치파일이므로 64bit 환경이라면 취소 후 64-bit Git Windows Setup을 받습니다.

6번째 화면의 Adjusting your PATH environment 설정에서 Use Git from Git Bash only를 선택하는 것 빼곤 모두 기본 설정을 사용합니다.

Git Bash로만 Git을 사용할 것이기 때문입니다.

Vim을 사용하니 리눅스에서도 같은 경험을 할 수 있어 좋습니다.

실행화면입니다.

git config –global 이름, 이메일 설정

여기서 잠깐 몇 가지 설정을 하고 가겠습니다.

누가 해당 버전을 만들었는지 정보가 당연히 필요하겠죠?

git config –global user.name “사용자 이름”

git config –global user.email “사용자 이메일” 설정을 넣어주세요.

위쪽 방향키를 누르면 과거 이력이 나와 편리합니다. 또 Ctrl + w는 단어단위로 지우는 단축키입니다. 힘들게 백스페이스 여러 번 누르지 마세요.

global 설정은 한 사용자 범위의 설정입니다. 즉 이후 여러분이 만드는 모든 프로젝트는 이 설정을 사용합니다.

물론 컴퓨터를 사용하는 모든 사람에게 적용되는 system 설정도 있고 프로젝트마다 적용되는 설정도 있습니다.

 

Visual Studio 프로젝트 만들기

이제 Visual Studio를 실행하고 간단한 C 콘솔 프로그램을 만들어보겠습니다.

그리고 abc.c 파일 하나를 추가했습니다.

C:\Users\사용자 이름\Documents\Visual Studio 2017\Projects\Project4 프로젝트가 만들어졌습니다.

프로젝트 마법사로 프로젝트를 만들면서 ‘솔루션용 디렉터리 만들기’를 해제했기 때문에 Projects 폴더 아래에 바로 프로젝트가 만들어졌습니다.

콘솔 응용 프로그램을 만드는 데 책과 달라 어려움이 있다면 Visual Studio 2017 설치 및 콘솔 응용 프로그램 프로젝트 만들기를 참고해 주세요.

Git Bash에서 프로젝트 폴더로 이동합니다. Tab 키를 사용해 자동완성으로 쉽게 이동할 수 있습니다.

경로를 복사한다면 슬래시(/)와 역슬래시(\)를 잘 구별해야 합니다.

cd는 change directory(작업 폴더 변경), ls는 list segments(폴더 내용물 목록)입니다. 숨김 파일, 폴더까지 보려면 ls -a를 입력하세요.

 

git init으로 프로젝트 폴더를 깃 저장소로 초기화

Git으로 관리하기 위해 git init으로 깃 저장소를 만듭니다.

폴더를 보면 숨김파일로 .git 폴더가 생긴 것을 볼 수 있습니다.

 

git add로 소스 파일 추적

git status로 저장소의 상태를 보니 Untracked files이 여러 개 있군요.

추적하지 않는(Untracked) 파일이란 Git이 관리하지 않는다는 뜻입니다.

따라서 어떤 파일의 변경 사항을 저장(추적)하려면 그 파일을 추적하는 파일로 만들고(add) 중요 시점마다 저장하기(commit)를 해야 합니다.

추적하는 파일로 만드는 명령은 git add이며 저장하는 명령은 git commit입니다.

여기서는 abc.c 파일만 추적하도록 git add abc.c 명령을 실행합니다.

 

.gitignore 파일을 만들어 추적하지 않는 파일 무시

저장될 변경 사항(changes to be committed)에 abc.c 파일이 있군요.

그런데 나머지 파일과 폴더는 계속 추적되지 않는다고 알려주는군요. 이걸 없애기 위해 Vim으로 .gitignore 파일을 만듭니다. 이름에서부터 어떤 파일인지 알 수 있지요.

Vim이 열리면 i를 눌러 입력상태로 바꾼 후 다음을 입력합니다.

ESC 키를 누르고 :wq를 입력해 저장하면 Vim에서 나오게 됩니다.

다시 git status를 해보니 위에 속한 폴더와 파일은 무시되는 걸 볼 수 있습니다.

그런데 사실 .gitignore 파일은 이렇게 만들지 않습니다. Visual Studio에서 Git으로 관리하면 자동으로 처음에 만들어줍니다.

그리고 C 파일만 빼고 다 무시한다거나 하지도 않습니다. 이 점 이해해주세요.

 

.gitignore 파일도 추적하고(git add) 첫 번째 저장(git commit)

자 다시, 방금 만든 .gitignore 파일만 추적하지 않는다고 나오는군요. 이것도 추적하도록 git add .gitignore 해줍시다.

현재 상태를 생각해보면 프로젝트 생성 후 abc.c 파일을 만든 상태입니다. 아직 abc.c 에 코드 한 줄 없습니다.

이 상태를 첫 번째 버전으로 저장하기 위해 git commit -m “첫 번째 커밋”을 입력합시다. -m 뒤의 문장은 마음대로 적어도 됩니다.

파일은 두 개가 추가되었고(2 files changed [abc.c와 .gitignore]), 네 줄(.gitignore 파일 4줄)이 추가되었습니다.

git status로 저장소 상태를 보니 커밋할 것이 없다(add 한 파일이 없다), 그리고 마지막 커밋 후 변경된 것도 없다(working tree clean)고 나오네요.

git log로 커밋한 내역을 볼 수 있습니다. 한 번 커밋 했으니 하나만 보이네요.

 

소스 파일을 수정 후 두 번째 저장(git commit)

이제 본격적으로 C 코드를 넣어봅시다. abc.c에 전통의 printf() 하나를 넣어보죠. 실행도 해봅시다.

git status로 상태를 보면 추적하는 파일 중 변경되었지만(Changes) 아직 add 하지 않아서 커밋 대기가 아닌(not staged for commit) 파일(abc.c)이 있다고 나옵니다.

그리고 커밋 대기하려면 git add <file>을 사용하라, 변경을 취소하고 싶다면 git checkout — <file>을 사용하라고 알려주고 있습니다.

빌드를 했기 때문에 Debug 폴더가 생겼습니다. 이 파일은 추적하려고 add 하지도 않은 새로운 폴더이기 때문에 Untracked files라 알려줍니다.

이 폴더도 무시하기 위해

  1. .gitignore에 Debug/를 넣어주고
  2. abc.c와 .gitignore는 변경 상태를 저장하기 위해 git add abc.c .gitignore 후
  3. git commit -m “두 번째 커밋:printf() 추가” 명령을 넣어주세요.

git log를 보면 커밋 두 개가 있는 것을 볼 수 있습니다.

이렇게 중요 시점마다 기록(커밋)하면 나중에 프로그램이 잘 작동하지 않을 때 최근에 정상작동 했던 때로 명령 하나로 이동할 수 있게되는 것입니다.

이게 없다면 작업량이 많으면 정상 작동하던 때로 돌아가는 것 자체가 큰일이 됩니다.

 

상황에 따라 작업을 되돌리는 네 가지 방법(checkout –, checkout HEAD, reset, reset –hard)

이젠 작업을 되돌리는 방법을 알아봅시다. 위에서 본 대로

  1. 작업 영역(working directory)
  2. 커밋 대기 영역(staged for commit)
  3. 저장됨(commit)

으로 나누어져 있습니다.

열심히 작업한 후 add 명령으로 커밋 대기 영역에 작업 내용을 넣고 확실히 저장할 만하다면 커밋을 하는 것입니다.

따라서 작업을 되돌리는 상황이 하나가 아니지요.

  1. 작업 영역에서만 한 작업을 취소할 때
  2. 작업 영역 + 커밋 대기 영역에 있는 작업도 취소할 때
  3. 커밋을 취소하지만 작업한 내용은 그대로 둘 때
  4. 커밋을 취소하고 작업한 내용도 취소할 때

하나씩 알아봅시다.

첫 번째 : 작업 영역에서만 한 작업을 취소할 때

abc.c를 수정해봅시다.

이 작업은 git checkout — abc.c로 취소할 수 있습니다.

Visual Studio에서 외부에서 파일이 변경되었다고 알림창이 뜰 겁니다.

예를 누르면 변경 전 상태로 돌아간 것을 볼 수 있습니다.

두 번째 : 작업 영역 + 커밋 대기 영역에 있는 작업도 취소할 때

abc.c를 수정하고 git add 한 후 추가로 수정해 봅시다.

이 작업은 git checkout HEAD abc.c로 취소할 수 있습니다. HEAD는 지금 작업 중인 브랜치(branch)를 가리키는 포인터(지시자)입니다.

세 번째 : 커밋을 취소하지만 작업한 내용은 그대로 둘 때

abc.c를 수정하고 git add 한 후 git commit까지 해봅시다.

커밋은 git reset HEAD^으로 취소할 수 있습니다.

커밋은 사라졌지만 Visual Studio의 코드는 그대로이고 status를 보니 add 전으로 돌아간 것을 볼 수 있습니다.

네 번째 : 커밋을 취소하고 작업한 내용도 취소할 때

abc.c를 변경하고 add하고 commit까지 해봅시다.

작업영역까지 몽땅 날리는 작업은 git reset –hard HEAD^로 할 수 있습니다.

Visual Studio에 가면 코드마저 과거 상태로 돌아간 것을 볼 수 있습니다.

SW Level Up

mail@swlevelup.com

6 Responses

  1. 익명 말해보세요:

    제가 원래 댓글을 남기는 사람이 아닌데…
    Git 에 대해서 그 어떤 곳 보다 초보자가 알기 십게 가장 잘 정리를 해 놓으셨어요.

    감사합니다…

    • Skills 말해보세요:

      좋게 봐주셔서 고맙습니다. 제가 Git을 모를 때 ‘이런 설명을 들었으면 좋았을 텐데’ 하는 생각에 만들었는데요. 만들고 나니 너무 늘여서 설명한 게 아닐까 걱정했습니다만 다행이네요 ㅎㅎ

  2. SSR 말해보세요:

    안녕하세요. 여태 접한 git 사용 설명 중 최고입니다. 감사합니다!

  3. 익명 말해보세요:

    Untracked files:
    .gitignore
    README.md
    package-lock.json
    package.json
    public/
    src/
    이게 무슨 내용인가요 ㅠㅠ

    • Skills 말해보세요:

      추적하지 않는 파일 목록을 보여주는 것입니다.
      이 목록에서 git add로 추적하려는 파일을 지정할 수 있습니다.
      그 후 commit을 하면 추적하는 파일의 상태가 해당 커밋에 저장되는 것입니다.
      추적하지 않을 파일들은 .gitignore 파일에 적으면 추적하지 않는 파일 목록에서 보이지 않게됩니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다.