<3836C8A35FB0F8C7D05FC6AEB7BBB5E55F F466C6F77B8A65FC8B0BFEBC7D15FC8BFB0FAC0FBC0CE5FBCD2BDBA5FC7FCBBF35FB0FCB8AE5F F332E687770>

Similar documents
Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

<3833C8A35FB0F8C7D05FC6AEB7BBB5E55F F466C6F77B8A65FC8B0BFEBC7D15FC8BFB0FAC0FBC0CE5FBCD2BDBA5FC7FCBBF35FB0FCB8AE5F F322E687770>

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

슬라이드 1

슬라이드 1

github_introduction.key

SourceTree 를이용한 Git 사용법 1

리눅스기초

슬라이드 1

JDK이클립스

SBR-100S User Manual

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

게임 기획서 표준양식 연구보고서

Install stm32cubemx and st-link utility

01장

PowerPoint 프레젠테이션

Windows 8에서 BioStar 1 설치하기

슬라이드 1

ISP and CodeVisionAVR C Compiler.hwp

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

슬라이드 1

Studuino소프트웨어 설치

슬라이드 1

메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2000) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2000 Exchange Server 2003 GFI MailEssentials 14 for

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

슬라이드 1

git CLI 로간단하게조작하기! by 윤선지

Chapter 1

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL: E-M

PowerPoint 프레젠테이션

Cubase AI installation guide

4S 1차년도 평가 발표자료

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

문서의 제목 나눔고딕B, 54pt

UI VoC Process 안

¿ÀǼҽº°¡À̵å1 -new

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

Office 365 사용자 가이드

Google SVN 계정만들기 Site : 1. 사이트접속후프로젝트호스팅선택 2. 오픈소스프로젝트검색선택

메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2003) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2003 Exchange Server 2003 GFI MailEssentials 2010 fo

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

슬라이드 1

C스토어 사용자 매뉴얼

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

PowerPoint 프레젠테이션

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

OnTuneV3_Manager_Install

Convenience Timetable Design

Admin Guide for dummy

1

PowerPoint 프레젠테이션

View Licenses and Services (customer)

System Recovery 사용자 매뉴얼

슬라이드 1

[Brochure] KOR_TunA

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위

gcloud storage 사용자가이드 1 / 17

server name>/arcgis/rest/services server name>/<web adaptor name>/rest/services ArcGIS 10.1 for Server System requirements - 지

MF5900 Series MF Driver Installation Guide

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

<4D F736F F D20BEC8C0FCC7D120B8DEC0CF20B9D720C6C4C0CF20C0FCBCDB2E646F6378>

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft Word - CAE 클러스터 환경 구축-ABAQUS.doc

Microsoft Word - CooCox

Microsoft Word - src.doc

PowerPoint 프레젠테이션

Assign an IP Address and Access the Video Stream - Installation Guide

행자부 G4C

슬라이드 1

OM2M 기반의 OHP-M2M 오픈소스설치가이드 2015 년 8 월 경북대학교통신프로토콜연구실 최예찬, 강형우 요약 사물인터넷 (Internet of Things: IoT) 이이슈가되면서다양한사

PowerPoint Template

MaxstAR SDK 2.0 for Unity3D Manual Ver

BEA_WebLogic.hwp

tiawPlot ac 사용방법

한국에너지기술연구원 통합정보시스템설치방법설명서 한국에너지기술연구원 지식정보실 - 1 -

슬라이드 1

Microsoft Outlook G Suite 가이드

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

EEAP - Proposal Template

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

ICAS CADWorx SPLM License 평가판설치가이드

슬라이드 1

신한은행 머니멘토 환경설정 매뉴얼

B2B 매뉴얼

Xcrypt 내장형 X211SCI 수신기 KBS World 채널 설정법

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

PowerPoint Template

Copyright 2012, Oracle and/or its affiliates. All rights reserved.,,,,,,,,,,,,,.,..., U.S. GOVERNMENT END USERS. Oracle programs, including any operat

vRealize Automation용 VMware Remote Console - VMware

<4F B8A620C0CCBFEBC7D120C8B8B7CE20C0DBBCBAC0C720B1E2C3CA2E687770>

MF3010 MF Driver Installation Guide

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

Transcription:

2014.3.00.[ 제 00 호 ] GIT Flow 를활용한효과적인소스형상관리 Part 3 : Source Tree 를이용한 GIT Flow 실습 소프트웨어공학센터경영지원 TF 팀 C o n t e n t s Ⅰ. 설치 Ⅱ. 예제를이용한 Source Tree / GIT Flow 적응 Ⅲ. 버전단위로보기

SW 동향분석 Webzine 그동안터미널 (Terminal) 에서 GIT Flow 를사용하는법을학습했다. GIT Branch 전략을매번터미널에서작업하기란쉽지않다. 그러나 UI 툴을이용한다면빠르게 GIT 명령어와 GIT Flow 명령어를통해능률을높일수있다. 이번원고에서는대표적인 GIT UI 툴인 Source Tree(http://www.sourcetreeapp.com) 를이용해서쉽게 GIT 명령어뿐아니라 GIT Branch 전략을사용해효율을높이도록실습하고자한다. 본고에서는소스간의충돌을최소화하여효율적인개발이가능해특히대규모인원의개발에서주로쓰이는 GIT Flow 를소개하고, 예제를통해실무활용방안을살펴보고자한다. Source Tree 는 < 그림 1> 과같이좌측화면에서 Branch, Tag 정보를가운데화면에서는히스토리 (History) 이력, 하단에서는무엇을수정했는지파일이력, 우측하단에서는파일 diff 이력을보며개발의편이성을높인툴이다. 자주쓰는 GIT 명령어는상단아이콘바 (Bar) 에위치하고있어서터미널없이도개발할수있는 UX 를제공하고있다. 그림 1_Source Tree UI 화면 Ⅰ. 설치 1. GIT Hub Project 생성 < 그림 2> 와같이 GIT Hub Project(http://github.com) 에접속하여 GIT Repository 를생성한다. 01 2014 March (No.86)

그림 2_GIT Hub Repository 생성 UI Repository 를생성하면 < 그림 3> 의화면과같이 GIT Repository 주소를알수있다. 나 중에 Source Tree 환경설정화면에서이주소를입력하여 Clone 시키면된다. 그림 3_GIT Hub Repository 생성완료 UI 다음은인증절차이다. GIT Hub 는 SSH 인증방식을사용하고있다. 처음 GIT Hub 사용자라면인증하는부분에서시간이소요된다. 인증절차를잘통과해야 GIT Repository 나 Source Tree 를문제없이쓸수있다. Local PC 에서 GIT Repository 접근을위해서는 SSH 인증방식을따라야한다. GIT Hub Repository 에인증 / 접속할수있는 SSH 키 (key) 발급은다음의 URL 을참조하여완료하도록한다. https://help.github.com/articles/generating-ssh-keys http://git-scm.com/book/en/git-on-the-server-generating-your-ssh-public-key 02

SW 동향분석 Webzine 터미널에서작업디렉토리를생성하고 GIT Repository 초기화를진행한다. $ cd /development/work/ $ mkdir /development/work/git-flow-example $ cd git-flow-example $ touch README.md $ git init $ git add README.md $ git commit -m "first commit" $ git remote add origin https://github.com/ksmark/git-flow-example.git $ git push -u origin master 2. Source Tree 설치 Source Tree 는개인이나기업이쉽게쓸수있는툴이다. 오픈소스라이센스는아니지만 EULA 동의하에무료로사용이가능하다.(https://answers.atlassian.com/questions/554 42/sourcetree-license) 이툴은 Window OS 와 MAC OS 에서사용가능한툴이며, Linux OS 는아직지원하지않고있다. Source Tree(http://www.sourcetreeapp.com) 웹사이트에접속해서 Source Tree 무료버전을다운로드한다. 참고로 MAC OS 사용자라면주의해야할사항이있다. < 그림 4> 와같이현재 Mac OS 의앱스토어 (App Store) 에있는 Source Tree 의버전은 1.5.6 이다. 그림 4_App Store 의 Source Tree 버전 그러나여러가지이슈 (http://blog.sourcetreeapp.com/2012/02/16/abandoning-the-mac-a pp-store/) 들로인해서 Source Tree 의최신버전은 Mac OS 의 App Store 에서다운로드할수없다. 다음 < 그림 5> 의 Source Tree(http://www.sourcetreeapp.com) 웹사이트에직접접속해서사용하면가능하다. 2014 년 2월현재 Source Tree 의최신버전은 1.8.1 이다. 03 2014 March (No.86)

그림 5_Source Tree 다운로드하는웹화면 3. Sourc Tree 환경설정 필자는 Mac OS 기반으로설명하고자한다. Source Tree 를실행하면 < 그림 6> 의 Bookmarks 화면을볼수있다. 아이콘바의폴더아이콘을선택하고폴더이름을본인의스타일에맞게저장한다. 그림 6_Bookmarks 화면 그리고두번째폴더아이콘 (Add Working Copy) 을선택하고 < 그림 7> 과같이 2.1 에서생성및 clone 했던 GIT Hub Repository 로부터 Clone 시켰던 Path 를입력한다. 이화면에서 GIT Repository 로부터 Clone 할수있고, GIT Repository 를생성할수있다. Local Path 를명확하게잘지정하면자동으로 This is a Git repository 라는문구를확인할수있다. 그림 7_Bookmark 의 Repository 생성화면 04

SW 동향분석 Webzine 정상적으로작동이되면, < 그림 8> 의화면을볼수있다. 그림 8_ 입력한 Bookmarks 화면 입력한 git-flow-example Bookmark 를 Open 하면 < 그림 9> 의 Source Tree 기본화면이 나온다. 그림 9_GIT Repository 첫화면 4. 초기화 그림 10_ 아이콘바에있는 GIT Flow 아이콘 GIT Flow 전략을사용하려면두가지가있다. 상단우측에있는 < 그림 10> 과같이 Git Flow 아이콘을클릭하거나, 메뉴의 Repository > Git Flow / Hg Flow > Initialise Repository 를선택한다. 05 2014 March (No.86)

그림 11_GIT Flow Repository 초기화화면 < 그림 11> 과같이 Production branch(master), Development branch(develop) 와 Branch Prefix 를수정할수있는팝업창이보이면, 확인하고 OK 버튼을누른다. Source Tree 는 GIT Flow 를쓸수있는 Repository 초기화를진행한다. 참고로대부분회사에서는기본디폴트를주로사용하고있으나, 특정회사에서는눈에잘보이기위해서 Branch Prefix 를 / ( 디렉토리 ) 대신 - 으로사용하고있다. ( 예. feature/ 대신 feature- ) 그림 12_GIT Flow 초기화화면의좌측 GIT Flow 로초기화되면, Develop Branch 가새로생성되고개발위치는 Develop Branch 로이동한다. < 그림 12> 와같이좌측화면처럼 BRANCHES 의 develop 로볼드체, 아이콘 마크가구별되어표현하고있다. 06

SW 동향분석 Webzine Ⅱ. 예제를이용한 Source Tree / GIT Flow 적응 1. Develop Branch 사소한작업은 Develop Branch에작업을진행하고 Add/Remove 아이콘을선택하고 Commit 아이콘을선택하여작업을진행한다. Graph 를보면하나의작업을진행하고있음을보여주고있다. 그림 13_Develop Branch 작업 2. Feature 생성 이제새로운 Feature 를생성한다. GIT Flow 아이콘을클릭하면다음의팝업을볼수있다. 새로운 Featue, Release, Hotfix 를시작할수있도록한다. Start a New Feature Action 을선택한다. 그림 14_GIT Flow 아이콘실행화면 Feature 이름을넣는팝업창하나가뜨면, 사용할 Feature 이름을쓴다. < 그림 15> 와 같이 feature/express_binding 이라는 Feature 를생성한다. 생성되는기준은 Develop 07 2014 March (No.86)

Branch 를바탕으로한다. 팝업의내용을보면 Develop Branch 의특정 Commit 버전을바 탕으로 Feature 생성이가능함을보여주고있다. 그림 15_Feature 생성화면 Feature 를생성하면 < 그림 16> 과같이 Feature 디렉토리와그밑에새로운 express_binding 이라는 Feature 가생성된것을볼수있다. 기준작업 Branch는 express_binding 이된다. 그림 16_Feature 생성후좌측화면 그림 17_Feature 종료화면 새로만들어진 feature 의여러번의 Commit 작업후 Develop Branch 에 Merge 을실시 08

SW 동향분석 Webzine 한다. GIT Flow 아이콘을선택하면 < 그림 17> 과같은화면이나온다. Finish Current 액션을선택한다. feature/express_binding Feature Branch 는 Develop Branch 에 Merge 된다. 이때, Source Tree 는 < 그림 18> 과같이다양한옵션을제공한다. GIT Merge 명령어대신 GIT Rebase 명령어로사용할수있고, Feature 를지우거나 ( 또는강제로지우거나 ) Feature Branch 를지우지않고계속유지시킬수있는옵션을제공한다. 사용하고있던 express_binding Feature Branch를삭제하는것으로가정하고진행한다. 그림 18_Feature Branch 종료화면 < 그림 19> 를보면, Feature Branch 는삭제되었고, GIT History 내역까지잘적용되었다. History 상 Feature Branch 에서작업했던내용이분홍색이고, 기존에작업했던 Develop Branch는파란색이다. Merge 되면서하나로묶여진것을확인할수있다. 그림 19_Merge 이후화면 09 2014 March (No.86)

3. Release Branch GIT Flow 아이콘을선택한후, Start New Release 를선택한다. < 그림 20> 과같이 release version 을입력한후 OK 버튼을눌러생성한다. Feature Branch 와마찬가지로 Develop Branch를기반으로작업할수있고, 마찬가지로 Develop Branch의특정 commit 버전을바탕으로 Release Branch를생성할수있다. 버전은 1.0.0 으로지정한다. 그림 20_Release Branch 생성화면 새로운 release/1.0.0 branch 가생겼다. 여러 commit 작업을완료한후, 지금까지의모든작업을 GIT Server 로 Push한다. Push 할때, 아이콘바에있는 push 아이콘을선택한다. < 그림 21> 과같은팝업창이뜨고어느 Local Branch를 Push 할것인지결정할수있다. push 버튼을눌러 push 하지않은 Develop, Master, release/1.0.0 Branch 를모두 push한다. 그림 21_Push 팝업화면 Push 를진행하면 < 그림 22> 와같이 origin/release/1.0.0, origin/develop, origin/master 와같이 3 개의 Remote Branch 가생겼고, Local Branch 도같이맞춰졌다. 10

SW 동향분석 Webzine 그림 22_Push 이후화면 이제 release 1.0.0 개발이다완료되었고, 개발을종료할예정이다. Git Flow 아이콘 버튼을누르면 < 그림 23> 과같이팝업창이뜬다. Finish Current 를선택한다. 그림 23_Release 종료화면 터미널에서는 Release 를종료할때 release/1.0.0 Branch는삭제되고 Master 와 Develop Branch에 Merge 가된다. 그러나 Source Tree 에서는좀더기능이있는형태를제공하고있는데, < 그림 24> 와같이 tag 에대한옵션과 Merge 이후 Release Branch를삭제할지, Remote 서버에 push 할지를결정할수있다. 그림 24_Release 종료후 tag, Merge 할여부를묻는화면 11 2014 March (No.86)

필자는 Release Branch를 Delete 하고변경내용을 Remote 서버에있는 release/1.0.0 에반영하도록한다. 이때 push changes to remote 를선택하여 Local 작업을모두서버에반영하도록한다. 즉, Push 까지모두포함한작업을포함하는작업을하도록한다. Release Branch를 Merge 하면 1.0.0 태그생겼고, Master 와 Develop 가모두 Merge 되고 Remote Server 에모두 push까지되었다. 참고로색상은큰의미는없다. 어떻게 Merge 되었고 commit 된버전과연관관계를알려주는보여주는 Graph 이다. 그림 25_release/1.0.0 Merge 이후화면 이제 Master 버전을가지고운영서버 (production) 에배포한다. 참고로 Develop Branch 나 Release Branch 는개발서버 (develop) 에배포하고테스트를진행한다. 3. Hotfix release/1.0.0 에버그가생겨서빠르게패치 (Patch) 해야할일이생겼다. GIT Flow 아이 콘버튼을선택하고 < 그림 26> 과같이 Hotfix 1.0.1 을만든다. 그림 26_Hotfix Branch 생성화면 12

SW 동향분석 Webzine 버그를패치할소스를수정후 commit 하고, Push 한다. Push 하고나면 < 그림 27> 처럼 Master 기반으로수정된버전임을확인할수있다. 또한 Develop Branch는 Hotfix 와연관관계가없는형태로되어있음을확인할수있다. 그림 27_Hotfix push 후화면 hotfix 1.0.1 을 Develop Branch 에 Merge 하기위해 GIT Flow 아이콘버튼을선택한다. < 그림 28> 과같이팝업이뜨면 Finish Current 를선택한다. 그림 28_Hotfix 종료화면 그림 29_Hotfix 종료화면 13 2014 March (No.86)

그다음화면으로 < 그림 29> 의 tag 와 Merge 이후 Hotfix Branch 를지울지, Remote 서버에소스 commit 할지에대한팝업이뜬다. 만약 push changes to remote 체크박스를체크하지않으면 Local 에서 Merge 하고 push 하지않는다. hotfix/1.0.1 을종료하면 Master 와 Develop Branch에 Merge 가되고, < 그림 30> 처럼 push 하지않은소스가 7개가있다고아이콘버튼상에서보여주고있다. 그림 30_Hotfix Merge 된화면 Merge 된 Develop 과 Master 를 push 한다. < 그림 31> 과같이소스가모두 GIT Server 와 동기화된화면을볼수있다. 그림 31_Remote 서버로 push 한화면 운영서버 (production) 에 Master Branch 를가지고배포를진행하면된다. 14

SW 동향분석 Webzine Ⅲ. 버전단위로보기 많 은개발자들이하나의프로젝트에서 Release, Hotfix, Feature, Develop, Master Branch가존재하면 Source Tree 상의 Graph 가복잡해보인다. 이럴때는 Commit Description 화면위에 < 그림 32> 와같은화면을이용하면된다. 그림 32_Branch 단위로 commit history 조정 만약 Current Branch 를선택하면선택한 Branch의가장최신버전에큰원이생기고, 그원을따라과거의 commit log history 상태를보여준다. < 그림 33> 은 Master 를선택했을때, Develop Branch 를선택했을때각각의 Branch 최종버전을 Graph 에서보여주는것을알린다. 그림 33_ Current Branch 를선택했을때보여주는 Graph 상황 Show Remote Branches 또는 Hide Remote Branches 는 Remote Branch 를 History 상에보여줄것인지의여부를결정한다. Date Order 와 Ancestor Order 는시간순서로보여줄지, 조상 (ancestor) 순서단위로보여줄지를결정한다. 각 Branch 에서일어나는 commit 시간이 Rebase, Merge 를통해보여주는 Graph 도좋지만, 때로는 branch 관점에본조상순서단위를보는것도편할수있다. 이런관점차이의뷰 (View) 를제공하고있다. < 그림 34> 와같이특정 Branch로이동할수있는수단을제공하는 Jump 를제공한다. Develop, master, origin/develop, origin/hotfix/1.0.1, 1.0.0 Tag, 1.0.1 Tag 에서가장마지막으로했던 commit history 를보여준다. 그림 34_Jump 15 2014 March (No.86)

Ⅳ. Source Tree 로부터얻을수있는장점 지 금까지세번의연재를통해 GIT Flow 를활용한효과적인소스형상관리에대해살펴보았다. 소스간의충돌을최소화해원활한소스관리를하고, SW 버전별유지보수가용이해효율적인개발을지원하기때문에 GIT Flow 를통해개발자들의효율적인업무향상을기대할수있을것이다. 일반적으로 GIT 를사용하려면터미널에서작업하거나언어별로나누어진개발 (IDE) 툴에의존적인플러그인 ( 이클립스의경우라면 EGit) 을써야한다. 그러나 Source Tree 를사용하면개발툴에독립적으로개발이가능하며, 가장쉬운 UI 접근성을제공하기때문에개발시간을줄일수있다. 또한여러명령어또는옵션을하나씩보면일일이접근하지않아도팝업창또는체크박스옵션을바탕으로그의미를유추할수있어사용이훨씬편리하다. Source Tree 는 GIT Flow 를최적화하여쓸수있는다양한기능을제공하고있고, GIT 프로젝트리스트를일목요연하게관리할수있다. 게다가무료 (Free) 로이용할수있으니적극적으로활용해보기바란다. 참고자료 1. http://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/ 2. http://www.sourcetreeapp.com 3. http://github.com 4. https://help.github.com/articles/generating-ssh-keys 5. http://git-scm.com/book/en/git-on-the-server-generating-your-ssh-public-key 6. https://answers.atlassian.com/questions/55442/sourcetree-license 7. http://blog.sourcetreeapp.com/2012/02/16/abandoning-the-mac-app-store/ 16