2012-05-04 23 views
5

我有一個需要訪問大型git存儲庫的一小部分的竹構建。爲了節省時間和磁盤空間,我只想查看與構建相關的存儲庫部分。我已經知道淺層結賬。我想做的比這更多,並將結帳限制在一個文件夾(及其後代)中。如何在竹子構建過程中僅檢出一部分git存儲庫?

我看到這個選項,我覺得這是我有什麼用,但我一直沒能得到它的工作: enter image description here

我怎樣才能做到最小結賬,我想要什麼?

回答

2

最簡單的可能是讓誰託管回購標籤並提交您想要的特定樹。例如,

上游:

git tag quickie $(git commit-tree $(git rev-parse HEAD:path/to/dir) </dev/null) 

你:

git fetch upstream quickie 

如果你想在上游回購自動跟蹤的一個分支子樹,你可以做(​​的適當的解密版本)像這樣:

sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x 

這比它看起來更簡單。試試這個:

mkdir ~/tryitout && cd ~/tryitout && git init foo && git init bar --bare 
cat >bar/hooks/post-receive <<'EOF' 
sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x 
EOF 
chmod a+x bar/hooks/post-receive 
cd foo 
mkdir subtree && touch subtree/oooo && git add . && git commit -am- 
git push ../bar master 

晚更新 -

如果你與其他回購共享文件系統,你可以這樣做:

git clone --no-checkout /path/to/local/repo/.git subtree 
cd subtree 
git commit-tree origin/rev:subtree </dev/null | xargs git checkout -B peek 

,你可以在反彈,將通過改變適合的轉,起源/主:包括,起源/下一個:包括,起源/ v1.4:somewhereelsenow,不管。

我通常有一個「空」分支大回購。 Git處理一個空目錄的特例:

git mktree </dev/null | xargs git commit-tree | xargs git checkout -b empty 
+1

ps.s. HEAD當然可以是任何你想要的版本 – jthill

+0

但是,那麼標籤是否需要維護呢?也就是說,如果回購協議的相關部分發生變化,那麼我們需要將該變化挑選出來。或者我誤解了? –

+0

@AndrewEisenberg你確實需要一個任何你想要獲取的參考資料。我將添加一行以顯示如何使上游自動跟蹤子樹 – jthill

相關問題