본문 바로가기

잡다/git

[Git 07] 서버

 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.

gitProject가 복사되었다.

동일한 방식으로 로컬 디렉토리를 원격저장소로 등록할 수도 있다.

$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이라는 이름으로 저장한다. 해당 명령 자체는 원격 저장소 urlnickName으로 저장하는 역할만 수행할 뿐, 실제로 해당 주소의 존재 여부 등은 검사하지 않는다.

http://apple 은 존재하지 않는다...

 

원격 저장소 이름 변경 : 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를 제거하는 것이지, 해당 원격 저장소 자체에 영향을 주지는 않는다.

new_test가 사라졌다.

원격 저장소 정보 보기 :  show

원격 저장소의 정보를 가져온다. 이때 "정보"는 저장된 해당 주소에 접근하여 가져오는 것이지, 내 컴퓨터 내부에 저장된 정보를 보여주는 것이 아니므로 remote add를 통해 추가한 저장소 주소가 유효하지 않다면 에러 메시지를 출력한다.

$git remote show nickName

test는 존재하므로 정상적으로 출력. new_test는 존재하지 않아 에러 메시지 출력

 

원격 저장소에 내용 전송 : 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