[Git] 로컬 디스크에 원격 저장소 만들기
일반적인 깃 저장소(원격 저장소가 따로 존재하는 로컬 저장소)는 '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.