2011-11-16 3 views
0

힘내 저장소 또는 하위 저장소 like in Mercurial Share extension으로 작업하고 싶습니다.여러 프로젝트에서 .git 폴더를 공유하는 방법은 무엇입니까?

그래서, 나는 여기가 무슨 : 그것은 orig와 저장소를 공유하도록

mkdir orig 
cd orig 
echo "osthuaosteh" > abc 
git init --shared 
git add abc 
git commit -m 'init' 
cd .. 
mkdir another 

가 어떻게 another에서의 repo를 초기화 할 수 있습니까?

하위 리포지토리에 포함하려는 큰 라이브러리에이 기능이 필요합니다. Repo의 무게는 수백 메가이므로 폴더 중 일부를 다시 사용하고 싶습니다.

업데이트 : 다른 작업 폴더에서 다른 버전을 사용하고 싶습니다.

git init # (to make another a git-repo) 
git submodule add ../orig orig # to make orig a submodule of another 
git commit # to commit the addition of the submodule 

: 경로 another에 (그리고 예제) 될 자식-서브 모듈로

+0

설명 : 공유 확장은 여러 작업 복사본간에 하나의 저장소를 공유합니다. –

+0

@Laurens Holst : 이것은 내가 필요한 것입니다. –

답변

2

나는 당신에게 묻습니다 : 정말로 저장소를 공유해야합니까?

Mercurial과 마찬가지로 git은 로컬 복제본을 만들 때 리포지토리간에 하드 링크를 생성하므로 디스크 공간이 약간만 소모됩니다. 예컨대 : repo-copy1repo-copy2 저장소에

git clone http://example.org/repo repo 
git clone repo repo-copy1 
git clone repo repo-copy2 

대부분의 파일은 repo 하드 링크되며, 추가 디스크 공간을 사용하지 않습니다. 작업 사본의 파일 만 실제 사본입니다.

당신은이 같은이 동작을 확인할 수 있습니다 : 당신이 볼 수 있듯이

$ df -l 
Filesystem 512-blocks  Used Available Capacity Mounted on 
/dev/disk0s2 976101344 217966872 757622472 23% /
$ git clone --no-checkout repo repo-copy 
Cloning into repo-copy... 
done. 
$ du -cs repo-copy/.git 
63528 . 
63528 total 
$ df -l 
Filesystem 512-blocks  Used Available Capacity Mounted on 
/dev/disk0s2 976101344 217967536 757621808 23% /

이하는 65,880 블록 저장소를 복제 한 후 (512 바이트 각의), 파일 시스템의 블록 수는 664으로 내려 갔다 블록.

원격 서버에서 (하위) 저장소를 복제하는 경우 다른 로컬 복제본에 대한 하드 링크를 수동으로 만들어야 할 수 있습니다. Mercurial의 경우 확장을 위해 relink 확장을 사용합니다. 자식 동등 물도 called that 것 같습니다.

+0

간단히 로컬 저장소를 복제하여 +1을 해결합니다. :) – jweyrich

+0

좋아요! 'relink'도 체크 아웃합니다. –

+0

복제본이 이제 독립 저장소이므로'share'와 동일하지 않습니다. 나는 디스크 공간이 여기에 문제가 될지 의심 스럽다. OP는 두 작업 복사본이 저장소를 공유하기를 원한다. –

1

. git submodule --help을 사용해 보셨습니까?

+0

나는 그것을 읽고 이해할 수 없다 :'another/orig'에있는 .git 폴더의 (일부분)이 공유 될 것인가 아닌가? 난 그냥 공간을 절약하고 트래픽을 끌어 싶어요. –

+0

'git submodule add ../orig orig' =>'원격 (origin)은 .git/config'에 정의 된 URL을 가지고 있지 않습니다. 나는'git status'를하고, 'commit nothing'이라고 말합니다. –

+0

서브 모듈은 동일하지 않습니다 (hg에서 서브 레포지토리라고 함). 공유 확장은 여러 작업 복사본간에 하나의 저장소를 공유합니다. –