학교 수업이나 공모전을 통해 프로젝트를 시작할 때 대부분의 사람들을 깃허브를 많이 사용한다. 나 역시 깃허브를 사용해서 기능 추가도 하고 멋지게 리드미도 작성했었던 경험이 있다.
다만 깃허브를 사용하면서 들었던 생각은 생각보다 복잡한 것이다. 처음에 시작할 때는 "우린 할 수 있다!" 이런 마인드로 했었는데 막상 나중에 가면 오히려 깃허브가 많이 불편했었기 때문이다. 그리고 매번 사용하는 것이 아니라 프로젝트를 진행할 때에만 급하게 명령어를 찾아보고 하다 보니 기억이 휘발되는 것은 당연한 것이라 추측해 본다.
이번에 학교 사업단에서 주최한 대회에 참여하면서 깃허브를 정말 많이 사용했다. 처음에는 노션에서 수정 부분을 상세히 기록하고 압축해서 프로젝트 파일을 업로드하고는 했는데 편의를 위해 깃허브로 전환했다가 다시 노션으로 돌아갈까 생각하기도 했었다.
매번 최신 상태로 유지하기 위해서 새로 다운 받고 초기 설정하는 것은 불편했었지만 어쩔 수 없으리라 생각하기도 했다. 깃허브는 커밋 그리고 푸시를 할 때마다 늘어나는 걱정들이 주요 문제였기 때문이다. 실수로 업로드 했다가 코드가 다 꼬이기도 했었던 아쉬운 경험들이 마음에 남아 있었는데, 그래도 프로젝트를 잘 마무리 해서 다행이다.
다시는 깃허브 관련 글들을 찾아보지 않겠다는 마인드로 글을 작성하는 것이기도 하다. 이제는 그만 찾아보고 스스로 해내고 싶은 의지가 강하다. 막상 대회가 끝나고 나니 깃허브가 어렵지 않다는 생각이 들었고 이제는 혼자서도 뭐든 잘 할 수 있게 되어서 뿌듯하다.
깃허브는 보통 버전 관리
, 백업
, 협업
을 위해 사용한다고 보면 된다.
[버전 관리]
팀원들과 협업하는 프로젝트를 진행하고 있다면, 서로가 각자 맡은 기능을 구현한 다음에 한 번에 합치면 정말 좋지만 그런 경우가 많지 않다. 사용 목적이 같지만 서로 선언명이 다를 수도 있고 그러면 코드 길이가 점점 길어지게 되고 장기적으로 봤을 때 좋지 않다. 그래서 메인 브랜치에 하나씩 기능을 업로드해 나가면서 버전 관리를 진행하는 것이 좋다. 초기 버전에는 어떤 기능이 있고 그 다음에는 다른 기능이 추가되었다는 식으로 가야 나중에 충돌이 발생했을 때 되돌리기도 편하다.
[백업]
개발자를 떠나서 모든 사용자들에게 중요한 백업. 깃허브에 파일을 저장함으로써 파일 보존을 할 수 있다. 필요하지 않다고 생각해서 삭제했는데 중요한 파일이었을 경우 정말 끔찍하다. 하지만 깃허브에 백업을 해두었다면 다시 다운로드하면 되는 일이니 다행이다.
[협업]
깃허브에서 레포지터리 하나를 생성한 다음에 팀원들이 각자 로컬 브랜치에서 작업하고 커밋과 푸시를 하면 원격 저장소에도 변경 사항이 반영된다. 팀원은 해당 변경 사항을 로컬에 반영하여 작업을 진행하면 된다. 추가 설정이 필요가 없어서 협업하는 입장에서는 정말 편리하다.
간단히 설명하자면 Git은 소프트웨어이고 GitHub가 서비스에 해당한다. 개발자는 Git을 통해 로컬 컴퓨터에서 작업하고 GitHub를 통해 웹에서 레포지터리를 관리하는 방식이다.
로컬에서 소스 코드의 버전 관리를 가능하게 하는 소프트웨어이다. 프로젝트의 변경 사항을 추적 및 관리한다.
Git을 사용하는 프로젝트를 호스팅하여 웹을 기반으로 협업 도구와 소셜 코딩을 제공하는 플랫폼이다.
GitHub 말고도 다양한 Git Program들이 존재한다. GitHub Desktop 과 Source Tree는 사용해 본 경험이 있으나 현재는 GitHub Desktop만 간간히 사용하고 있고 웬만해서는 커맨드 창에 입력하면서 작업하고 있다.
GitHub Desktop : GitHub에서 제공하는 프로그램인데 GitHub를 GUI 기반으로 구현한 것이라 생각하면 될 것 같다. Git을 처음 사용한다면 GitHub Desktop도 무난하게 사용할 수 있을 것이다.
TortoiseGit : 책 보고 공부하면서 처음 알게된 프로그램인데, 윈도우 전용 프로그램이고 윈도우 탐색기의 빠른 메뉴에 추가된다고 한다. 주변에서 사용하는 모습은 잘 못 본 것 같다.
Command Line Interface : 터미널 창에 명령을 직접 입력해서 사용하는 방식이다. 커맨드 창에 입력하다보니 GUI 기반 프로그램들보다는 어렵다. 또한, 리눅스 명령어 + 깃 명령어 둘다 알고 있어야 잘 사용할 수 있다고 한다.
Source Tree : 예전에 유니티로 게임 개발을 진행할 때 사용해 본 경험이 있는데, 초보자들이 사용하기에는 많이 어려웠다. 깃의 기본 기능부터 고급 기능까지 모두 사용할 수 있어서 숙련자에게 추천된다.
다 사용해본 것은 아니지만 나는 Git Bash가 제일 편했다. 안드로이드 스튜디오나 다른 프로그램 사용하면서 커맨드 창에 입력하면 끝이었기 때문이었다. 효율적으로 사용할 수만 있다면 위의 프로그램들을 추천하는 부분이다. 이외의 프로그램들은 아래의 링크에서 찾아볼 수 있다.
More Information about Git Program
깃은 사용 전에 사용자 정보를 입력해야 한다. 버전을 정리할 때 누가 그것을 만들었는 지에 대해 알아야 하기 때문이다.
git config --global user.name "깃허브 사용자 이름"
git config --global user.email "깃허브 이메일"
--global
이 무엇을 의미하나 싶었는데 현재 컴퓨터에 있는 모든 저장소에서 동일한 사용자 정보로 설정해 준다고 한다. 함수에서 전역 변수 느낌으로 보면 될 것 같다.
나는 이미 설정이 되어 있어서 아무 일도 일어나지 않았다. 처음 하시는 분들은 위와 같이 진행해주시면 된다.
Git Bash에 git
을 입력하면 명령어를 친절하게 알려준다. 우리는 Git을 사용하면서 다음과 같은 명령어들을 사용하게 된다.
나중에 생각하고 보니 리눅스를 배우고 Git을 사용했으면 더 편했을 것 같다고 느꼈다. 윈도우든 macOS든 커널은 모두 리눅스라 리눅스 명령어가 많이 사용되기 때문에, 리눅스를 이미 학습해 본 사용자는 따로 추가 학습이 필요하지 않다. 이정도면 CS 학습에 있어서 리눅스도 전공 필수로 정하는 것도 좋을 것 같다는 생각이 든다. 운영체제도 리눅스나 유닉스를 배우지 않으면 공부하면서 벽을 느끼게 되기 때문이다.
pwd
를 입력하면 현재 디렉토리를 안내한다. Git 사용 시에 항상 현재 디렉토리가 어디를 가리키는 지를 꼭 확인해 주면 좋다. 대부분이 이를 인지하지 못하고 다른 디렉토리에서 작업하다가 오류가 많이 발생하는 것을 목격했다.
cd ./Desktop
mkdir test
cd ./Desktop
을 통해 바탕 화면으로 이동하였고 mkdir test
를 통해 바탕 화면에 test 폴더를 만들었다. mkdir
은 Make Directory의 약자이다.
바탕 화면에 test 폴더가 만들어진 것을 확인할 수 있다. 그리고 cd ./test
를 통해 test 디렉토리에 접근하고 vim test.txt
를 입력하여 test라는 이름을 가진 txt 파일을 만들어 본다.
사실 Git Bash에서 vim이 되는 줄 몰랐어서 막상 되는 모습을 보고는 좀 신기했다.
vim은 모드가 여러가지라 조금 헷갈릴 수 있는데 입력 모드에서 내용을 작성한 후에는 ex 모드로 돌아와서 저장하고 종료하면 된다. 보통 esc를 누르고 아래와 같이 조건에 따라 명령어를 입력하면 종료된다.
[빔 ex 모드 명령 모음]
:w
/ :write
: 편집 중인 문서를 저장한다.
:q
/ :quit
: 편집기를 종료한다.
:wq (파일 이름)
: 편집 중이던 문서를 저장하고 종료한다. 파일 이름을 함께 입력하면 그 이름으로 저장한다.
q!
: 문서를 저장하지 않고 편집기를 종료한다. 확장자가 .swp인 임시 파일이 생성된다.
git init
을 입력하면 깃 저장소를 생성할 수 있다. 깃을 사용하는 디렉토리로 바꿔준다 생각하면 된다. 다음과 같이 안내가 된다면 초기화가 잘 적용된 것이다.
이렇게 하면 ./git
이라는 디렉토리가 생성된 것을 확인할 수 있는데, 이곳에 우리가 작업한 버전들이 저장된다.