본문 바로가기

기타

[GitHub 사용법] 깃허브 이론 및 사용해보기 (1)

본 포스팅에서는 깃허브의 이론 및 사용방법에 대해서 알아보도록 하겠다.

프로그래밍을 하다보면 항상 코드 관리가 어렵다.... 나도 처음에는 로컬에서 개인적으로 코드관리를 하다보니까 나중에 어떤 코드가 어떤 코드였는지 잊어먹고 하나씩 열어보고서야 확인을 하는 수고를 했다.... 깃의 존재는 알았지만 그다지 필요성은 못느끼다가 코드가 방대해지거나 하나의 프로젝트를 다같이 진행할때 깃이 꼭 필요하다는 것을 느끼고 최근에 깃의 사용방법을 알아보고 나만의 저장소로 쓰기로 결심하였다. 그래서! 이번 포스팅에서는 깃의 이론과 첫번째 커밋을 해보도록 하겠다.





깃 (Git)의 정의는 프로그램 등의 소스 코드 관리를 위한 분산버전 관리 시스템으로 깃의 작업 폴더는 모두 기록하고 있어서 추적이 가능하고, 완전한 형태의 저장소 라고 정의되어 있고 리눅스를 쓰면 아는 리누스 토발즈 행님이 만드신 프로젝트 관리 솔루션? 이라고 할 수 있다. 그렇다면 깃이 어떤건지 자세히 알아보도록 하고 깃의 첫번째 커밋 미션을 수행해보도록 하겠다.


(지금 포스팅 하던거 다 날라가서 다시 쓰고 있는거라 열받았다... 젠장 자동저장도 믿을게 못되는 구만..)


1. 깃 (Git) 이란??


일반적으로 프로젝트 관리를 위해서 사용되는 Centralized Version Control System (CVCS)의 구조는 아래와 같다.




Central VCS System이라는 중앙서버와 클라이언트가 존재하며, 중앙 서버는 프로젝트의 모든 관리를 하게된다. 클라이언트는 작업시 중앙 서버에서 프로젝트를 내려받거나 업로드하면서 협업혹은 버전관리를 할 수 있다. 하지만 위의 CVCS 방식은 치명적인 문제점이 존재한다. 중앙 서버가 날라가면 끝이다... 걍 다 날라가는거다.. 지금 내가 블로그 포스팅한거 날려먹은거처럼... 이를 방지하기 위해서 백업서버를 두고서 사용하지만 결국 최악의 경우 백업서버가 날라가면 동일하다. 본질적인 문제가 해결되지는 않는것이다. 이러한 방식의 문제점을 해결하기 위해 토발즈 행님은 Git의 구조를 만들어서 리눅스 커널 개발에 사용을 하고자했고 이를 기반으로 만들어진것이 우리가 사용하려는 GitHub 이다. 그렇다면 Git의 구조는 어떨까? 아래와 같다.





Distributed Version Control System (DVCS) 라고 불리며 말그대로 분산 버전 관리 시스템이다. 간단하게 말하면 중앙 서버의 데이터베이스를 클라이언트가 모조리 주기적으로 백업하며 사용하는 방식이다. 중앙 서버가 날라가도 특정 클라이언트가 서버 복원이 가능한 모든 Checkout이 모든 데이터를 가진 진정한 백업 시스템이다. 정말 간단하게 설명했지만 깃의 용어와 방식을 설명하면 약간은 복잡할 수 있다.


2. 깃 (Git) 의 구조


Git은 파일을 3가지 상태로 관리한다. Committed, Modified, Staged라고 불리는 3가지 상태로 파일을 관리하게 되며 각각의 의미는 다음과 같다.


1. Committed: 파일을 수정한 후 해당 파일에 대해 commit 명령을 실행해 파일을 로컬 데이터베이스에 안전하게 저장한 상태를 의미


2. Modified: 파일을 수정한 후 아직 로컬 데이터베이스에 commit하지 않은 상태


3. Staged: 파일을 수정한 후 수정할 파일을 곧 commit할 것이라고 표시한 상태


총 3가지로 구분이 가능하며 커밋을 하기위한 단계로는 git add, git commit, git push 단계가 존재한다.


컴퓨터 ---------> 스테이지 영역 ---------> 로컬 저장소 ----------> 원격 저장소

git add                        git commit                    git push



3. 깃 (Git) 의 설치


아래의 홈페이지를 접속해 설치를 해주면 된다. 윈도우 기준으로 설치 방법을 알아보도록 하겠다.


https://git-scm.com/ 






아마 윈도우 다운로드를 클릭하면면 자신의 버전 64bit인지 32bit인지 스스로 판단해서 다운로드를 해준다. 설치할때 여러가지 설정을 해주게 되는데 그냥 default로 설치해줘도 무방할것 같다. 설치를 완료하면 git bash, git gui, git cmd가 설치가 되었을 것이다. 여기서 제대로 설치가 됐는지 확인을 위해서 git bash를 열어 git 입력했을때 아래와 같이 뜨면 정상적으로 설치가 된것이다.



이제 깃 홈페이지를 들어가서 회원가입을 하고 내가 사용할 레퍼지토리를 만들도록 하겠다. 아래의 홈페이지를 들어가서 간단하게 회원가입을 해주면 바로 로그인이 된다.


https://github.com/





나는 기존에 만든 레퍼지토리들이 있지만 이번 포스팅을 위해 새로 레퍼지토리를 만들도록 하겠다 위의 그림에서 빨간색으로 표시된 New를 누르면 새로운 나만의 레퍼지토리를 만들 수 있다. New를 클릭하자!!

클릭후에 Create a new repository 가 뜨면 나의 레퍼지토리의 네임과 설명을 쓰면된다 private은 돈이 들기 때문에 default로 설정된 public로 설정해주고 initialize this repository with a README는 선택 안하기로 한다. 이후에 직접 만들어 주도록 할 것이다. 레퍼지토리 네임은 향 후 나의 접근 할 url 명이기도 하다. 다 설정했으면 Create repository를 클릭해주면 된다.



3. 깃 (Git) 연동 (로컬, 원격)


2번 스텝까지 무사히 마쳤다면 나의 레퍼지토리가 아래와 같이 생성이 되었을 것이다. 하지만 현재로는 나의 프로젝트를 원격으로 push를 하기는 불가능하다 나의 로컬 특정 디렉토리와 깃의 레퍼지토리의 연동이 필요하다. 이제는 그 작업을 하도록 하겠다.





2번 스텝까지 무사히 마쳤다면 나의 레퍼지토리가 아래와 같이 생성이 되었을 것이다. 하지만 현재로는 나의 프로젝트를 원격으로 push를 하기는 불가능하다 나의 로컬 특정 디렉토리와 깃의 레퍼지토리의 연동이 필요하다. 이제는 그 작업을 하도록 하겠다. 1차적으로 로컬로 돌아와서 내가 작업할 디렉토리를 정해줘야 한다. 나의 경우에는 git > android_FCMpush 라는 폴더를 만들었다. 이 후 해당 폴더에서 우클릭 한후에 git bash here 를 클릭하면 해당 디렉토리 경로로 이동된 git 커맨드창이 켜질 것이다. git init을 입력해주자. 아래와 같이 뜰 것이다.



git init은 git 저장소 초기화를 해주는 작업이다. 이전까지는 일반적인 디렉토리에 불과하지만 git init을 통해서 추가적인 git의 명령어들을 줄 수 있다. 이제 Readme 라는 파일을 생성할 것이다. 이 파일은 git 레퍼지토리의 정보와 프로젝트의 정보들을 가지고 있는 디폴트로 가지고 있는 파일이라고 생각하면 될거 같다. 


$ echo "# android_FCMpush" >> README.md


 나는 레퍼지토리명이 android_FCMpush 이기 때문에 저렇게 썼지만 각자 레퍼지토리에 맞는 네임으로 바꿔서 명령어를 실행해주면 된다. 그리고 나는 첫번째 커밋을 위해 안드로이드 프로젝트 하나를 나의 로컬 디렉토리에 옮겨놓은 상태이다. 


$ git add .


위의 add 의 경우에 git add . 를 한다고 해서 파일을 레퍼지토리에 추가하지는 않는다 앞전에 말했던거와 같이 add를 할 경우 나의 로컬에 저장되어 있는 파일들을 스테이징징 단계로 넘기는 작업이다 일종의 깃을 push 하기전의 첫번째 준비 단계인것이다. 만약 에러가 난다면 다시한번 git add . 를 해주자!! 중간에 README.md 파일을 생성 후에 다른 파일을 디렉토리에 넣게되면 한번씩 꼬이는거 같다...... 이유가 모징...


$ git commit -m "commit"


깃 push를 총 3가진 단계 add, commit, push 중 두번째 단계이다. "commit" 은 자신이 알아서 수정해주면 된다 커밋 메시지로 보면 된다. 

나의 경우에는 $ git commit -m "fcm_cloudmessaging_push" 로 커밋했다. 그런데 아래와 같이 오류가 생길 수 도 있다. 별 큰 문제는 아니지만




친절하게 해결 방법이 나와있다. 아래와 같이 입력해주자 내 이메일 아이디 입력해주면 된다.


$ git config --global user.email 내 이메일 아이디@naver.com

$ git config --global user.name song


다시 커밋


$ git commit -m "fcm_cloudmessaging_push"


이제 마지막 단계인 push 단계이다. 아직까지는 깃허브의 원격 저장소에 저장이 되지는 않고 연결 단계까지 마친 상황이다 이제 push 단계를 마치면 저장이 되는 것을 확인할 수 있을 것이다.


// 내 깃 경로에 맞게 수정해줘야 한다. 깃 레퍼지토리를 들어가면 순차적으로 잘 나와있다.

$ git remote add origin https://github.com/sssssss/android_FCMpush.git

$ git push -u origin master


아마 처음 푸시면 아래와 같이 깃허브 로그인 화면이 나올것이다. 로그인을 해주면 자동으로 푸시가 된다.




최종적으로 푸시를 완료한 모습이다. 커밋 메시지가 중간에 뜨고 내 로컬 디렉토리에 있던 파일들이 함께 깃허브의 원격저장소에 저장된것을 확인할 수 있다.!!!






본 포스팅에서는 간단히 일괄로 내 로컬저장소에 있는 프로젝트를 푸시하는 것을 해보았다 하지만 깃은 이외에도 다양한 기능들이 존재한다 일단은 다음에 버전관리에 대해서 해볼까 한다. 왜냐면 나도 이거는 안해봐서 해봐야한다... 그렇다면 ㅂㅂ 다음시간에