2011-11-16 85 views
0

我想與Git存儲庫或子存儲庫like in Mercurial Share extension一起使用。如何在多個項目中共享.git文件夾?

所以,這裏是我有:

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

我怎樣才能在another初始化回購,使其股與orig庫?

我需要這個我想包括作爲一個子庫的大型圖書館。回購重量數百megs,所以我想重用一些文件夾。

更新:我想能夠在不同的工作文件夾中有不同的修訂版本。

+0

澄清:共享擴展共享多個工作副本之間的單個存儲庫。 –

+0

@Laurens Holst:這正是我需要的。 –

回答

2

我想問你的是:你真的需要共享存儲庫嗎?

與Mercurial一樣,git在製作本地克隆時會在存儲庫之間創建硬鏈接,從而僅佔用很少的磁盤空間。例如: -

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

repo-copy1repo-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% /

正如你可以看到,克隆65880塊庫後(每512個字節),文件系統上的塊數下降了僅664塊。

如果從遠程服務器克隆(子)存儲庫,則可能必須手動創建到其他本地克隆的硬鏈接;對於Mercurial,您可以使用relink擴展名;該git相當於也似乎是called that

+0

+1爲解決這個問題,只需克隆本地回購:​​) – jweyrich

+0

太棒了!也會檢查'relink'。 –

+0

這與「共享」不同,因爲克隆現在是獨立存儲庫。我懷疑磁盤空間在這裏是問題,更多的是OP希望兩個工作副本共享一個存儲庫。 –

1

隨着混帳子模塊,這將是(和你的榜樣),路徑another

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 

。你有沒有試過git submodule --help

+0

我讀過它並且無法理解:「another/orig」中的.git文件夾(的部分)是否會被共享?我只是想節省空間和拉動交通。 –

+0

'git submodule add ../orig orig' =>'remote(origin)沒有在.git/config中定義的url。我做'git status',說「沒什麼好提交」。 –

+0

子模塊不一樣(它們在hg中被稱爲子庫)。共享擴展共享多個工作副本之間的單個存儲庫。 –

相關問題