반응형
버전 관리가 필요한 이유
개발자 간의 협업을 위해 전체 개발 소스를 공유하면서 개발 파트를 나눌 수 있고
같은 모듈을 개발하더라도 소스를 공유하며 개발할 수 있기 때문이다.
공유 폴더 방식
- 버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식
- 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사함
- 담당자는 공유 폴더의 파일을 자기 PC로 복사해 컴파일 한 후 이상 유무 확인
- 파일의 변경 사항을 데이터베이스에 기록하며 관리
클라이언트/서버 방식
- 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식
ex) CVS (Concurrent Versions System, 동시 버전 시스템), SVN (Subversion) - 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사해 작업한 후 변경된 내용을 중앙 서버에 반영
- 모든 버전 관리는 서버에서 수행됨
- 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메시지 출력
- 서버에 문제가 생기면 다른 개발자와의 협업 및 버전 관리 작업은 중단
SVN(Subversion) |
- CVS를 개선한 것으로 아파치 소프트웨어 재단에서 2000년 발표함 - 모든 개발 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어 작업을 완료한 후 trunk 디렉터리와 병합(merge) - 커밋(Commit)할 때마다 리비전(Revision)이 1씩 증가 - 서버는 주로 유닉스(UNIX) 사용 - 오픈 소스로 무료사용 가능 - CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능 |
명령어 | 의미 |
add | 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록 |
commit | 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버의 소스 파일에 적용 |
update | 서버의 최신 commit 이력을 클라이언트의 소스파일에 적용 |
checkout | 버전 관리 정보와 소스 파일을 서버에서 클라이언트로 받아옴 |
lock/unlock | 서버의 소스 파일이나 디렉터리를 잠그거나 해제 |
import | 아무것도 없는 서버의 저장소에 맨 처음 소스 파일을 저장하는 명령으로 한 번 사용 후 다시 사용하지 않음 |
export | 버전 관리에 대한 정보를 제외한 순수한 소스 파일만을 서버에서 받아옴 |
info | 지정한 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보를 표시 |
diff | 지정된 파일이나 경로에 대해 이전 리비전과의 차이를 표시 |
merge | 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합 |
분산 저장소 방식
- 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식
ex) Git, Bitkeeper - 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사해 작업한 후
변경 된 내용을 로컬 저장소에서 우선 반영(Commit) 한 다음 이를 원격 저장소에 반영(Push) - 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용해 작업 가능
- 로컬 저장소에서 작업을 수행할 수 있어 처리속도가 빠름
Git (깃) |
- 리누스 토발즈(Linus Torvalds)가 2005년 리눅스 커널 개발에 사용할 관리 도구 개발한 이후 주니오 하마노(Junio Hamano)에 의해 유지 보수되고 있음 - 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳, 자신의 버전 관리 내역을 반영(Push)하거나 다른 개발자의 변경 내용을 가져올 때(Fetch) 사용 - 로컬 저장소는 개발자들이 본인의 실제 개발을 진행하는 장소로 버전 관리가 수행됨 - 브랜치(Branch)를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅 가능 - 파일의 변화를 스냅샷(Snapshot)으로 저장 - 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름 파악 가능 |
- git init (로컬 저장소 생성)
- git remote add (원격 저장소 연결)
- git add -all (작업 내역을 로컬 저장소에 저장하기 위해 스테이징 영역에 추가)
- git commit (작업 내역을 로컬 저장소에 저장)
- git push (로컬 저장소에 저장한 내역을 원격 저장소에 반영)
명령어 | 의미 |
add | - 작업 내역을 로컬 저장소에 저장하기 위해 스테이징 영역에 추가, - ‘--all’ 옵션으로 작업 디렉터리의 모든 파일을 스테이징 영역에 추가 가능 |
commit | 작업 내역을 로컬 저장소에 저장 |
branch | -최초로 commit을 하면 master branch 생성됨 - commit 할 때마다 해당 브랜치는 가장 최근의 commit한 내용을 가리킴 - ‘-d’옵션으로 브랜치 삭제 가능 |
checkout | 지정한 브랜치로 이동 |
merge | 지정한 브랜치의 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에 반영함으로써 두 브랜치를 병합 |
init | 로컬 저장소를 생성 |
remote add | 원격 저장소에 연결 |
push | 로컬 저장소의 변경 내역을 원격 저장소에 반영 (올리기) |
fetch | 원격 저장소의 변경 이력만을 로컬 저장소로 가져와 반영 (내려받기) |
clone | 원격 저장소의 전체 내용을 로컬 저장소로 복제 (완전 똑같게 전체 내려받기) |
fork | 지정한 원격 저장소의 내용을 자신의 원격 저장소로 복제 |
Git과 Github 차이점
Git |
Github |
|
|
버전 관리 프로그램 (로컬 저장소를 사용하기 때문에 다른 개발자와 실시간 작업 공유 불가) |
버전 관리, 소스 코드 공유, 분산 버전 제어 등이 가능한 원격 저장소 (git의 기본적인 기능을 확장해 제공하며, 클라우드 서버에 소스를 올리기 때문에 다른 개발자들과 버전 제어 및 공동 작업이 가능) |
반응형
'자격증 > 정보처리기사' 카테고리의 다른 글
정보처리기사 4과목 프로그래밍 언어 활용 (절차적 프로그래밍 언어와 객체지향 프로그래밍 언어) (0) | 2023.05.08 |
---|---|
정보처리기사 2과목 소프트웨어 개발 ('동적 테스트' 화이트박스 테스트와 블랙박스 테스트 정리) (0) | 2023.05.07 |
정보처리기사 2과목 소프트웨어 개발 (형상관리) (0) | 2023.05.07 |
정보처리기사 2과목 소프트웨어 개발 (소프트웨어 패키징 고려사항과 작업 순서) (0) | 2023.05.05 |
정보처리기사 2과목 소프트웨어 개발 (개발지원 도구와 빌드 자동화 도구) (0) | 2023.05.05 |