로컬 저장소의 코드를 복제한 복사본입니다. 서버를 사용하면 코드를 안전하게 보관 할 수 있고, 서버에 있는 소스 코드를 다른 사람들과 공유하고 협업 할 수 있습니다.
협업 저장소 : 여러 개발자와 협업하려고 탄생한 도구로써 인터넷에 항상 접속되어 있거나 인터넷에 연결 할 수 없는 개발환경에 고려하여 분산형 모델 형태로 만들어져 있습니다.
연속된 작업 : 사무실에서 작업하고 서버에 올린 코드를 자신의 컴퓨터에 동기화 할 수 있습니다. 즉, 사무실, 집, 다른 여러 컴퓨터에 코드를 동기화하고 연속된 작업을 이어 갈 수 있습니다. 서버 저장소는 여러 컴퓨터에 동일한 깃 저장소를 복제하고, 작업한 결과물을 다시 서버로 통합합니다.
새 맴버 : 기존에는 코드 공유 방식은 이메일 및 외부 저장 장치 였으나, 이제는 깃의 원격 저장소 주소만 알려줌으로써 모든 구성원에게 코드의 최종 결과물을 동기화 합니다.
깃허브[Github] (=깃호스팅 서비스)
새로운 로컬 저장소를 생성하고 원격 저장소를 연결하는 방법
1. 새로운 로컬 저장소를 생성하고 초기화
$ mkdir gitstudy05 //새폴더 만들기
$ cd gitstudy05
$ git init //정장소를 깃으로 초기화
2. 저장소 소개 페이지 파일 생성
$ echo "# gitstudy05" >> README.md //파일 생성
3. README.md 파일을 추적 등록하고 커밋
$ git add README.md
$ git commit -m '(commit messege)'
Local(로컬)
로컬 컴퓨터에 원격 저장소를 생성하는 것을 의미
해당 방식은 자신의 컴퓨터를 NFC(Network File System) 등의 서버로 이동할 때 편리
** 로컬 저장소를 서버로 이용할 때는 폴더 경로만 입력
$ git remote add (원격저장소 별칭 폴더 경로)
HTTP
기존 아이디와 비밀번호만으로 접속자를 인증하여 처리 가능.
익명으로도 처리가 가능하며 계정을 이용하여 처리할 수 있다.
SSH
깃에서 권장하는 프로토콜
계정을 생략하여 현재 로그인된 사용자로 대체 할 수 있다.
SSH 프로토콜을 이용하려면 주소 앞에 'ssh://계정@주소'와 같은 프로토콜 타입을 지정
인증서를 만들어서 사용하는 프로토콜이므로 별도의 회원 로그인 절차를 거치지 않는다.
Git
데몬 서비스를 위한 전용 프로토콜 방식
1. remote 명령어를 독립적으로 사용시 연결된 원격저장소의 이름(별칭)을 출력
$ git remote
2. -v 옵션을 사용하면 원격 저장소의 별칭 이름과 URL을 확인 할 수 있다.
$ git remote -v
1. 원격 저장소와 연결하려면 add옵션을 사용합니다.
$ git remote add (원격저장소별칭) (원격저장소 URL)
2. 원격 저장소가 연결되면 fetch[서버에서 가지고오기]와 push[서버로 전송] 두 주소를 출력한다.
1. remote 명령어로 별칭 이름 변경
$ git remote rename (변경전) (변경후)
2. 상세한 원격 저장소의 정보를 확인
$ git remote show (원격저장소별칭)
1. 원격 저장소 삭제
$ git remote rm (원격저장소별칭)
■ push란?
원격 저장소로 커밋된 파일들을 업로드하는 동작입니다.
로컬 저장소 -> 원경저장소로 가는 동작을 push동작이라고 합니다.
원격 저장소로 로컬 깃 저장소의 내용을 전송할 때는 push 명령어를 사용합니다.
■ push 명령어
$ git push 원격저장소별칭 브랜치이름
■ push명령어를 사용한 예시
$ git push origin master -- 원격 서버로 전송
원격 저장소를 사용하면 좋은 점
원격 저장소에서 다른 이름의 로컬 저장소로 복제하기
ex) git clone 복사할 저장소 주소
```bash
$ cd 메인폴더
$ mkdir gitstudy05_clone 복제할 새 폴더 만들기
$ cd gitstudy05_clone/ clone 해올 폴더로 이동
$ cd git clone 저장소 주소 clone 하기
$ ls -all 목록확인
```
remote 명령어를 사용하여 원격 저장소 정보 확인
$ git remote -v 원격 저장소 목록
origin https://github.com/사용자 아이디/저장소 이름(fetch)
origin https://github.com/사용자 아이디/저장소 이름(push)
-> 원격 저장소와 로컬 저장소 연결
$ git pull
$ cd ../gitstudy05 원본 폴더로 이동
$ git add 파일명
$ git commit -m ['커밋 코멘트']
$ git push origin master 푸시,원격 서버로 전송
$ cd ../gitstudy05_clone 복제 저장소 이동
$ git log 로그 확인
commit [커밋명] (HEAD->master, origin/master,origin/HEAD)
first commit
$ git pull
: pull 명령어는 원격 저장소에 갱신된 커밋을 로컬 저장소의 커밋 정보와 비교하여 갱신합니다. : 풀(pull)은 원격 서버에서 현재 커밋보다 더 최신 커밋 정보가 있을 때 내려받습니다. 내려받은 커밋 정보는 임시 영역에 저장하고 스테이지 영역이 아닌 원격 저장소를 위한 전용 임시 브랜치가 따로 있습니다.
:fetch(페치)는 원격 저장소에서 코드를 수동으로 내려받는 작업을 합니다. 페치는 원격 저장소애서 커밋된 코드를 임시 브랜치로 내려받고 내려받은 후 현재 브랜치와 자동 병합하지 않습니다.
$ git fetch 원격저장소URL
$ cd ../gitstudy05
$ code server.htm //VS Code실행
$ git commit -am ["커밋 코멘트"]
$ git push origin master
$ cd ../gitstudy05_clone //복제 폴더 이동
$ git fetch //커밋 내려받기
$ git log
: 페치는 데이터를 내려받기만 할 뿐 자동 병합하지 않습니다. 내려받은 커밋을 로컬 저장소에 적용하려면 병합 명령을 실행해야 하는대, merge 명령어를 사용합니다.
$ git merge 원격저장소별칭/브랜치이름
$ git merge origin/master
원격 저장소에는 다수의 개발자가 동시에 커밋을 푸시할 수 없습니다. 여러 명이 협력해서 개발할때는 순차적으로 푸시해야 합니다.
최신 상태
원격 저장소에 푸시하려면 자신의 로컬 저장소를 최신 상태로 유지해야합니다.
커밋이 순차적이지 않을 때 깃은 푸시 동작을 거부합니다.
충돌 방지
깃이 최신 상태에서만 푸시를 허용하는 것은 충돌을 방지하기 위해서 입니다.
원격 저장소의 커밋을 내려받는 풀 작업은 내려받은 커밋들을 현재 브랜치로 자동 병합합니다.
이때 커밋 내용이 순차적이지 않으면 병합 과정에서 충돌이 발생합니다.
push 명령어를 사용할 때는 충돌을 최소화하기 위해 미리 원격 저장소를 확인합니다. 새로운 커밋 갱신이 없는지 pull 명령어를 사용하여 지속적으로 확인하는 것이 좋습니다.
최대한 충돌을 피할 수 있는 방법은 자신의 저장소와 원격 저장소의 상태를 자주 최신으로 유지하는 것입니다.
권장 순서
깃에 대해 꼼꼼하게 정리되어 있어 좋았고, 꼭 필요한 명령어들만 잘 정리되어있는 것 같아요!!