ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 깃과 깃허브 사용법
    소프트웨어 개발 툴 2019. 1. 23. 15:19

     소프트웨어 엔지니어링의 세계에 살다보면 사람들이 깃(git)이나 깃허브(github)에 대해 이야기 하는 것을 종종 듣게 된다. 오픈소스 프로젝트를 구할 때도 깃허브에서 많이들 시작한다. 깃과 깃허브을 같은 것으로 생각하는 사람들도 간혹 있는데, 이 두 툴은 매우 다른 툴이다. git은 팀 내에서 소스코드 관리를 위한 툴이고 github은 'git'이라는 소스코드 관리 툴을 이용해 오픈 소스 프로젝트를 위한 플랫폼을 만든 것이다. 따라서 자신의 프로젝트를 공개하고 싶은 누구나 github에 소스코드를 올릴 수 있고, 또 누구나 올려진 소스코드에 참여 할 수 있다. 오늘은 이 포스트를 통해서 깃과 깃허브의 사용 방법을 알아보도록 하겠다.


    git을 왜 알아야 할까?

    • 현업에서 반드시 사용한다. git이 아니라면 svn이라도 사용한다. (본인의 회사가 현재 사용하지 않는다면 빠른 시일내에 깃을 사용하길 바란다. 그렇지 않으면 추후에 땅을 치고 후회 할지도 모르는 상황을 예방 할 수 있다.)
    • 누가 어떤 코드를 언제 수정했는지 트래킹 할 수 있다.
    • 롤백시 직접 일일히 하지 않아도 된다. 
    • 팀 자체의 소스코드를 관리하기 용이하다.

    깃허브을 알면 좋은 이유는?

    • github에 다양한 오픈소스 프로젝트들이 있다. 오픈 소스 프로젝트에 참여 할 계획이라면 github을 사용 할 줄 알아야 한다.
    • git은 기본적으로 git repository가 설치된 서버가 필요하다. git을 배우기 위해 서버를 구축하고 리파지토리를 설정하는 것은 배보다 배꼽이 더 큰 격이다. 따라서 github을 통해 실제 현업에서는 git을 어떻게 쓰는지 경험 해 볼 수 있다.
    • github은 소프트웨어 엔지니어들이 포트폴리오를 만들기 아주 좋은 플랫폼이다. 나도 개인용 깃허브에 내가 했던 작은 프로젝트들을 올리고 링크드인과 연결하여 포트폴리오를 만들었다. 요즘에는 깃허브을 이용한 블로그도 나와서 많은 데이터사이언티스트들이나 엔지니어들이 이용하는 추세이다.
    • 깃허브에서 오픈소스를 참여하면서 해외로 취직하는 경우도 종종 있다.

     튜토리얼을 시작하기에 앞서 당부하고자 하는게 있다.

    1.  나는 맥북 유저이다. 개인적으로 모든 리눅스/유닉스계열 개발자들은 맥북을 사용하는게 더 좋다고 생각한다. 커맨드라인이나 환경설정이 실제 서버로 많이 쓰이는 리눅스와 가장 비슷하기 때문이다. 따라서 윈도우즈를 사용하는 독자들이 어려움을 겪을 수 있다. 그런 경우 댓글을 달아주면 성심 성의껏 답하도록 하겠다.
    2. 한글 디렉토리 경로 아래에 개발환경을 만들지 말아라. 예를들어 git을 C://Users/내이름/MyProject 이런식으로 한글 경로 아래 프로젝트를 만들지 말아라. 또 한글 경로 아래에 git을 설치하지 말아라. 꼭 깃이 아니더라도 한글 때문에 경로를 인식하지 못하는 경우가 종종 있다. 

    깃(git) 과  깃허브(GitHub) 튜토리얼

     git 다운로드

    윈도우즈 유저 

    깃 다운로드 경로 : 여기로 들어가서 설치한다.

    맥북 유저

    깃 다운로드 경로 : 여기로 들어가 Installing On Mac보면 다음과 같이 설명이 되어있다.
    Mavericks (10.9) 나 그 이상의 경우 git이 이미 설치되어 있을 수 있으니 터미널을 켜고 다음과 같이 깃의 설치 여부를 확인한다. 

    $git --version

    만약 설치되어있지 않다면 여기로 들어가서 설치한다.

    설치가 모두 끝나면 터미널(또는 커맨드프롬프트)를 열고 git --version을 통해 설치를 확인한다.

    $git --version

    git version 2.17.2 (Apple Git-113)

    GitHub 회원가입

    허브 사이트에 들어가 회원가입을 한다.

    가입을 완료하고 반드시 이메일 인증을 거친다.


    회원가입을 마쳤다면 이런 화면이 나올것이다. 화면이 보인다면 중앙에 Start a project를 클릭한다.



    Repository name: 당신의 프로젝트가 저장될 서버의 URL이라고 생각하면 쉽다. .gitignore와 license는 지금 단계에서는 생각하지 않아도 된다. 리파지토리 이름만 잘 짓고 Create Repository를 누른다. 성공적으로 리파지토리가 만들어졌다면 다음과 같은 화면을 보게 될 것이다.



    방금 생성된 깃허브의 주소: (링크)

    또는 우측 상단의 아이콘을 누르고 Your Repositories로 들어간다. 들어가면 중간 화면에 리파지토리 목록이 있을 것이다.



     https://github.com/<유저아이디>/<리파지토리 이름>.git -> 당신의 소스코드가 저장되어 있는 깃 리파지토리이다. 이 주소를 이용해 앞으로 소스코드를 내려받고, 올리고, 수정을 커밋하고 할 것이다. 뭐가 영어로 많이 적혀있어 혼란스럽겠지만 당황하지 말고, 터미널(또는 커맨드 프롬프트)를 켠다.우리는 '...or create a new repository on the command line'을 진행 할 것이다.


     그러기에 앞서 먼저 프로젝트를 준비하길 바란다. 프로젝트는 거창 할 필요 없다. 코드가 없다면 그냥 텍스트파일 하나라도 충분하다. 이 블로그에서는 소프트웨어 엔지니어가 되는 법에서 사용했던 프로젝트를 깃허브에 올릴 것이다.


    소프트웨어 엔지니어게 되는 법에서 보인 "연락처" 앱 구조


     터미널(또는 커맨드 프롬프트)를 이용해 프로젝트가 있는 경로로 들어간다.


    $cd <프로젝트 경로>

    예를들어

    cd ~/IdeaProjects/CompleteGuideToBecomingSoftwareEngineer



    프로젝트 경로로 들어갔으면 이제 따라 친다.


    git init은 현재 디렉토리를 깃 리파지토리로 초기화한다. 이 디렉토리 아래에 .git 이라는 디렉토리를 만들어서 추가 하는건데, 자세한건 나중에 알아도 된다. 이 명령어를 쓰면 git에게, "자 이제부터 이 디렉토리는 깃 리파지토리야" 라고 앞서 설치한 git에게 알려주는 과정이다.

    $git init

    Initialized empty Git repository in <PROJECT_PATH>


    git add는 특정 파일을 "stage"(대기시키는 것)시키는 것인데, 리파지토리에 커밋(저장)할 파일을 선택하는 것이다. 예를들어 당신이 파일 A, B, C를 수정했다고 치자. B파일은 수정이 아직 덜 끝나 팀과 공동으로 사용하는 remote 리파지토리에 push(커밋 후 서버 리파지토리로 옮기는 과정) 할 수 없다. 그 때, 누군가 A와 C의 수정본을 요청한다면 git add를 통해 A, C파일만 커밋을 하고 서버 리파지토리에 커밋 할 수 있다는 뜻이다. -A는 모든 수정된 파일들을 스테이징 시키라는 뜻이다.

    $git add -A


    이제 첫 소스코드를 커밋하자. 커밋이란 간단히 말해 내 소스코드를 깃 리파지토리에 저장하는 것이다. 이미 내 컴퓨터에 저장되어 있는데 무슨 뜻이냐...???? 하면 그것은 당신의 컴퓨터에 파일을 저장하는 것이고, commitgit에게, "야 내가 이거 저장할테니까 내가 언제 저장했는지 뭘 저장했는지 git repository에 저장해." 라고 말하는 것과 같다. 예를 들어서 커밋을 하지 않고 git stash 나 git reset등 여러가지 명령어로 당신의 코드를 초기상태(마지막 커밋 상태)로 되돌릴 수 있다. 아무튼 첫 소스코드를 커밋 해보자.

    $git commit -m "first commit"


    [master (root-commit) 5a6c42a] first commit



    위 처럼 뭐라뭐라 영어로 뜬다면 성공이다. 당신의 커밋에 대한 설명과 아래 커밋된 파일들이 출력된다. 이제 커밋을 마쳤으니 끝인가? 그렇지 않다. 당신은 방금 "로컬 커밋"을 한 것이다. 당신의 "로컬 리파지토리"에 커밋을 한 것이지 실제 깃허브 서버에는 코드가 올라가지 않은 상태이다. 


    아주 간단히 말해 아래처럼 로컬 커밋 후 리모트 리파지토리(예: 깃허브 리파지토리)에 push를 해야 git 서버에 당신이 commit한 코드가 올라간다는 것이다.



    내 컴퓨터가 어떤 리모트 깃 리파지토리에 뭘 올려야 하는지 어떻게 알까? 

    모른다.

    그러니 알려줘야 한다. 

    $git remote add origin <remote 깃 리파지토리 경로>


    예를들어

    git remote add origin https://github.com/fsoftwareengineer/githubtutorial.git



    리파지토리 경로는 아래와 같이 .git으로 끝나는 URL을 말한다. 당신이 생성한 깃 리파지토리의 메인 화면에 있을 것이다.


    성공적으로 remote 리파지토리를 알려줬다면 아무일도 일어나지 않았을 것이다. 에러가 나지 않으면 잘 된 것이다. 위 과정은 "깃아, 내가 리모트 리파지토리인 'origin'이란 녀석을 추가할거야. 근데 origin의 주소는 https://github.com/fsoftwareengineer/githubtutorial.git란다" 하고 알려주는 과정이다.


    자 이제 코드를 리모트 리파지토리로 올려보자!

    당신이 로컬에 커밋 한 코드를 리모트 리파지토리로 올리는 것을 "push"라고 한다.  다음 명령어는 "현재까지 커밋 된 것들을 origin (아까 origin의 경로를 설정 했던 것을 기억해라.) 리파지토리의 'master' 브랜치로 추가해라"라는 뜻이다. 브랜치(branch)가 뭐냐?? 지금은 몰라도 된다. 알고 싶으면 찾아봐도 좋다. 필요하다면 다른 포스트에 올리도록 하겠다. 지금은 코드를 푸시하는데 집중하자.

    아래의 명령어를 치면 로그인 프롬프트가 뜰 것이다. GitHub의 아이디와 비밀번호를 입력하면 된다.


    $git push -u origin master

    Username for 'https://github.vom': <USER_ID>

    Password for 'https://fsoftwareengineer@github.com': <PASSWORD>

    Counting objects: 18, done

    Delta compression using up to 4 threads.

    Compressing objects: 100% (15/15), done.

    Total 18 (delta 0), reused 0 (delta 0)

    To https://github.com/fsoftwareengineer/githubtutorial.git

    * [new branch]    master -> master

    Branch 'master' set up to track remote branch 'master' from 'origin'



    이런 화면이 보인다면 성공적으로 푸시를 한 것이다. 이제 깃허브 사이트에 들어가서 리파지토리에 코드가 올려져 있는지 확인 해 보자.

    아까 보았던 튜토리얼 같은 화면 대신 올라간 소스코드가 보인다면 성공 한 것이다. 중간에 하늘색으로 fsoftwareengineer first commit 이라고 쓰여진 것을 확인 할 수 있다. 본인이 올린 소스코드를 꼭 확인하길 바란다. 여전히 아무것도 없다면 뭔가 잘못된것이다.


    이제 프로젝트를 깃허브에 올리고 자신만의 포트폴리오를 만들어보자

    아니면 오픈소스 프로젝트에 참여해 보는 것도 좋다. 다음 포스트에서는 브랜치의 개념과 내 리파지토리가 아닌 다른 사람의 리파지토리에 커밋/푸시/Pull Request를 만드는 법에 대해 설명하도록 하겠다.

    자잘한 팁

    터미널이나 커맨드라인을 사용하는게 정 불편하다면 깃허브 데스크탑이나 아틀라시안의 소스 트리를 이용하는 방법도 있다.

    소스트리의 예


    끝으로 댓글에 잘 안되는 부분이나 설명이 더 필요한 부분을 남기면 재빠르게 답하도록 하겠다.



    댓글

f.software engineer @ All Right Reserved