GNU/Linux 버전관리시스템 (Version Control Systems) Seo, Doo-Ok Clickseo.com clickseo@gmail.com
목 차 버전관리시스템 Git 원격저장소 2
버전관리시스템 버전관리시스템 로컬버전관리시스템 중앙집중식버전관리시스템 분산버전관리시스템 Git 원격저장소 3
버전관리시스템 (1/4) 버전관리 (version control, revision control) 공학과소프트웨어개발에서팀단위로개발중인소스코드나청사진같은설계도등의디지털문서를관리하는데사용 소스관리 (source control) 소스코드관리 (SCM, source code management) 버전 (Version) #include <stdio.h> int main(void) { printf( Hello ); printf( World!!! n ); #include <stdio.h> int main(void) { printf( World!!! n ); printf( Version n ); } return 0; main-0.0.1 } return 0; main-0.0.2 4
버전관리시스템 (2/4) 버전관리시스템 (VCS, Version Control System) 동일한정보에대한여러버전을관리 공동프로젝트관리, 프로젝트백업, 데이터동기화 파일변화를시간에따라기록하여, 나중에특정시점의버전을다시꺼내올수있는시스템각파일을이전상태로되돌릴수있고, 프로젝트를통째로이전상태로되돌릴수있고, 시간에따라수정내용을비교해볼수있고, 누가문제를일으켰는지도추적할수있고, 누가언제만들어낸이슈인지도알수있다. 버전관리시스템 (VCS) 을사용하면파일을잃어버리거나잘못고쳤을때도쉽게복구가능 5
버전관리시스템 (3/4) 버전관리시스템 : 용어 Repository ( 저장소 ) 모든프로젝트의프로그램소스들을저장하고있다. 소스뿐만아니라, 파일의현재버전과변경이력정보도모두저장 Check-Out 저장소에서파일을가져온다. Check-Out을한소스를보면프로그램소스가아닌다른디렉터리와파일들이섞여있다. 이디렉터리와파일들은버전관리를위한파일들이다. Check-In(Commit) Check-Out 한파일의수정이끝난경우, 저장소에새로운버전으로갱신 이때이전에갱신된것이있는경우충돌 (Conflict) 을알려주며, diff 도구를이용해수정하고 Commit 하는과정을거치게된다. 6
버전관리시스템 (4/4) 버전관리시스템 : 용어 Import ( 불러오기 ) 아무것도들어있지않은저장소에맨처음소스를넣는작업이다. Export ( 내보내기 ) Check-Out과는달리버전관리파일들을제외한순수한프로그램소스파일만을받아온다. 오픈소스프로젝트의경우소스를압축하여릴리즈할때사용한다. Update ( 갱신 ) 저장소에있는최신버전의소스를가져온다 ( 물론바뀐부분만가져온다 ). Check-Out을해서소스를가져왔더라도, 다른사람이 Commit 을하였다면소스가달라졌을것이다. Revision ( 변경 ) 소스파일등을수정하여 Commit 하게되면, 일정한규칙에의해숫자가증가한다 ( 저장소에저장된각각의파일버전 ). Revision 을보고프로젝트진행상황을알수있다. 7
버전관리시스템 로컬버전관리시스템 8
로컬버전관리시스템 로컬버전관리시스템 LVCS(Local Version Control System) RCS(Revision Control System) SCCS(Source Code Control System) [ 출처 : Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. ] 9
버전관리시스템 중앙집중식버전관리시스템 10
중앙집중버전관리시스템 (1/10) 중앙집중버전관리시스템 CVCS(Centralized Version Control System) 클라이언트-서버 (Client-Server) 모델 파일을관리하는서버가별도로존재하고, 클라이언트가중앙서버에서파일을받아서사용 (Checkout) 한다. 중앙저장소에서프로젝트관리의모든것을처리한다. 대표적인 CVCS CVS(Concurrent Verions System) SVN(Subversion) [ 출처 : Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. ] 11
중앙집중버전관리시스템 (2/10) 동시버전시스템 : 델타 각파일에대한변화를저장하는시스템 Version 5 를내려받을때, 모든변경내역을내려받는다. [ 출처 : Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. ] 12
중앙집중버전관리시스템 (3/10) CVS : cvs.nongnu.org 동시버전관리시스템 (Concurrent Versioning System) 1990년 11월, 클라이언트-서버방식의버전관리시스템 서버는프로젝트의현재버전과변화를저장하고, 클라이언트는서버에접속하여프로젝트의완전한복사본을얻을수있다. 프로젝트의완전한버전은오직서버에만존재한다.» 서버에사고가생긴다면프로젝트를복구하는방법이매우제한적이다. 같은파일의다른버전을효율적으로저장하기위해델타압축을사용한다. 이방법은많은줄을가진파일 ( 텍스트파일같은 ) 에적합하다. 라이선스 : GNU GPL 2.0 프로그래밍언어 : C CVS GNU Savannah : savannah.gnu.org https://savannah.nongnu.org/projects/cvs 13
중앙집중버전관리시스템 (4/10) SVN(Subversion) : subversion.apache.org 2000년 10월, 콜렙넷개발 : http://www.collab.net 클라이언트-서버모델의자유소프트웨어버전관리시스템 CVS 의여러단점 ( 한계 ) 을개선하고대체하기위해일부수정한것 목표 : CVS 와완전하게호환되는동시에더나은기능을제공하는것 현재, 아파치 (Apache) 최상위프로젝트로서전세계개발자커뮤니티가공동개발, 관리 버전관리시스템마다각각의저장소포맷을가지고있으며, Subversion 은 Berkeley DB 를사용한다. 라이선스 : Apache 2.0 License 프로그래밍언어 : C SVN ViewVC : svn.apache.org/viewvc/ http://svn.apache.org/viewvc/subversion/ 14
중앙집중버전관리시스템 (5/10) SVN : 프로젝트과정시각화 Branch 와 Tag Branch : 프로젝트중작은분류로나누어개발하거나, 소스를따로분리하여실험적인코드를작성할경우등에사용한다. Tag : 만든프로그램을웹사이트등에공개할때사용 tags 디렉터리안에는일반적으로릴리즈하는버전별디렉터리를만들어사용한다.» 0.1 버전을발표할때 0.1 버전의순간을 tags 디렉터리에복사한다.» 0.2가되었을때 tags 아래 0.2 디렉터리로복사한다. [ 출처 : "Apache Subversion", WIKIPEDIA. ] 15
중앙집중버전관리시스템 (6/10) Apache-SVN : svn.apache.org ViewVC : svn.apache.org/viewvc/ 16
중앙집중버전관리시스템 (7/10) ViewVC : viewvc.org 2001 년, 12 월 CVS 및 SVN 저장소에대한웹브라우저인터페이스 라이선스 : BSD License 프로그래밍언어 : Python viewvc Git : github.com https://github.com/viewvc/viewvc/ 17
중앙집중버전관리시스템 (8/10) ViewVC : View Directory Directory view [ 출처 : What is ViewVC?", viewvc, www.viewvc.org. ] 18
중앙집중버전관리시스템 (9/10) SourceForge : sourceforge.net 1999 년 11 월, VA 소프트웨어에서설립 - 지크넷 (Geeknet) 지난수년에걸쳐자유-오픈소스소프트웨어개발자들에게호스팅서비스와개발툴을무료로지원해주고있다. 위키 (wiki), MySQL DBMS, CVS 또는 SVN 등으로관리되는소스코드버전등의콘텐츠를저장할수있게해주는저장공간제공 프로젝트웹사이트페이지의서브도메인제공 http://projectname.sourceforge.net http://projectname.sf.net 19
중앙집중버전관리시스템 (10/10) GNU Savannah : savannah.gnu.org 자유소프트웨어재단프로젝트 자유소프트웨어프로젝트를위한소프트웨어개발협력관리 사바나 (Savane) 소프트웨어기반으로제작 SourceForge 기반과동일한소프트웨어를기반으로만들어졌다. 사바나 (Savane) : savannah.nongnu.org/p/savane» 2006년 12월, 무료웹기반소프트웨어호스팅시스템» 라이선스 : GNU GPL» 프로그래밍언어 : PHP, Perl GNU 프로젝트소프트웨어 : savannah.gnu.org 비 -GNU 프로젝트소프트웨어 : savannah.nongnu.org CERN Savannah : 유럽입자물리연구소 20
버전관리시스템 분산버전관리시스템 : git 21
분산버전관리시스템 분산버전관리시스템 DVCS(Distributed Version Control System) 단순히파일의마지막스냅샷을 Check-Out 하지않는다 ( 저장소를전부복제 ). [ 출처 : Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. ] 22
Git : git-scm.com Git (1/3) 소스코드관리를위한분산버전관리시스템 2005 년, 리눅스토발즈 (Linux Torvalds) 가오픈소스리눅스커널개발의효율성을높이기위해서개발 Git 릴리즈 2005년 07월, Git 0.99 2005년 12월, Git 1.0 2018년 09월, Git 2.19 라이선스 : GNU GPL 2.0, LGPL 2.1 프로그래밍언어 : C, Shell, Perl, Tcl, Python Git Git : kernel.org Git GitHub : github.com https://git.kernel.org/pub/scm/git/git.git/ https://github.com/git/git 23
Git : 스냅샷 (snapshot) Git (2/3) 시간순으로프로젝트의스냅샷을저장한다. Version 5 를내려받을때, A2-B2-C3 를내려받는다 [ 출처 : Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. ] 24
Git (3/3) Git : 파일과프로젝트 Git 은세가지상태로파일관리 Committed : 데이터가로컬데이터베이스에안전하게저장됐다는것을의미 Staged : 현재수정파일을곧 Commit 할것이라고표시한상태 Modified : 수정한파일을아직로컬데이터베이스에 Commit 하지않은것을의미 Git 프로젝트의세가지단계 [ 출처 : Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. ] 25
Git : GUI 클라이언트 (1/2) SourceTree : sourcetreeapp.com Windows 또는 macos 개발자용 Git 데스크톱클라이언트 Bitbucket 제작사인아틀라시안 (Atlassian) 에서개발 [ 출처 : Git GUI", Sourcetree, www.sourcetreeapp.com. ] 26
Git : GUI 클라이언트 (2/2) GitHub Desktop : desktop.github.com Windows 또는 macos 개발자용 Git 데스크톱클라이언트 라이선스 : MIT License [ 출처 : GitHub Desktop", GitHub, desktop.github.com. ] 27
GitHub : github.com Git : 호스팅서비스 (1/5) 2008 년, Git 을사용하는프로젝트를지원하는웹호스팅서비스 Git 의기본기능과버그추적 (bug tracking), 기능요청 (feature requests), 작업관리 (task management), 위키 (wiki) 기능등을추가적으로제공한다. 영리적인서비스와오픈소스를위한무상서비스를모두제공 사용자 2,800만명과 8,500만개의저장소 전문개발자에게비공개프로젝트를호스팅하는대가로비용청구 : 월7달러 무료저장소 : 학생이거나프로젝트를무조건공개로전환 2018 년 6 월, MS 에서 GitHub 를 75 억달러 (8 조원 ) 에인수발표 프로그래밍언어 : Ruby 루비온레일즈 (Ruby on Rails) 로작성 루비온레일즈 (Ruby on Rails) : rubyonrails.org Ruby로작성된 MVC 패턴을이용하는오픈소스웹프레임워크 라이선스 : MIT License 저장소 : https://github.com/rails/rails 28
Git : 호스팅서비스 (2/5) GitHub : Pages, Desktop GitHub Pages : pages.github.com username.github.io GitHub Desktop : desktop.github.com Git GUI 클라이언트 터미널을벗어나시각적으로 Git 을사용할수있는 GUI 툴 29
GitLab : gitlab.com Git : 호스팅서비스 (3/5) 2011 년설립, 웹기반의 Git 저장소관리서비스 위키와이슈추적기능을갖춘웹기반의 Git 저장소관리자 영리적인유료서비스와오픈소스를위한무료서비스모두제공 설치형 ( 무료 ) 과호스팅용서비스제공 전문개발자에게비공개프로젝트를호스팅하는대가로비용청구 : 월2달러 협업자수에제한없이비공개무료저장소제공 2018 년, Apple 은자사개발툴인 Xcode 10 부터 GitLab 지원한다고발표 라이선스 : 이중라이선스 Community Edition : MIT License Enterprise Edition : GitLab EE(Enterprise Edition) License 프로그래밍언어 : Ruby, Go, Vue.js 30
Git : 호스팅서비스 (4/5) GitLab : GNOME -- gitlab.gnome.org 이전 URL : git.gnome.org 31
Git : 호스팅서비스 (5/5) Bitbucket : bitbucket.org 2010 년 9 월, 아틀라시안 (Atlassian) 에서매입 영리적인유료서비스와오픈소스를위한무료서비스모두제공 사용자 600만명 전문개발자에게비공개프로젝트를호스팅하는대가로비용청구 : 월 2달러 ( 또는 5달러 ) 최대 5명의협업자로구성된소규모팀에게비공개무료저장소허용 https://www.atlassian.com/software/bitbucket 프로그래밍언어 : Python Bitbucket Server https://www.atlassian.com/software/bitbucket/enterprise/data-center 라이선스 : 사유소프트웨어 프로그래밍언어 : Java 32
버전관리시스템 분산버전관리시스템 : Mercurial 33
Mercurial Mercurial : mercurial-scm.org 소스코드관리를위한분산버전관리시스템 2005년 04월, 맷맥콜 (Matt Mackall) 개발 명령행기반기반프로그램 주요설계목표 고성능및확장성, 분산화, 완전분산협업개발 일반텍스트및이진파일의강력한처리, 고급분기및병합기능 통합웹인터페이스 : 효율성을높인 HTTP 기반의네트워킹프로토콜 2003년, Facebook 에서 Mercurial 을채택하고, 대규모통합코드저장소를처리하기위해확장작업을시작하였다. W3C 및 Mozilla 를비롯한여러조직에서채택 Mercurial 릴리즈 2019 년 03 월, Mercurial 4.9.1 라이선스 : GNU GPL 2.0 프로그래밍언어 : C, Python Mercurial Mercurial : mercurial-scm.org https://www.mercurial-scm.org/repo/hg-stable/ 34
Git 버전관리시스템 Git Git 설치와설정 로컬저장소와 Git 원격저장소 35
Downloads : Git Git 설치와설정 (1/2) https://git-scm.com/downloads Windows Linux/Unix Mac OS X 36
Git 설치와설정 (2/2) Git for Linux/Unix : 설치및설정 Debian / Ubuntu $ sudo apt-get install git $ git config --global user.name Clickseo $ git config --global user.email clickseo@gmail.com Fedora $ dnf install git $ yum install git 37
Git 로컬저장소와 Git 38
Git 기본명령어 로컬저장소와 Git (1/5) 저장소사용에필요한 Git 기본명령어 명령어작업설명 git init 저장소생성실행한위치를 Git 저장소로초기화한다. git add filename 저장소에파일추가 해당파일을... Git 이추적할수있게저장소에추가한다. git commit 저장소에수정내역제출변경된파일을저장소에제출한다. git status 저장소상태확인현재저장소의상태를출력한다. 파일생성 또는추가 수정내역을 저장소에제출 파일수정 기본작업흐름 39
로컬저장소와 Git (2/5) Git 기본작업과정 : 저장소생성 git init : 저장소생성 $ mkdir gittutorial // Git 저장소로사용할디렉터리생성 $ cd gittutorial $ git init // Git 저장소초기화 저장소생성 40
로컬저장소와 Git (3/5) Git 기본작업과정 : 저장소상태확인 git status : 저장소의상태확인 $ git status Git 에서추적하지않는 hello.c 파일이저장소에존재 41
로컬저장소와 Git (4/5) Git 기본작업과정 : 저장소에파일추가 git add : Git 저장소에서특정파일을추적할수있도록저장소에파일추가 $ git add filename 파일도추가를완료하였고, Git 저장소의상태도확인하였다. 첫번째 commit 을위한준비완료!!! 42
로컬저장소와 Git (5/5) Git 기본작업과정 : 저장소에파일제출 git commit : 변경된파일을 Git 저장소에제출 $ git commit commit 메시지작성화면 Git 에서 commit 할때는... 꼭 commit 메시지를남겨야한다. 그렇지않으면 commit 을할수없다!!! $ git commit m commit 메시지 // 인라인방식 43
로컬저장소와 Git : 브랜치와병합 (1/9) 브랜치 (Branch) 저장소사용을위한 branch 명령어 명령어 작업 설명 git branch name 저장소에브랜치추가 name 의브랜치를만든다 ( 생성 ). git checkout branchname 작업중인브랜치변경 현재작업중인 branchname 을변경한다. git merge branchname 브랜치병합 현재작업중인브랜치에 branchname 의브랜치를끌어와병합한다. 안정화된프로젝트에실험적으로기능을추가하거나기능을수정해야할때가있다. 그때사용하는것이 branch 명령어이다. 원래브랜치의파일이나작업흐름에전혀영향을주지않으면서새로운작업흐름을만들수있다. 44
로컬저장소와 Git : 브랜치와병합 (2/9) 브랜치 (Branch) : 작업흐름 브랜치이동을통한 ( 변경된 ) 작업흐름 브랜치생성 master 브랜치에 임시브랜치를합침 임시브랜치로 체크아웃 원래의 master 브랜치로체크아웃 파일생성 또는추가 수정내역을 저장소에제출 파일수정 45
로컬저장소와 Git : 브랜치와병합 (3/9) 브랜치 (Branch) : 작업흐름 GitHub Network graph 46
로컬저장소와 Git : 브랜치와병합 (4/9) 브랜치작업과정 : 새로운브랜치생성 git branch : 새로운브랜치생성 $ git branch // 현재어떤브랜치가존재하는지확인 $ git branch name // name 의새로운브랜치생성 hotfix 브랜치생성!!! 47
로컬저장소와 Git : 브랜치와병합 (5/9) 브랜치작업과정 : 브랜치이동 git checkout : 현재작업중인브랜치를변경 ( 이동 ) $ git checkout branchname // 현재작업중인브랜치를 branchname 을변경 $ git checkout b branchname // branchname 을만들면서바로 checkout 한다. 현재작업중인브랜치를 hotfix 브랜치로변경!!! *hotfix 48
로컬저장소와 Git : 브랜치와병합 (6/9) 브랜치작업과정 : 특정브랜치에서 commit git commit a : 변경된저장소파일모두를 commit 한다. $ git add filename $ git commit $ git commit -a 49
로컬저장소와 Git : 브랜치와병합 (7/9) 브랜치작업과정 : 특정브랜치에서 commit 1. 파일수정과특정브랜치확인 hello.c 소스파일수정 50
로컬저장소와 Git : 브랜치와병합 (8/9) 브랜치작업과정 : 특정브랜치에서 commit 2. 특정브랜치에서변경된파일 commit git commit -a $ git add filename $ git commit $ git commit -a 51
로컬저장소와 Git : 브랜치와병합 (9/9) 병합작업과정 : master 브랜치와병합 git merge $ git merge branchname 현재작업중인브랜치에서 branchname 의브랜치를끌어와병합한다. 현재작업중인 master 브랜치에 hotfix 브랜치를가져와서병합!!! master 와 hotfix 브랜치는서로독립적이다. 즉, 각브랜치의파일을독립적으로변경작업할수있다. 52
로컬저장소와 Git :.gitignore (1/2) 불필요한파일및폴더무시 :.gitignore.gitignore 일련의파일목록과파일을구분할수있는패턴의모음으로라인하나가패턴하나를가리킨다. 커맨드라인에서작업시불필요한파일이 Git 저장소에추가되는것을방지한다. http://www.gitignore.io 53
로컬저장소와 Git :.gitignore (2/2) 불필요한파일및폴더무시 :.gitignore.gitignore 파일을저장소에 commit $ touch.gitignore $ ls la $ git add.gitignore $ git commit m added.gitignore file.gitignore 파일을저장소에 commit 54
로컬저장소와 Git : 기록 (1/3) 작업내용에관한기록 : git log git log 명령옵션 옵션 설명 git log --p 각 commit 에적용된실제변경내용을보여준다. git log --word-diff diff 명령의실행결과를단어단위로보여준다. git log --stat 각 commit 에서수정된파일의통계정보를보여준다. git log --name-only commit 정보중에서수정된파일의목록만보여준다. git log --relative-date 정확한시간을보여주는것이아니라 1 일전, 1 주전처럼상대적인시간을비교하는형식으로보여준다. git log --graph 브랜치 (branch) 분기와병합 (merge) 내역을아스키그래프로보여준다. 55
로컬저장소와 Git : 기록 (2/3) 작업내용에관한기록 : git log git log --graph 브랜치 (branch) 분기와병합 (merge) 내역을아스키그래프로보여준다 56
로컬저장소와 Git : 기록 (3/3) 작업내용에관한기록 : git log git log --stat 각 commit 에서수정된파일의통계정보를보여준다. 57
원격저장소 버전관리시스템 Git 원격저장소 GitHub GitHub Git 58
원격저장소 : GitHub (1/11) GitHub : github.com 2008 년, Git 을사용하는프로젝트를지원하는웹호스팅서비스 Git 의기본기능과버그추적 (bug tracking), 기능요청 (feature requests), 작업관리 (task management), 위키 (wiki) 기능등을추가적으로제공한다. 영리적인서비스와오픈소스를위한무상서비스를모두제공 사용자 2,800만명과 8,500만개의저장소 전문개발자에게비공개프로젝트를호스팅하는대가로비용청구 : 월7달러 무료저장소 : 학생이거나프로젝트를무조건공개로전환 2018 년 6 월, MS 가 GitHub 75 억달러 (8 조원 ) 에인수발표 프로그래밍언어 : Ruby 루비온레일즈 (Ruby on Rails) 로작성 루비온레일즈 (Ruby on Rails) : rubyonrails.org Ruby로작성된 MVC 패턴을이용하는오픈소스웹프레임워크 라이선스 : MIT License 저장소 : https://github.com/rails/rails 59
원격저장소 : GitHub (2/11) GitHub : 새로운저장소생성 Create a new repository : Repositories >> New 60
원격저장소 : GitHub (3/11) GitHub : 새로운저장소생성 Owner : 사용자아이디가표시된다. 협업환경에서는다른사용자의아이디를지정할수도있다. Repository name : 새롭게생성할원격저장소의이름지정 가능하면로컬환경에서작업할 Git 프로젝트디렉터리이름과같게하는게좋다. Description : ( 선택 ) 생성한원격저장소가어떤역할을하는지작성 Public/Private : 원격저장소의공개여부를선택하는옵션 무료사용자는 Public 만선택할수있다. 61
원격저장소 : GitHub (4/11) GitHub : 새로운저장소생성 Initialize this repository with a README GitHub 에서생성한원격저장소를바로로컬저장소에복사해서가져올수있다. 또한, 지정한 Repository name 과 Description 항목의내용을담은 README.md 파일을생성한다. Add.gitignore 원격저장소에포함하지않을파일들의목록을만들때사용한다. Add a license 원격저장소에저장할프로젝트가어떤라이선스에속할지를선택한다. 62
원격저장소 : GitHub (5/11) GitHub : 새로운저장소생성 Quick Setup 63
원격저장소 : GitHub (6/11) GitHub : 원격저장소 (Remote repository) 외부에서접속해서사용하는저장소 로컬에서작업한 Git 프로젝트저장소가외부에있는것이다. Code : 원격저장소의루트디렉터리 Issues : 원격저장소의주요이슈사항을기재한후관리한다. Pull Request : 전체목록 Fork 한저장소를수정해다시원본저장소에병합해달라는요청을보내사용자사이의상호작용을일으키게하는기능 Projects Wiki : 공유할정보나개발문서, 참고자료등을작성 Insights, Settings 64
원격저장소 : GitHub (7/11) GitHub : 원격저장소 (Remote repository) Insights 65
원격저장소 : GitHub (8/11) GitHub : 원격저장소 (Remote repository) 원격저장소의구조 Watch : 원격저장소의활동내역 Not Watching : 댓글이나이슈등에서언급될때만알려준다. Watching : 모든활동내역을알려준다. Ignoring : 모든알림을무시한다. Star : 원격저장소에관심이있을때 Fork : 원격저장소를분기 66
원격저장소 : GitHub (9/11) GitHub : 원격저장소 (Remote repository) 원격저장소정보 Description : 원격저장소에대한설명 Commits : 원격저장소의총 commit 수 Branches : 원격저장소의총 branch 수 Releases : 원격저장소의 tag 수 주로특정버전에표식을주고싶을때사용한다. Contributors 원격저장소에 commit 혹은 pull request 가받아들여진사용자수 67
원격저장소 : GitHub (10/11) GitHub : Fork 다른사람의원격저장소를내계정으로복사 Fork 하지않은저장소 쓰기권한이없는원격저장소 ( 아무나사용할수없는원격저장소 ) 자유롭게파일을생성하거나수정하여원격저장소에반영하는게불가능 68
원격저장소 : GitHub (11/11) GitHub Desktop : 저장소 (Repository) 69
원격저장소 원격저장소와 Git 70
원격저장소와 Git : GitHub (1/7) Git 명령어 원격저장소와로컬저장소명령어 명령어 설명 git clone 원격저장소의모든내용을로컬저장소로복사한다. git remote 로컬저장소를특정원격저장소와연결한다. git push 로컬저장소의내용을보내거나로컬저장소의변경사항을원격저장소로보낸다. git fetch git pull 로컬저장소와원격저장소의변경사항이다를때이를비교대조하고, git merge 명령어와함께최신데이터를반영하거나충돌문제등을해결한다. git remote 명령을통해서로연결된원격저장소의최신내용을로컬저장소로가져오면서병합한다 (git push 와반대성격의명령어 ). 71
원격저장소와 Git : GitHub (2/7) 원격저장소데이터복사 : git clone Clone 원격저장소와내컴퓨터 ( 로컬저장소 ) 를연결해데이터를복사하는작업 내가생성한원격저장소를내컴퓨터와연결해서데이터를복사하는작업 Fork 한원격저장소를내컴퓨터와연결해서데이터를복사하는작업 네트워크프로토콜 Clone with HTTPS Clone with SSH Fork 원격저장소안에서원격저장소를복사하는작업 72
원격저장소와 Git : GitHub (3/7) 원격저장소데이터복사 : GitHub 원격저장소 : GitHub Clone or Download 1. 네트워크프로토콜 Clone with HTTPS Clone with SSH 2. Open in Desktop 3. Download ZIP 73
원격저장소와 Git : GitHub (4/7) 원격저장소데이터복사 : git clone git clone : 원격저장소의모든내용을로컬저장소로복사 $ git clone cloneurl 네트워크프로토콜 : Clone with HTTPS, Clone with SSH $ git clone https:// 74
원격저장소와 Git : GitHub (5/7) 원격저장소연결 : git remote git remote : 로컬저장소와원격저장소를연결 $ git remote add original cloneurl $ git remote -v original : 원격저장소별칭 cloneurl : 원격저장소 URL $ git remote add original https:// 75
원격저장소와 Git : GitHub (6/7) 원격저장소업로드 : git push git push : 로컬저장소의작업내용을원격저장소에업로드 $ git push original --all original : 원격저장소별칭 --all 옵션 original 원격저장소에로컬의모든브랜치를 push 한다. 76
원격저장소와 Git : GitHub (7/7) 원격저장소 commit 정보를로컬저장소로 : git fetch git fetch : 원격저장소의 commit 정보를로컬저장소로가져온다. $ git fetch 77
참고문헌 [1] 이종원, IT CookBook, 우분투리눅스 ( 개정판 ) : 시스템 & 네트워크, 한빛아카데미, 2018. [2] 백창우, 유닉스리눅스프로그래밍필수유틸리티, 한빛미디어. 2010. [3] 윤웅식, 만들면서배우는 Git + GitHub 입문, 한빛미디어, 2015. [4] Scott Chancon, Ben Straub, "Pro Git", Second Edition, Apress, 2014. [5] Git, 2018 of viewing the site, https://git-scm.com/. [6] GitHub, 2018 of viewing the site, https://github.com/. 이강의자료는저작권법에따라보호받는저작물이므로무단전제와무단복제를금지하며, 내용의전부또는일부를이용하려면반드시저작권자의서면동의를받아야합니다. Copyright Clickseo.com. All rights reserved. 78