Git을 자신의 컴퓨터 내부에서만 사용하면 단순한 버전 관리 시스템이 되지만, 특정 서버에 올려 이를 다수의 사람들과 공유하며 작업하면 협업을 위한 툴이 될 수 있다. Git에서 프로젝트의 각 버전은 충돌이 발생해서는 안되며, 충돌 발생 시 사용자가 개입하여 수정하는 작업을 수행해야 하기 때문에 Github와 같은 깃 서버를 사용하여 협업하는 경우, 사용자들에게 중복되지 않는 작업을 보장한다.
서버 연결 프로토콜
https://git-scm.com/book/ko/v2/Git-%EC%84%9C%EB%B2%84-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C
서버 연결 방식에는 Local, HTTP, SSH, Git 이 있다.
Local
리모트 저장소가 동일 시스템 내 다른 디렉토리 ( 보통 내 컴퓨터 내부의 폴더 ) 에 있을 때 사용한다. 정보가 분산되지 않기 때문에 저장소가 망가지면 모든 정보가 소실된다는 단점이 있다.
$git clone ../gitProject
//Cloning into 'gitProject'...
//done.
동일한 방식으로 로컬 디렉토리를 원격저장소로 등록할 수도 있다.
$git remote add test ../../gitProject
// 원격 저장소에 test라는 이름으로 해당 주소의 깃 저장소를 추가
$git remote -v
// 현재 깃 저장소에 저장된 원격 저장소의 이름과 주소 보여주기
//test ../../gitProject (fetch)
//test ../../gitProject (push)
- 장점 : 기존 네트워크나 파일의 권한을 그대로 사용하므로, 설정이 편하다.
- 단점 : 다양한 상황에서 디렉토리에 접근할 수 있도록 설정하는 것이 어렵다. 속도가 빠르다는 보장도 없다.
HTTP
http 프로토콜을 통한 통신 방식으로, 웹 서버에 대해 접근하는 경우 사용한다. 깃허브의 아무 프로젝트나 clone 해보자.
- 장점 : 매우 보편적인 프로토콜이다. 읽기 및 쓰기에 하나의 URL을 사용하여 접근할 수 있다.
- 단점 : 때때로 SSH보다 복잡하다.
SSH
ssh 프로토콜을 이용하여 서버에 보안 접근한다. ssh의 동작 과정 중 암/복호화 과정이 존재하기도 하고, 사용할때 인증 단계가 존재하기 때문에 익명으로 서버에 접근할 수 없다는 특징이 있다.
Git
Git 내부적으로 지원하는 데몬을 사용하는데, 인증 매커니즘 및 보안은 주어지지 않는다. 모두에 대한 Push 권한을 설정할 수 있으며, Push는 url을 모르면 할 수 없다고 하며, 실제로 자주 사용되지는 않는다.
장점 : 전송 속도가 빠르다.
단점 : 인증 매커니즘이 없으며, 9418 포트를 사용하는데 해당 포트가 표준 포트가 아니므로 대다수 회사의 방화벽에서 사용을 허용하지 않아 개별적 작업이 필요하다.
서버 접근을 위한 명령어
특정 서버에 접근하기 위해 사용되는 명령어들이다.
remote : 원격 저장소 관련 명령
remote 명령어는 현재 깃 폴더에 대한 원격 저장소와 관련된 동작을 수행하는데 사용되는 명령어이다.
원격 저장소 리스트 보기 : -v
$git remote
// 단순히 원격 저장소의 이름 보기
$git remote -v
// 원격 저장소의 이름 및 url 보기
현재 깃 폴더와 관련된 원격 저장소 리스트를 보기 위해서는 remote 명령을 사용한다.
원격 저장소 추가 : add
git init을 통해 git 저장소를 생성했을 때, 처음부터 원격 저장소 정보가 존재하지는 않는다. 만약 특정 원격 저장소에 대해 작업하고 싶다면, 먼저 원격 저장소를 현재 깃 레포지토리에 등록해야 한다.
$git remote add nickName url
git remote add 명령을 이용하면 특정 url 주소의 깃 레포지토리를 nickName이라는 이름으로 저장한다. 해당 명령 자체는 원격 저장소 url을 nickName으로 저장하는 역할만 수행할 뿐, 실제로 해당 주소의 존재 여부 등은 검사하지 않는다.
원격 저장소 이름 변경 : rename
remote add를 통해 저장한 저장소의 이름을 변경하고 싶다면 rename을 통해 변경할 수 있다.
$git remote rename prev_name new_name
prev_name을 new_name으로 변경한다.
원격 저장소 주소 삭제 : rm
remote add 명령을 통해 추가했던 원격 저장소를 삭제한다.
$git remote rm nickName
nickName에 해당하는 원격 저장소를 삭제한다. 이때 삭제하는 것은 remote add 명령을 통해 현재 깃 폴더에 저장했었던 alias를 제거하는 것이지, 해당 원격 저장소 자체에 영향을 주지는 않는다.
원격 저장소 정보 보기 : show
원격 저장소의 정보를 가져온다. 이때 "정보"는 저장된 해당 주소에 접근하여 가져오는 것이지, 내 컴퓨터 내부에 저장된 정보를 보여주는 것이 아니므로 remote add를 통해 추가한 저장소 주소가 유효하지 않다면 에러 메시지를 출력한다.
$git remote show nickName
원격 저장소에 내용 전송 : push
현재 깃 폴더의 변경 사항이나 내용을 원격 저장소로 전송한다.
$git push nickName branch_name
$git push nickName branch_name:other_name
// 브랜치를 다른 이름으로 푸시
push 명령은 현재 깃 폴더의 내용이 해당 원격 저장소에 대해 최신 상태로 동기화되어 있어야 가능하다. 만약 최신 상태로 동기화 되지 않았다면 pull 명령으로 깃 폴더를 최신화해야 한다.
원격 저장소에서 내용 내려받기 : pull / fetch
지정된 원격 저장소에서 내용을 내려받는다. 이때 해당 원격 저장소의 내용과 자신의 깃 폴더상의 내용이 충돌을 발생하지 않도록 주의해야 한다.
pull 명령은 내용을 내려받고 자동으로 병합한다. 만약 원격 저장소의 내용과 충돌이 발생하면 실패한다.
$git pull
반면 fetch 명령은 내용을 내려받기만 한다. fetch 명령을 통해 얻은 내용은 serverName/master 형태의 임시 브런치에 저장된다고 한다.
$git fetch url
fetch로 받아온 브랜치는 merge 명령을 통해 병합한다.
$git merge origin/master
원격 저장소 복사 : clone
원격 저장소의 내용을 복사한다. 저장소의 생성 - 원격 저장소 지정 - 저장소 내용 복사의 다소 귀찮은 과정이 해당 명령 한번으로 대체될 수 있다. 따라서 깃 폴더를 처음 만드는데, 특정 깃 서버에서 내용을 가져올 생각이라면 그냥 clone 명령으로 원격 저장소를 만드는게 더 편하다.
$git clone url
'잡다 > git' 카테고리의 다른 글
[Git 09] Stash (0) | 2021.12.28 |
---|---|
[Git 08] 브랜치 (0) | 2021.12.28 |
[Git 06] Alias (0) | 2021.10.31 |
[Git 05] remote (0) | 2021.10.30 |
[Git 04] commit (0) | 2021.10.30 |