[Git] 로컬 디스크에 원격 저장소 만들기

Published: by Creative Commons Licence

일반적인 깃 저장소(원격 저장소가 따로 존재하는 로컬 저장소)는 'git init'으로 생성하지만 원격(서버) 저장소라면 bare-repository로 생성해야 한다. bare-repository는 워킹 트리가 없고 변경 사항만 추적하는 저장소를 말한다.

bare-repository를 생성해서 원격 저장소로 등록해보자.

clone을 이용한 방법

$ git init --bare
Initialized empty Git repository in c:/Users/fixalot/work/gitserver/

$ git clone file://c:/Users/fixalot/work/gitserver myrepository
Cloning into 'myrepository'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done

여기서는 file 프로토콜을 사용했는데 생략할 수도 있다.

$ git clone c:/Users/fixalot/work/gitserver myrepository2
Cloning into 'myrepository2'...
warning: You appear to have cloned an empty repository.
done.

$ git clone ~/work/gitserver myrepository3
Cloning into 'myrepository3'...
warning: You appear to have cloned an empty repository.
done.

file 프로토콜 사용여부에 따른 차이는 여기에서 확인할 수 있다.

remote를 이용한 방법

저장소 생성까지는 clone과 같다.

$ git init --bare
Initialized empty Git repository in c:/Users/fixalot/work/gitserver/

그리고 다음처럼 깃 저장소 등록 후 서버를 추가한다:

$ git init
Initialized empty Git repository in c:/Users/fixalot/work/test/.git/

$ git remote add origin file://c:/Users/fixalot/work/gitserver
$ git remote -v
origin  file://c:/Users/fixalot/work/gitserver (fetch)
origin  file://c:/Users/fixalot/work/gitserver (push)

하지만 이렇게 할 경우 다음과 같은 에러들이 발생할 수 있다:

$ git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'file://c:/Users/fixalot/work/gitserver'

$ git pull -u origin master
fatal: Couldnt find remote ref master
fatal: The remote end hung up unexpectedly

이 현상은 아무 파일이나 생성 - 커밋 - 푸싱으로 간단하게 해결된다. 뭐야

$ touch readme
$ git add .
$ git commit -m "init"
[master (root-commit) 1a90f6d] init
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme

$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 198 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To file://c:/Users/fixalot/work/gitserver
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

$ git pull -u origin master
From file://c:/Users/fixalot/work/gitserver
 * branch            master     -> FETCH_HEAD
Already up-to-date.