일단 저장소(Repository) 란? : 말그대로 파일이나 폴더를 저장해 두는 곳
그럼 Git 저장소 (= Git Repository)란?
: 'git이 관리하는 저장소'로 파일이 변경 이력 별로 구분되어 저장되며 다양한 git의 관리 기능이 지원된다.
Git Repository 종류 2가지
- Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.
(저장소는 꼭 두 종류 중 하나가 아니라 두 종류 다 일 수도 있을 것으로 보인다.)
1) 원격 저장소(Remote Repository)
: 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소
(주로 "(내가 clone해 가져오는) 협업 플젝 원본의 저장소")
2) 로컬 저장소(Local Repository)
: 내 PC에 파일이 저장되는 개인 전용 로컬의 git 저장소 (내 PC에 위치한 git 설정된 디렉토리)
(내가 "git 저장소를 생성" 또는 "원격 저장소를 clone해 와 (수정할) 내 PC에 존재하는 git 저장소")
ㄴ> 평소에는 내 PC의 로컬 저장소에서 작업하다가 작업한 내용을 공개하고 싶을 때에 원격 저장소에 업로드 합니다. (로컬 -> 원격)
ㄴ> 원격 저장소에서 다른 사람이 작업한 파일을 로컬 저장소로 가져올 수도 있습니다. (원격 -> 로컬)
1. Git 저장소(Repository) 만들기
- (내 컴퓨터에) 저장소를 만드는 방법은 두 가지가 있습니다.
#1-1. 아예 저장소를 새로 만들기
#1-2. 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해오기
#1-1. 새로 Git 저장소 만들기 (= 내 로컬 환경의 디렉토리를 Git 저장소로 만들기)
- 버전관리를 하지 아니하는 '로컬 기존 프로젝트'를 Git으로 관리하고 싶은 경우
- 이렇게 생성된 경우, 'git 저장소로 만들 내 PC의 로컬 디렉토리'가 로컬 저장소(Local Repository)이고,
이를 원격에 올리면 원격 저장소(Remote Repository)가 된다.
- 과정 ▼)
1) git 저장소로 만들 로컬 디렉토리 경로로 이동
$ cd /c/user/my_project
2) git init 명령을 실행
$ git init
ㄴ> 명령어 실행 시 해당 경로에 '.git' 이라는 하위 디렉토리가 만들어진다.
'.git 디렉토리' : 저장소에 필요한 뼈대 파일(Skeleton)들을 포함한 디렉토리
ㄴ> 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다.
3) 이제 git이 파일을 관리하게 하려면,
저장소에 파일을 추가(git add 명령)하고 커밋(git commit 명령)해야 한다.
- $ git add 명령으로 파일을 추가
- $ git commit 명령으로 커밋
- ex)
$ git add *.c $ git add LICENSE $ git commit -m 'initial project version'
4) 끝~!
- 명령어 몇 개로 순식간에 Git 저장소를 만들고 파일 버전 관리를 시작했다.
#1-2. 기존 저장소를 Clone 하기 (= 다른 프로젝트 가져와 Git 저장소 만들기) : $git clone <url>
- 다른 프로젝트에 참여하려거나(Contribute) Git 저장소를 복사하고 싶은 경우
- 이렇게 생성된 경우, 'git 저장소로 만들 내 PC의 로컬 디렉토리'가 '로컬 저장소(Local Repository)'이고,
<url>에 존재하는 원격 프로젝트'가 원격 저장소(Remote Repository) 이다.
- 과정 ▼)
1) git 저장소로 만들 로컬 디렉토리 경로로 이동
$ cd /c/user/my_project
2) git clone <url> 명령을 실행
$ git clone <url>
ㄴ> <url> 경로 마지막 디렉토리명으로 로컬에 디렉토리 생성하고, 그 안에 `.git 디렉토리'와
저장소의 데이터(clone 입력 시점 가장 최신 버전)를 모두 가져온다.
( = git의 'clone'을 해 놓는다. = snv의 'checkout'을 해 놓는다.)
ㄴ> <url>의 지원 프로토콜 : https://, git://, SSH 등 다양한 프로토콜을 지원
- 별도디렉토리에 clone하고 싶을 때 : $ git clone <url> <별도디렉토리명>
ㄴ> <별도디렉토리명> 디렉토리 생성하고, 그 안에 위와 같이 저장소 checkout해서 가져온다.
- git의 clone 을 실행하면 "프로젝트"와 "히스토리"를 전부 받아온다.
ㄴ> ▲ Git이 Subversion과 다른 가장 큰 차이점이다. 서버에 있는 거의 모든 데이터를 복사한다는 것.
ㄴ> 이 떄문에 실제로 서버의 디스크가 망가져도 클라이언트 저장소 중에서 아무거나 하나 가져다가 복구가능하다. :-)b
+ (서버에만 적용했던 설정은 복구하지 못하지만 모든 데이터는 복구된다)
- SVN 같은 VCS에 익숙한 사용자에게는 "checkout" 이 아니라 "clone" 이라는 점 주의
- ※ 주의) git과 svn 모두에서 "checkout"동작이 있으나 매우 다르다!!
SVN | Git | |
가지고 있지 않은 저장소를 원본(원격?)에서가져 오는 것 |
chekout | clone |
이미 가지고 있는 저장소를 원본(원격?)의 최신버전으로 전환하는 것 |
update | pull, fetch 등 다양 |
Git의 브랜치 전환 | X | checkout |
END!
스터디 도움 참조 블로그 (References)
- 버전 관리(VC) 위키백과 https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC - 누구나 쉽게 이해할 수 있는 Git 입문 https://backlog.com/git-tutorial/kr/ /입문편/Git의 기본/이력을 관리하는 저장소 https://backlog.com/git-tutorial/kr/intro/intro1_2.html - git--distributed-even-if-your-workflow-isnt (Pro Git Book) https://git-scm.com/book/en/v2 - git--distributed-even-if-your-workflow-isnt (Pro Git Book) / ch2.1 https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-Git-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0 - What is the difference between git clone and checkout? https://stackoverflow.com/a/7298621 - What is the difference between git checkout and git pull? - Quora https://www.quora.com/What-is-the-difference-between-git-checkout-and-git-pull |