2016-08-16 88 views
0

用於工作區,我試圖做一個裸克隆,但遠程分支映射到遠程跟蹤分支。Git克隆 - 創建一個裸露的克隆,但與遠程跟蹤分支(工作樹'主'回購)

我正在嘗試設置一個通用工作樹工作流程。我的回購真的很大,所以克隆它非常昂貴。即使使用硬鏈接,由於回購得到gc ed,它們往往會隨着時間的推移而分化並佔用額外的空間,而在一個回購庫中取回對另一回購沒有幫助,所以在工作中工作似乎是顯而易見的事情。 (你必須在此相信我。)

工作區需要一個實際存放對象的「主」回購。顯然,這個克隆不能被刪除,所以我想把它放在類似/var/cache/git/reponame.wt.git的地方。 (我正在爲我和我的同事制定一個通用的解決方案,所以我必須使其相當安全)。

I 可能使它成爲一個常規克隆,但它必須檢出一個分支然後該分支不能被任何其他工作樹檢出,所以我必須製作一個可能會讓人困惑的虛擬分支(例如wt_dummy)。我真正想做的是使主要回購bare回購。

問題是,git clone --bare不創建遠程跟蹤分支。所以,做一個「裸回購,但與遠程跟蹤分支」,我已經開始這條道路

git clone --bare <remote> repo.tmp 
mv repo.tmp.git reponame.wt.git 
cd reponame.wt.git 
git config core.bare true 
git config --remove-section branch.master 
... and I'm not quite there yet ... 

但)它似乎過於漫長而複雜的,和b)git倉庫仍然認爲它已經master查了出。

有沒有更好的方法來使這個「遙控裸露克隆」?

(也許有更好的方法來設置一般worktrees,但我明白,得到的堆棧溢出的「特定的編程解決方案」範圍的毛茸茸的邊緣。)

+1

「*我可以使它成爲一個常規的克隆,但它必須檢出一個分支,然後該分支不能被任何其他工作樹檢出,所以我必須創建一個虛擬分支(例如wt_dummy)這可能會使人們感到困惑*「爲什麼你不創建一個空的提交併在非裸倉庫中檢出它(作爲分離的HEAD)? – Leon

+0

一個合理的想法。你甚至可以做'git clone --no-checkout --branch v1.0 reponame.wt'來給你一個沒有簽出但是頭部指向'v1.0'標籤的repo。 – Mort

回答

1

您可以配置一個純倉庫有遠程跟蹤分支有:

git config --local --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" 

運行git fetch,你會看到他們git branch -a

我不相信這是可能的master(或其他分支機構)在倉庫中檢出,但有一個純倉庫是安全反正爲它創建一個鏈接worktree,如:

git worktree add --force <path> master 

即使master在裸存儲庫中籤出,但如果存儲庫是裸露的,那麼它不存在主工作樹,因此您最終不會得到兩個不同步的工作樹。