오픈소스소프트웨어개발입문 (CP33992) 소스코드버전관리 부산대학교공과대학정보컴퓨터공학부
학습목표 소스코드에대한버전관리의개념과필요성을설명할수있다. git 을활용한버전관리방법을알수있다. 2
버전관리도구 버전관리도구 소프트웨어개발시팀단위로개발중인소스코드등디지털문서의관리에사용 파일의변화를시간에따라기록하여과거특정시점의버전을다시불러올수있는도구 특징및주요기능 소프트웨어개발시팀단위로개발중인소스코드등의디지털문서관리에사용 버전관리수행 배포기능을통해변경사항배포 3
버전관리도구 버전관리도구 CVS(Concurrent Versions System) SVN(Subversion) Git Linux 소스코드를관리할목적으로개발됨 왜 Git을사용하나? 소스코드가변경된이력을쉽게확인할수있음 특정시점에저장된버전과비교하거나특정시점으로되돌아갈수있음 내가올리려는파일이누군가편집한내용과충돌한다면, 서버에업로드할때경고메시지가발생함 실제내용일부문구가서로다르면다른파일로인식함 매번백업용파일복사본을만들필요가없으니까엄청편함 4
Git 을이용한실습 5
Git 의구조 분산버전관리시스템 Git Git 저장소란? ( 저장소 ) 파일이나폴더를저장해두는곳 + ( 이력관리 ) 파일이변경이력별로구분되어저장됨 여러저장소를갖고각각작업할수있는시스템 서버문제발생시클라이언트의복제된저장소를서버로업로드해복구가능 원격저장소와로컬저장소 원격저장소 (Remote Repository): 파일이원격저장소전용서버에서관리되며여러사람이함께공유하기위한저장소 로컬저장소 (Local Repository): 내 PC에파일이저장되는개인전용저장소 Push Local Repository Git client Remote Repository Git server 6 Pull
원격저장소에푸시 (Push) 하기 Git 저장소공유 Push (Upload): 내 PC의로컬저장소에서변경된이력을원격저장소에공유하기위해, 로컬저장소의변경이력을원격저장소에업로드하는것 원격저장소복제 (Clone) 하기 Clone (Download): 누군가의변경이력이적용된원격저장소가있으면, 그걸웹에서통째로복제해와내 PC에서직접작업할수있도록원격저장소를통째로다운로드하는것 원격저장소풀 (Pull) 해오기 Pull (Download): 다른사람이원격저장소에올려놓은 (Push) 변경내용을내로컬저장소에도적용 (Pull) 하기위해원격저장소에서최신변경이력을다운로드하여내로컬저장소에그내용을적용하는것 7
Git 파일의상태 Modified: 수정한파일을아직로컬 DB에커밋하지않은것을의미 Staged: 현재수정한파일을곧커밋할것이라고표시한상태를의미 작업트리안에있는커밋이필요없는파일들을커밋에포함하지않을수있게함 Committed: 데이터가로컬 DB 에안전하게저장됐다는것을의미 파일및폴더의추가 / 변경사항을저장소에기록 Git 으로하는일 1. 워킹디렉토리에서파일을수정함 2. Staging Area(index) 에파일을 Stage 해서커밋할스냅샷을만듦 3. Staging Area 에있는파일들을커밋해서 Git 디렉토리에영구적인스냅샷으로저장함 8
주요명령어 git init: 깃저장소를초기화한다. git config: configure 의준말, 처음에깃을설정할때가장유용 git help: 21개의가장많이사용하는깃명령어들이나타남 git status: 저장소상태를체크 git add: 깃의저장소 스냅샷 에추가된파일을저장 git commit: 깃의가장중요한명령어. 보통 git commit -m Message hear. 형식으로사용함. -m 은명령어의그다음부분을메시지로읽어야한다는것을말함 git branch: 새로운 branch를만들고, 자신만의변경사항과파일추가등의커밋타임라인을만듦. 9
주요명령어 git checkout: 글자그대로, 현재위치하고있지않은저장소 (branch) 를 체크아웃 할수있음. git merge: branch에서작업을끝내고, 모든협업자가볼수있는 master branch로병합 git push: 로컬컴퓨터에서작업하고이명령어로깃허브에변경사항을 push 함 git pull: 로컬컴퓨터에서작업할때깃허브로부터변경사항을다운로드함 ( pull ) 10
1. Git 서버계정관리 1) Git 서버접속 (http://164.125.37.75/open/) 학번 학번 11
1.2 계정정보변경 1. Git 서버계정관리 12
2.1 Git client 설치 2. Git client 설치및설정 1) Search 아이콘클릭 2) terminal 입력후 terminal 아이콘선택 3) sudo apt-get install git 입력 13
2. Git client 설치및설정 2.2 계정설정 계정이름설정 : git config --global user.name 사용자이름 계정이메일설정 : git config --global user.email 이메일 user.name과 user.email 설정값확인 : git config --global --list 14
2.3 Local 저장소생성 2. Git client 설치및설정 1. 디렉토리생성 : mkdir 학번 2. 생성디렉토리로이동 : cd 학번 3. Git 저장소생성 : git init 15
3. Git 실습 3.1 실습소스파일생성 $ vi hello.c #include <stdio.h> int main() { printf( hello, Open Source Programming\n ); return 0; } 16
3. Git 실습 3.2 Local 저장소에소스파일 Upload 및상태확인하기 1. git add hello.c and git status 2. git commit m First commit 3. git status 17
3. Git 실습 3.3 Git 서버에소스파일 upload 1. git remote add [ 단축이름 ] [url] git remote add origin http://164.125.37.75/open/ 학번.git 2. git push [ 리모트저장소단축이름 ] [branch 이름 ] git push origin master 18
3. Git 실습 3.4 Git 서버에업로드된소스파일확인 1. Git 서버접속 : http://164.125.37.75/open 2. 학번과비밀번호입력 3. 원격 (Server) 저장소에 hello.c 파일의업로드확인 학번 비밀번호 hello.c 19
3. Git 실습 3.5 Git 서버에서 hello.c 파일 download 1. git pull origin master 2. 학번과비밀번호입력 20
Branch Branch 란? 여러사람이동일한소스코드를기반으로서로다른작업을할때독립적으로어떤작업을진행하기위한개념 각자독립적인작업영역 ( 저장소 ) 안에서마음대로소스코드를변경함 예 ) 릴리스버전이력, 기능추가이력, 버그추가이력 다른 branch와병합 (Merge) 함으로써, 작업한내용을다시새로운하나의 branch로만듦 master branch? 저장소를처음만들때생성되는 branch 언제든지배포할수있는안정정인상태의버전을저장하기위한통합 branch(integration branch) 로사용됨 안정정인상태 란? 그어플리케이션의모든기능이정상적으로동작하는상태 Topic branch (Feature Branch) 기능추가나버그수정과같은단위작업을위한 branch 21
Branch 사용하기 'issue1' 이라는이름으로새로운 branch 를작성 1. branch 생성 : git branch <branchname> git branch issue1 2. 생성된 branch 확인 : git branch git branch issue1 * master 현재선택된 branch를지시함 3. branch 전환 : git checkout <branch> git checkout issue1 Switched to branch issue1 'issue1' branch를체크아웃한상태에서커밋을수행하면, 'issue1' branch에그이력이기록됨. 즉, git add myfile.txt git commit m branch 전환 22
Branch 사용하기 branch 병합 (faster-forward 병합 ) 'issue1' branch의변경사항을 'master' branch에병합 1. branch 전환 : git checkout <branch> git checkout master Switched to branch master checkout 명령어를이용하여현재사용중인 branch를 'master' 로전환 2. branch 병합 : git merge <branchname> git merge issue1 23
Branch 사용하기 branch 삭제 branch를삭제하려면 branch 명령에 -d 옵션을지정 1. branch 삭제 : git branch d <branchname> git branch d issue1 2. 생성된 branch 확인 : git branch * master 현재선택된 branch를지시함 24
Pull ( 가져와병합하기 ) pull, 원격저장소의데이터를로컬저장소에가져와병합하기 로컬저장소의모든변경사항이반영되어있는상태에서새로운변경사항이있는원격저장소의커밋 Y 를로컬로가져오는경우 fast-forward 병합 ' 이이루어짐 로컬저장소의 'master' branch 에서도변경사항이생긴경우, 양쪽의변경을 통합할필요가있음 충돌부분을수동으로해결한다음직접 commit 함 25
실습 다음의코드를작성하여자신의 Git Repository 에업로드 #include <stdio.h> int main() { printf( STUDENT ID CARD\n ); printf( major: computer science engineering\n ); printf( name: 이름 \n ); printf( student ID: 학번 \n ); return 0; } 26
과제물 프로그램코딩실습 0~19사이의정수를출력하되 2의배수나 3의배수인정수를출력에서제외하는코드작성 multiplemain.c: main() 함수포함 multiplesub.c: 2의배수나 3의배수인정수를제외하고출력하는프로그램 multiple.h: 함수원형 makefile 작성 Git 서버에작성한코드를업로드 27