2018 년 10 월 최영락 (E-mail: ianyrchoi@gmail.com)
목차 볼만한자료들 Git는무엇일까? GitHub는무엇일까? Git와 GitHub, 그리고오픈소스 2
볼만한자료들 (1) 사실, git 와관련된좋은책도많고, 인터넷에좋은자료들도많습니다. 몇가지책 ( 검색 / 간단히만살펴본것입니다 ) 이미지출처 : yes24.com, 한빛미디어 ( 리얼타임 ) 3
볼만한자료들 (2) 튜토리얼 Git 을시작하기위한간편안내서, 어렵지않아요! http://rogerdudler.github.io/git-guide/index.ko.html Git-scm: http://git-scm.com/book/ko/v1 Atlassian git tutorial ( 영문 ): https://www.atlassian.com/git/ 그림과함께배워보는튜토리얼 : https://learngitbranching.js.org/?locale=ko 한글슬라이드 버전관리를들어본적없는사람들을위한 DVCS Git http://www.slideshare.net/ibare/dvcs-git Svn 능력자를위한 git 개념가이드 http://www.slideshare.net/einsub/svn-git-17386752 Subversion vs. Git: 엄청난간략비교 http://www.slideshare.net/ienvyou/subversion-vs-git-42605130 4
그럼, 이발표의목적은? 오픈소스에서왜 Git 을많이사용할까? GitHub 도있던데, Git 하고같은걸까? 자료읽다보니명령어들이많은데.. Git 을알려면이명령어들을꼭다알아야할까? Branch, Tag 이런것들은무엇일까? Merge 와 Rebase 도있던데.. Pull, Push, Pull Request? + 오픈소스와함께 Git & GitHub 를이야기해보고싶었습니다. 5
( 시작하기전, 한가지참고!) 일부설명들은편의를위해정확한내용을담고있지않을수도있습니다. 해당부분을보신분께서는, 또는덧붙이고싶은내용이있으신분께서는 ianyrchoi@gmail.com 으로알려주시면내용을수정 / 보완하고자합니다. 6
Git 는무엇일까? Git 버전관리를위한도구 리눅스커널의창시자, 리누스토발스께서직접만드심 BitKeeper 라는상용도구를무료사용하여버전관리를했었는데무료사용이제고되면서직접만들게되었다고함 이미지출처 : http://izquotes.com/quote/273567 7
질문 1: 버전관리란무엇인가요? 소스하나또는묶음을하나의버전으로간주하여관리합니다. 파일 / 폴더를추가 / 수정 / 삭제하여사람이직접묶음을버전으로관리하자고지정 원하는때예전버전내용전체를되돌려볼수있음 특히복잡한코드개발할때는이전버전과비교해보기가쉬워짐 ( 버전 1) ( 버전 2) 파일 1 개또는여러개수정 ( 버전 3) 파일 1 개또는여러개수정 8
질문 2. 버전관리를대체언제사용하나요? 1) 개발협업을위해사용합니다. 전체개발소스를공유하면서개발파트를나누어공유 같은모듈을개발하더라도소스를서로공유하면서개발 이때, 특정파일은변경하지못하도록 lock 을걸수도있습니다 ( 이걸로퇴근못하는직원분들도꽤 ) 개발자 A 모듈 A 개발자 B 모듈 B 권한설정을통해각개발자별로접근가능한소스목록도제어하기도합니다. 2) 개별적으로버전등이력을관리하기위해사용하는경우도있습니다. 3) 버전관리되는내역전체를오픈소스로공유하기도합니다. 개발프로젝트전체소스 개발자 C 모듈 A 11
질문 3. 다른버전관리도구들은? 오픈소스버전관리도구 CVS: 90년대말 2000년대쯤? 아는분들은사용한다고들었던버전관리도구 Subversion (SVN) 이대중화되면서쓰는사람들이많이줄었던것같음 Subversion (SVN): 여러파일업로드중실패시롤백 ( 원자성, atomicity), 이진파일지원, rename ( 파일이름변경도이력관리 ) 등 CVS를대체가능한많은기능이추가되어많은사용자들이 CVS에서전환된것으로알고있습니다. 오늘날과같이 Git이많이사용되기전가장보편화되었던버전관리도구 Mercurial: Git와비슷한류의분산버전관리도구라고합니다. 상용버전관리도구 제가써본건 Microsoft Visual SourceSafe 와 Team Foundation Server 밖에.. 12
질문 4. 분산 버전관리도구는머가다른가요? 이를설명하기위해보통 Subversion 과 Git 를많이비교합니다. Subversion 은버전관리를하려면반드시 Subversion 서버와통신하여버전을관리해야합니다. 반면, Git 는네트워크가되지않아도우선자신의컴퓨터에서버전관리를하고네트워크통신이될때서버와통신해도됩니다. 이런이야기도있었습니다. 미국의개발자들은인터넷이안되는휴양지에가서도 Git 를이용하면충분히개발할수있고, 나중에인터넷되는곳에가서서버와쭉통신하여업무를할수도있다고.. 반면한국은인터넷이아주잘되니 Git 가대중화되지않을수도있겠다고 그런데, 요즘은 Git 이많이사용되네요 13
질문 5. Git 명령어들을꼭익혀야하나요? 적어도초창기에는그랬습니다. 지금도 Git 를잘쓰려면명령어들을알면도움이많이됩니다. 요즘엔명령어들을몰라도 pull, push, commit 등의기본개념만알면쓸수있는좋은 GUI 들이많습니다. TortoiseGit, gitk, Sourcetree, GitHub Desktop, 그래픽화면으로나와명령어보단쓰기편합니다. 14
Git 기본용어 (1) Pull Git 저장소서버로부터내컴퓨터로컬로버전정보전체를가져온다. Commit 추가 / 수정 / 삭제된폴더 / 파일들을 1 개버전으로간주하여내컴퓨터로컬에버전정보를기록한다. Push 내컴퓨터로컬에저장되어있던버전정보를 Git 저장소서버로올린다. 15
Git 기본용어 (2) Branch 버전들을묶어서 Branch 라고합니다. 기본은 master 입니다. 내컴퓨터내에있는 Branch 는로컬 branch, 외부서버에있는 Branch 는리모트 branch 라고합니다. Tag Branch 는왔다갔다하면서각각에대해내용을변경하고버전관리까지가능합니다. 반면 Tag 는특정버전위치에대해나중에쉽게찾아갈수있도록이름을지정해놓은것뿐입니다. 16
Git 기본용어 (3) Branch 와 Tag 의사용예시 OpenStack neutron 소스 17
Git 기본용어 (4) Merge Git 로버전관리를하다보면 1) 여러개발자가각자개발한버전을합치는경우 2) 서로다른 Branch 를하나로합치는경우가생깁니다. 이런경우합치는과정을 Merge 라고합니다. 18
Git 기본용어 (5) Rebase Git 과거이력편집목적 따라서 Git 이력을이쁘게 정리도가능 openstack 소스 : commit 이력 ryu-book 소스 : commit 이력 19
GitHub 는? http://www.github.org Git 저장소를직접설치하지않고 GitHub 를통해사용가능합니다. 그런데 GitHub 는단순히 Git 소스저장소만을의미하지는않는다고생각합니다. 20
몇가지좋은 GitHub 의기능 좋은 Web UI 를제공합니다. gh-pages Branch 에파일을올리면 [ 계정명 ].github.io/[ 저장소명 ] 홈페이지가완성됩니다. 여러질문 & 답변, 이슈사항을기록하기위한 Issues 페이지제공 Wiki 제공 월정액으로돈을내면공개되지않은사설저장소제공 돈을더내면권한관리가가능한 organization 저장소제공 ( 무료도가능 ) ( 너무많아서 ) 21
GitHub - fork 다른사람저장소를가져와제저장소로만들어놓는기능입니다. fork 22
GitHub - fork 한다음에는? Pull : 업데이트 Push : 업로드 Pull : 업데이트 Push : 업로드 [ 내컴퓨터 ] ( 커밋도하고..) Fork 는누구나가능합니다. 그러나누구나이저장소를바꾸게되면이상하겠죠? 23
GitHub pull request Pull : 업데이트 Pull request : 검토부탁합니다 Pull : 업데이트 Push : 업로드 [ 내컴퓨터 ] ( 커밋도하고..) 원저장소소유자또는권한이있는자가검토하여맘에들면가져와서업데이트하고, 토론 / 반려등이가능합니다. 24
Git, GitHub 와오픈소스 Git 은분산버전관리를위한도구 오픈소스가아니어도많이사용합니다 협업이필요한어디든지! GitHub 는오픈소스를사랑합니다 공개 된저장소는무료로맘껏사용가능 토론및커뮤니케이션을하는장소또한제공합니다 Pull request Issues 25
GitHub 에서오픈소스를찾는법 글로벌탐색전 : https://github.com/explore 정말이렇게찾는게답일까요? 26
GitHub 에서오픈소스를찾는법 그전에 어떤분야 에대한오픈소스를찾을것인지키워드파악하기 JavaScript, Python, Front-end, Machine Learning, Deep Learning, Cloud, Dotnet, PHP, Assignment, 키워드 검색법 직접들어가보고판단을해야함 : 수치와함께 인터렉션 을보자! 28
다양한오픈소스세상을이해하기 Foundation ( 재단 ) 주도하에발전하는오픈소스 29
다양한오픈소스세상을이해하기 Company-driven 오픈소스 ( 매우많음 ) 30
어필이이루어지는오픈소스가매력적이겠죠? 빠른생산성 누구나다운로드하여실행가능한오픈소스 어떤철학및고민이반영되었는가? 문서화 설명 이모든것은 상호존중 과 배려 에서기반해야함 31
Finished!
참고 : README 파일이란? README.md 또는 README.rst 파일을저장소기본폴더에위치 확장자 md: 마크다운문법 확장자 rst: Restructured Text 문법 (Python 프로젝트에서주로사용 ) README 가없는게이상한프로젝트 문법에익숙하지않은경우샘플코드를참고하여 README 파일제작을권장 34
참고 : LICENSE 파일 오픈소스에서는라이선스명시가중요함 35
참고 :.gitignore 파일 해당파일들은 Git 를통해관리가안됨 ( 예 : ios & Android) 36