[Git/GitHub] 소프트웨어 버전 관리 시작하기

dEpayse
dEpayse_publication
16 min readFeb 6, 2022

본 포스트는 원활한 이해를 위해 많은 이미지(스크린샷)를 포함하고 있습니다.

Git/GitHub 란?

Git

Git은 개발하는 소프트웨어의 소스 코드를 효과적으로 관리할 수 있게 해주는 무료이며 공개된 소프트웨어이다. 버전 관리 시스템(VCS, Version Control System) 또는 형상 관리 도구(Configuration Management Tool)에 속하며, 개발자가 개발을 진행하면서 소스 코드의 변경 사항을 저장하고, 어떤 파일의 어느 부분이 변경되었는지 확인하는 등 다양한 기능을 제공한다.

GitHub

GitHub은 Git을 기반으로 소스 코드를 호스팅하고, 협업 기능들을 지원하는 마이크로소프트의 웹서비스이다. 아래는 GitHub 사이트의 링크이다. 협업이 아닌 혼자 개발 중인 프로그램이라고 하더라도, 프로젝트를 웹에 저장할 수 있기 때문에 집의 데스크탑에서 작성하다가 다른 PC, 가령 노트북에서도 이어서 작업할 수 있다. Git / GitHub을 시작하려면 GitHub에서 계정을 생성하자.

개발을 하다보면 본인이 언제 어떤 코드를 어떻게 수정했는지 확인의 필요성을 느낄 때가 있고, 또 만약 어떤 변경 사항 때문에 오류가 생겼을 때 오류가 생기기 전의 코드로 돌아가고 싶을 때도 있다. 그런 관점에서 소프트웨어 관리 시에 꼭 필요한 것이 버전 관리 시스템이고, 2022년 현재 Git은 가장 major한 VCS이다. Git을 기반으로 하는 호스팅 사이트는 GitHub 이외에도 GitLab, BigBucket이 있지만, GitHub을 위주로 다뤄보려고 한다.

Git 시작하기

Git 설치하기

Git이 버전 관리 시스템(이하 VCS)이라고 했지만, 더 세부적으로는 분산 버전 관리 시스템(DVCS, Distributed VCS)에 속한다. 같은 소스 코드를 각기 다른 로컬 pc에 copy & paste 하여 사용할 수 있다. 위에서도 언급했듯이, GitHub과 같은 서비스를 이용한다면 서버에 업로드하여 저장하면서 진행하면 효과적으로 각기 다른 로컬 pc에서도 하나의 소스 코드처럼 관리할 수 있다.

운영체제가 Windows인 경우 Git 을 설치하면 git bash 프로그램이 설치된 것을 확인할 수 있지만, Mac/ Linux/ Unix인 경우 git bash 프로그램 없이 기본 terminal에서 CLI(Command Line Interface)로 Git을 다룰 수 있다(git bash 프로그램을 사용하는 것도 가능하다.). 본 포스트에서는 Windows 운영체제, git bash 프로그램을 기준으로 진행하려고 한다. Windows에서 git을 설치할 때 물어보는 것이 많은데, 기본 옵션으로 설치를 진행하자.

설치가 완료되었다면 Git을 이용하여 로컬 저장소에 Git을 심어보자.

Git 시작하기

Git은 로컬에서 관리 가능한 ‘분산’ 버전 관리 시스템이다. 만약 Git을 설정하였다면, Windows에서는 관리할 소스 코드의 루트 디렉토리에 ‘.git’ 이라는 이름의 숨겨진 폴더로 존재하게 된다.

Fig1. git의 물리적 위치

그러나 사용자가 직접 .git 폴더를 생성하고 숨긴 폴더로 설정한다고 git이 만들어지는 것은 아니다. Git을 설치하였으므로 git bash를 이용하여 관리할 소스코드에 git을 심어보자.

먼저 Git을 심을 테스트 프로젝트 폴더를 생성해보자. git bash의 첫 디렉토리에서 가까운 디렉토리에 TestProject 폴더를 생성해보자. 로컬 디스크(C 드라이브, 주드라이브) 의 Users 혹은 사용자 폴더로 들어가서 아래와 같이 TestProject를 생성하자.

Fig2–1. Git을 심을(소스코드를 관리할) 폴더 생성하기

폴더 생성을 완료했고, Git이 정상적으로 설치되었다면 아래와 같이 검색창에서 Git Bash를 찾을 수 있다. 실행해보자.

Fig2–2. Git Bash 실행하기

Git Bash를 실행하면 아래와 같은 프로그램이 실행되는 것을 볼 수 있다.

Fig2–3. 실행한 Git Bash 초기화면
  • 본 포스트에서는 cd와 같은 기본 CLI(Command Line Interface) 명령어에 관한 내용은 다루지 않는다.

실행했다면 Fig2–4와 같이 ‘cd 폴더이름’ 명령어를 이용하여 생성한 TestProject 폴더로 이동하고 이후에 ‘git init’ 명령어를 입력하자. $기호는 명령어를 입력하라는 표시이고, 우리가 입력하는 것이 아니다. “Initilaized empty Git repository in …” 와 같은 문구가 보인다면 정상적으로 Git이 심어진 것이다. repository는 저장소를 의미한다. 직접 확인하고 싶다면 Fig1 과 같이 TestProject 폴더에 ‘.git’ 폴더가 생성된 것을 확인하자. 바로 이 ‘.git’ 폴더가 상단 git 초기화 성공 문구의 ‘Git Repository(Git 저장소)’인 것이다.

Fig2–4. 생성한 프로젝트 루트 폴더에 git 심기
  • 만약 읽기/쓰기 권한이 필요한 경우라면 관리자 권한으로 git bash를 실행하여야 한다.
  • 보이지 않는다면, 숨김 항목을 표시하여 확인해보자.
Fig2–5. 초기화 이후 ‘.git’ 이 보이지 않을 때 숨김 항목 표시하기

Fig2–1 ~ Fig2–5는 git을 심는 원리를 보여주기 위해 Git Bash 프로그램을 직접 실행하여 디렉토리로 이동하고 Git을 심는 방법으로 진행하였다. 그러나 Windows에서 Git Bash를 설치하였다면, 생성한 TestProject 폴더 내부에서 우클릭하여 Git Bash Here을 클릭하면 Git Bash의 초기 디렉토리가 TestProject에서 시작한다. 이 상태에서는 디렉토리를 이동할 필요없이 바로 git init 명령어를 입력하면 폴더에 git이 초기화된다. 아래 Fig3–1 ~ Fig3–2를 참고하자. 이미 초기화가 정상적으로 되었다면 아래 과정은 생략하자.

Fig3–1. 폴더 내부에서 바로 Git Bash 실행하기
Fig3–2. 폴더 내부에서 Git Bash 실행 후 Git 심기

Git 으로 기본 버전 관리 기능 사용해보기

Git 을 버전 관리할 프로젝트 루트 폴더에 정상적으로 초기화하였다면, 본격적으로 파일들을 버전별로 관리해보자. Git에서 저장한 각각의 버전을 ‘commit(커밋)’ 이라고 한다. 파일을 생성하고, 내용을 입력 또는 변경하여 저장하고, 커밋을 만들어보자. 우리가 생성하고 관리할 파일은 주로 소스 코드 파일이겠지만, Git의 버전 관리가 어떻게 동작하는 것을 아는 것이 목적이므로 간단한 텍스트 파일로 진행해보자.

Fig4–1. 프로젝트 파일에 텍스트 파일 생성하여 저장

Fig4–1 과 같이 텍스트 파일을 만들고 저장해보자. 우리가 파일을 생성하여 저장했지만, commit을 생성하지 않으면 로컬 git repository에 저장되지 않는다. Git Bash를 이용하여 커밋을 생성해보자!

이번에는 Fig3–1처럼 폴더 내부에서 바로 Git Bash를 실행하자.

Fig4–2. 정상 Git 초기화 이후 Git Bash 실행 시 화면

Git을 정상적으로 초기화한 이후에 Git Bash를 실행하면 초기화하기 전과 다르게 하늘색 글씨로 (master)라는 문구가 추가된 것을 확인할 수 있다. 이 단어는 버전 관리를 용이하게 해줄 ‘branch’라는 개념과 관계되는데, 이 개념은 이후에 다루고 일단 ‘정상적으로 Git이 심어졌다는 것만 확인하자.

Fig 4–3. User 정보 등록하기

커밋하기 전에, User 정보를 등록해야 한다. 로컬 pc에서만 관리할 예정이면, 유효하지 않은 이메일과 이름을 입력해도 무방하지만, 우리는 원격 저장소에도 저장하는 실습을 진행할 것이므로 가입한 GitHub 계정 이메일과 닉네임을 입력하자. Fig4–3 과정은 커밋을 위해 반드시 필요한 단계이다.

이제 커밋할 파일을 정해주기 위한 단계이다. Fig4–1에서 생성한 파일을 커밋할 파일로 추가해보자.

Fig4–4. 커밋할 파일 추가하기

Fig4–4 은 생성하여 저장한 파일을 커밋할 파일로 추가하고, 잘 추가되었는지 확인하는 과정이다. 두 번째 명령어는 단지 커밋할 파일로 추가한 파일이 잘 추가되었는지 확인하는 과정임을 알아두자.

Fig4–5. 커밋 생성하기

Fig4–5 가 바로 커밋을 생성하는 과정이다. git commit 이 명령어 이며, -m은 커밋에 메세지(message)를 기록하겠다는 옵션 명령어이다. 정상적으로 커밋이 생성되었다면 명령어 밑의 세 줄의 안내 문구를 확인할 수 있다. 커밋 완료 문구에서는 잠깐 언급했던 branch, 커밋을 구분하는 커밋 Id, 그리고 몇 개의 파일이 변경되었는지, 어떤 파일이 변경되었는지 변경사항을 알 수 있다. 드디어 하나의 버전을 만든 것이다!

이제 파일을 수정하여 새로운 버전을 만들어보자. 이를 통해 우리는 Git을 사용하여 원하는 버전으로 자유롭게 이동할 수 있다는 것을 배우게 된다!! 차근차근 계속 해보자.

Fig5–1. 생성한 파일 내용 수정하기

처음 생성했던 파일을 열어 내용을 “첫 번째 커밋”에서 “두 번째 커밋” 으로 변경하고 저장하자. 다시 언급하지만, Windows 상에서 저장하는 것은 Git Repository에 저장되는 것과 다르다! 저장했으면 Fig4–1 ~ Fig4–4와 같이 커밋할 파일으로 추가하고 커밋을 생성해야 새로운 버전으로 Git Repository에 저장된다.

Fig5–2. 새로운 커밋 생성하기

우리는 두 개의 커밋을 생성했고, 버전 관리를 하려면 현재는 최근 커밋의 상태에 있지만 자유롭게 커밋을 이동할 수 있어야 한다. 이제 첫 번째 커밋의 상태로 돌아가보자. Windows 상에서 직접 변경된 파일의 내용을 “두 번째 커밋”에서 “첫 번째 커밋”으로 바꾸고 저장하는 방법이 있지만, 변경된 내용이나 파일이 많으면 어려움이 있다. 버전 관리의 진정한 위력은 바로 커밋을 이동하는 것에서 시작한다. 이 때 우리는 아까 확인한 커밋 Id를 이용하여 이동할 수 있다.

Fig5–3. 첫 번째 커밋으로 이동하기

git log 명령어를 이용하면 지금까지 Git Repository의 기록을 볼 수 있다. 우리는 지금까지 두 개의 커밋을 생성했는데, 커밋 Id와 커밋 메세지, 커밋한 시간까지 볼 수있다. git checkout 명령어를 이용하면 커밋을 자유자재로 이동할 수 있다. git checkout 명령어 이후에 커밋 Id 앞 7자리를 입력하면 첫 번째 커밋으로 이동한다. 7자리가 아니고 같은 커밋이 없다면 더 짧게 입력해도 되고, 더 길게 입력해도 동작한다. 전체 id를 이용하면 겹칠 일이 없다.

이제 생성한 first file.txt 텍스트 파일을 확인해보자.

Fig5–4. 첫 번째 커밋 상태로 돌아간 파일

최근에 “두 번째 커밋”으로 내용을 바꾸고 저장했지만, git을 이용하여 첫 번째 커밋으로 이동한 결과 첫 번째 커밋 상태로 돌아간 것을 확인할 수 있다!!

‘git checkout -’ 명령어를 이용하면 다시 가장 최근의 커밋 상태로 돌아갈 수 있다. 이처럼 로컬 pc에서 Git을 이용하여 버전 관리를 하는 법을 간단히 알아보았다. 이제는 GitHub을 이용하여 원격 저장소에 저장하여 더 버전 관리의 확장성을 넓혀보자.

GitHub 시작하기

GitHub 원격 저장소 만들기

로컬 pc에서 Git을 초기화 하였을 때, Git Repository가 정상적으로 초기화되었다는 문구를 봤었다. 이 Git Repository는 로컬 Repository를 의미하며, 하나의 pc가 아닌 여러 pc에서 하나의 프로젝트를 진행할 때에는 원격 Repository를 생성해야 하는데, 우리는 GitHub을 이용하여 원격 저장소를 생성할 것이다.

먼저 GitHub에 접속하여 계정을 생성하자. 계정을 생성하고 로그인하면 아래와 같은 화면을 볼 수 있는데, 여기서 New Repository를 클릭하여 새로운 원격 저장소를 만들어보자.

Fig6–1. 새로운 원격 저장소 생성하기 1
Fig 6–2. 새로운 원격 저장소 생성하기2

붉은 별표로 표시된 필수값들을 입력하고 Create repository를 클릭하면 원격 저장소 생성된다. 생성된 이후 볼 수 있는 페이지에서 원격 저장소의 주소를 복사하자. Fig6–3의 빨간 상자로 표시된 버튼을 클릭하면 주소가 복사된다.

Fig 6–3. 생성한 원격 저장소 주소 복사하기

이후에 다시 로컬 pc에 생성한 TestProject 폴더로 와서 Git Bash를 실행하고 아래와 같이 “git remote add ‘원격저장소 이름’ ‘원격저장소 주소’ ”를 입력하자. 원격저장소를 붙여넣을 때는 ctrl+v 단축키로는 입력되지 않으니 우클릭 이후 paste하거나 shift+ins 단축키를 이용하자. Fig6–4 에서는 원격 저장소이름이 origin이고, 원격저장소 주소가 https://…이다.

Fig 6–4. 로컬 저장소에 원격 저장소 주소 입력하기

이제 로컬 저장소에 저장한 내용을 원격 저장소에도 저장시켜보자.

Fig 6–5. 로컬 저장소의 내용을 원격 저장소에 저장하기

“git push ‘원격저장소 이름’ ‘로컬 브랜치 이름’ ”을 입력하여 로컬 저장소의 내용을 원격 저장소에 저장할 수 있다. 이 과정에서 GitHub 로그인을 요청한다. 가입한 GitHub의 계정을 인증하면 정상적으로 원격 저장소에 저장된다.

Fig 6–6. 원격 저장소에서 확인할 수 있는 로컬 저장소 파일

first file.txt를 클릭해보면 내가 저장한 내용이 있음을 확인할 수 있다.

다른 pc에서 원격 저장소 가져오기

원격 저장소의 코드와 버전 전체를 가져오는 것을 ‘clone(클론)’이라고 한다. 클론 하면 원격 저장소의 모든 버전과 원격 저장소의 주소가 로컬 저장소에 저장된다. 가능성이 높기 때문에 다른 pc라고 표현했지만, 사실상 같은 pc의 다른 디렉토리도 같은 원리이다. 즉 같은 pc의 다른 디렉토리에서도 원격 저장소를 클론할 수 있다.

다른 pc를 테스트하는 것보다 같은 pc의 다른 디렉토리에 테스트하는 것이 더 간단하므로 이 방법으로 진행하자. 그러나 다른 pc에서 진행하는 방법도 다르지 않다. 먼저 TestProject 폴더를 생성한 디렉토리에 TestProject2 폴더를 생성해보자.

Fig 7–1. 다른 디렉토리에 프로젝트 생성

이후에 TestProject2 폴더 내부에서 Git Bash를 실행하고, 아래와 같이 “git clone ‘원격 저장소 주소’ . ” 를 입력하자. 명령어 끝에 한 칸 띄고 마침표(.)를 빼먹으면 폴더 내부에 TestProject가 다시 생성되니까 빼먹지 않도록 하자!!

Fig 7–2. 원격 저장소의 모든 버전과 주소 가져오기

원격 저장소의 버전들과 주소를 가져오는데 성공한 것을 확인할 수 있다!! 여러 pc에서도 하나의 프로젝트를 관리할 수 있다…!! ‘.git’ 디렉토리와 원격 저장소에 저장되어 있던 파일이 로컬 pc에 저장된 것을 확인할 수 있다.

Fig 7–3. 원격 저장소를 clone한 결과1

first file.txt 를 열어보면 저장했던 내용인 “두 번째 커밋”이 적혀있다. 이번에는 이 파일을 수정하여 원격 저장소에 저장해보자.

Fig 7–4. 원격 저장소를 clone한 결과2

위와 같이 내용을 저장하고, 로컬 저장소에 커밋을 생성해야한다.

Fig 7–5. 다른 pc에서 생긴 변경사항을 원격 저장소에 적용하기

commit 을 생성한 후, 원격 저장소에 변경된 내용을 저장한다. 이번에는 원격 저장소를 git remote add 명령어로 추가해주지 않았음에도 불구하고 이미 있는 것처럼 push 명령어가 성공했는데, 이유는 clone하면서 원격 저장소의 정보를 저장하기 때문이다. 원격 저장소의 기본 이름은 origin이다. 테스트를 위해 같은 pc의 다른 디렉토리에서 진행했지만, 만약 실제로 다른 pc에서 진행한다면 GitHub 인증 과정을 거쳐야할 것이다.

Fig 7–6. 다른 pc에서 생긴 변경사항 원격 저장소에 적용한 결과

이로써 변경된 내용이 원격 저장소에도 적용된 것을 알 수 있다!

내용이 다소 길어보일 수 있지만, Git과 GitHub의 기초에 조금 더 쉽게 다가갈 수 있도록 작성하려고 노력했다. branch라는 중요한 개념을 다루지 않았지만, 다룰 내용이 많아 본 포스트에서 제외하였고, 본 포스트에서 다루었던 개념들부터 다루어 버전 관리를 시작해보자. commit, checkout, push, clone은 반드시 숙지해야한다.

Reference

  1. 정호영 and 진유림, (2021), 팀 개발을 위한 Git GitHub 시작하기, 한빛미디어

--

--

dEpayse
dEpayse_publication

나뿐만 아니라 다른 사람들도 이해할 수 있도록 작성하는, 친절한 블로그를 목표로.