이상학의 개발블로그

[Git] Git ecosystem with. Github Gist Gitbook Pages Travis 본문

Dev Tools

[Git] Git ecosystem with. Github Gist Gitbook Pages Travis

학학이 2017. 6. 23. 13:23

Introduction

개발자들은 자신의 프로그램 소스 코드를 효율적으로 관리하기 위해 버전 관리 툴을 이용한다. 
과거에는 SVN을 많이 사용했지만, 최근엔 Git을 대부분 선택한다. 
Git과 함께 사용할 수 있는 Git 생태계에 대해서 알아본다.

Git

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. 
https://git-scm.com

프로그램의 소스 코드를 관리하는 DVCS(Distributed Version Control Systems)

Version Control

버전 관리 시스템은 파일의 변화를 시간에 따라 기록하여 과거 특정 시점의 버전을 다시 불러올 수 있는 시스템이다. 
로컬, 중앙 집중, 분산 버전 관리

NOTE: 필자의 주관적인 비유론, 버전 관리는 2가지 초능력을 가진 사람이다. 
첫 번째는 분신술, 두 번째는 타임머신 능력. 분신술을 이용해서 자신을 계속해서 복제한다. 각기 복제된 사람은 각자의 인생을 살아간다. 어떤 복제 인간은 공부만 하고 어떤 복제 인간은 운동만 한다. 공부한 내용이 마음에 들지 않으면 타임머신 기능을 이용해 과거로 돌아가서 다시 배운다. 이렇게 각자의 인생을 살아가는 복제 인간은 어느 시점에서 최초의 복제되기 전의 사람으로 합쳐지고 여태 학습한 지식, 능력 등이 합쳐진다. 굉장하다!

SVN vs Git


SVN : 파일을 관리하는 중앙 서버가 존재하고, 각 클라이언트들은 중앙 서버에서 파일을 Checkout 받아 사용한다. 즉, 중앙 서버에 의존적인 파일 관리 체계이다. 
Git: 파일을 관리를 개인 컴퓨터에서 한다. 각 클라이언트들은 자신의 파일 관리 서버에서 버전 관리를 하고, 협업을 위해 원격 저장소를 이용한다.

Github

GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside millions of other developers. 
https://github.com

Git으로 관리되는 프로젝트를 저장하는 원격 저장소 
위의 SVN vs Git 그림에서 Git의 REMOTE REPOSITORY

Make Public Repository

  • Add .gitignore : Git 원격 저장소에 올리지 않은 무시될 파일/폴더를 명시하는 파일 
  • Add a license : 해당 프로젝트의 라이센스 정보를 명시하는 파일



다음과 같이 Github에 공개된 저장소가 만들어진다.

Try Pull Request

Pull requests let you tell others about changes you’ve pushed to a repository on GitHub.

Github 원격 저장소의 Push된 변경 사항을 다른 사용자들에게 알려 코드 수정 사항에 대해 같이 토론하는 과정 
오픈소스 프로젝트에 자신이 만든 코드를 추가해 달다고 요청하거나 오류의 수정을 요청할 수 있다.

1. fork repo

변경하고자 하는 프로젝트를 복사하여 자신의 Github 계정으로 가져온다.

2. coding!

수정 사항을 코딩한다.

3. commit

자신의 fork repo에 commit 한다.(로컬에 변경 사항 저장)

4. push

자신의 fork repo에 push 한다.(원격 저장소에 변경 사항 저장)

5. Travis CI build check

Optional - 필자는 해당 프로젝트 Push 시 Travis CI가 자동 빌드한다. Travis CI에 대한 설명은 다시 나온다.

6. Pull Request

수정된 코드를 fork 받은 프로젝트로 병합하기 위해 요청을 보낸다.

  • 작업한 fork repo의 branch를 확인한 후 Pull Request 메세지를 적는다.

  • 변경되는 file과 code를 다시 한 번 확인한다.

  • 전송 버튼을 클릭하면 새로운 Pull Resquest가 생기고 PR 번호를 받는다.
  • 앞으로 추가 수정되는 사항과 PR의 승인, 거부 진행이 여기서 진행된다.

  • PR 승인 전, validator.js README.md
  • 아직 ko-KR isMobilePhone이 없는 상태

7. Pull Request Accepted

  • PR 승인 후, validator.js README.md
  • ko-KR isMobilePhone이 추가된 상태*

More

Bitbucket

Code, Manage, Collaborate 
Bitbucket is the Git solution for professional teams 
https://bitbucket.org

Free plan에서 개인 혹은 5명 이하의 팀은 private 저장소가 무제한 무료. 
Atlassian support.

Gitlab

The platform for modern developers 
GitLab unifies issues, code review, CI and CD into a single UI 
https://about.gitlab.com

설치형 Git 저장소 
Gitlab 장애 GitLab.com Database Incident (한글)

Gist

Instantly share code, notes, and snippets. 
https://gist.github.com

짧고 간단한 코드를 저장, 버전관리, 웹에 삽입하는 서비스

Embed Your Gist Code

Script

<script src="https://gist.github.com/SangHakLee/f3bdee00e6bcbb1965c235840eb43034.js"></script>

Result

More

Lepton

Gist를 효율적으로 관리하는 툴 
http://hackjutsu.com/Lepton

Colorscripter

<script> 태그 없이 코드 Syntax HighLighting 해주는 서비스 
https://colorscripter.com

Gitbook

Documentation made easy 
GitBook helps your team write, collaborate and publish content online. 
https://www.gitbook.com

Markdown 포맷을 이용해서 e-book을 작성하고 버전 관리, 배포해주는 서비스

Make REST Api Guide Page

https://developer.gitbook.com

Pages

Websites for you and your projects. 
Hosted directly from your GitHub repository. Just edit, push, and your changes are live. 
https://pages.github.com

Github 저장소를 웹 페이지로 만들어주는 서비스. 
정적 컨텐츠 블로그로 주로 이용된다.

github.io

Github 계정이 있다면 {username}.github.io 로 접근할 수 있는 호스팅 도메인을 1개씩 사용할 수 있다. 
https://sanghaklee.github.io

Github Repo를 {username}/{username}.github.io 로 만들면 바로 이용할 수 있다. 
https://github.com/SangHakLee/sanghaklee.github.io

Pages는 PHP, JSP, ASP 같은 서버사이드 스크립트를 읽는 서버가 없다. 
HTML, CSS, JavaScript를 포함한 정적 컨텐츠만 이용할 수 있다.

Static Site Generator

정적 페이지를 자동으로 만들어주는 프레임워크 
Static Site Generator로 생성되는 페이지는 정적이기 때문에 최종으로 생성된 HTML만 올리면 Server-side 언어의 도움을 받을 필요가 없다. 
즉, AWS S3와 같이 저장소와 접근 가능한 URL만 존재하면 생성된 HTML을 배포할 수 있다.

https://www.staticgen.com 
https://staticsitegenerators.net

Jekyll vs Hexo

이 과정을 쉽고 간편하게 해주는 서비스가 있다.

Ruby 기반의 Jekyll (Repo star rank 1) 
Node.js 기반의 Hexo (Repo star rank 3)

… Go 기반의 Hugo (Repo star rank 2)

Travis CI

Test and Deploy with Confidence 
Easily sync your GitHub projects with Travis CI and you’ll be testing your code in minutes! 
https://travis-ci.org

Github Repo와 연동하여 지속적 통합(continuous integration)을 자동화하는 서비스

.travis.yml

PHP

language: php
php:
- '5.4'
- '5.5'

Node.js

language: node_js
node_js:
- '6'

Do it!

Step 0

아래의 과정은 텍스트로 대체

  1. Github Services Travis CI 활성화 (Repo - Settings - Intergrations & services)
  2. Travis CI 가입 (Github 계정 연동)
  3. Travis CI 사용할 Github Repo 추가
  4. Github Repo에 프로젝트에 맞는 .travis.yml 파일 추가

Step 1

Travis CI 를 사용할 Repo만 선택한 상태. 
No bulids for this repository

Step 2

Github에 Push 요청이 오고 이를 감지한 Travis CI가 해당 프로젝트를 빌드한 상태

Step 3

Github Repo README.md 에 Travis CI에서 제공하는 build status 아이콘을 넣을 수 있다.

Conclusion

Git은 코드를 관리하기 위한 DVCS이다. Git을 이런 용도로만 제대로 사용해도 성공이지만, Git 과 함께 사용할 수 있는 서비스는 소개한 서비스 말고도 굉장히 많다. 
Git 보다는 Github과 함께 사용할 수 있는 서비스라고 명하는 것이 더 정확할 수 있으나, Github의 root는 Git이니 Git 생태계라 정했다. 
안 쓸 이유가 없는 서비스들이니 한 번쯤 사용해보는 것을 적극 추천한다.


Comments