2011-02-01 59 views
3

假設我有一個純粹的推測提交沒有工作。我想保持它,但我不想做一個REF(我不想要一個分支機構或一個名爲「一單投機犯」的標籤,我當然不希望他們的100S )我可以創建一個分支名稱「推測」,並將所有提交放入其中,但提交完全不相關,因此提交與其父項之間的關聯是荒謬的。從本質上講,我希望能夠列出一大堆不會被gc刪除的提交,但不需要爲每個提交一個ref。什麼是這樣做的好方法? (我不想將gc.pruneExpire設置爲高值,因爲我仍然想要修剪東西,只想保留一些特定的未提交的提交集合。)換句話說:如何確保提交不會被刪除?

什麼是一個很好的方法來引用一組完全不相關的提交?

回答

3

我決定採用的解決方案相對簡單。

 
$ git update-ref refs/speculative/SHA1 SHA1 

git-gc似乎尊重裁判,而不是刪除它。受保護的提交可以很容易地列出:

 
$ git show-ref | grep refs/speculative 

我到目前爲止發現的唯一的缺點就是混帳的fsck --lost發現的HEAD報告說,他們被晃來晃去。

2

您可以使用git stash,它基本上是一個不同的列表,連接到名爲'stash'的ref,所有工具(如git show-branch)都忽略。

或者你可以在一個假遙控器,例如使用分支爲每refs/remotes/graveyard/an-experiment這將不包括在--branches但在--all所以不會被修剪。

+1

我不會推薦使用`git stash`,因爲它會干擾`git stash`的正常使用 - 即臨時存儲正在工作的數據 – bdonlan 2011-02-01 14:59:47

+0

我玩弄了一段時間,但它進入使用藏匿的方式來存儲。假遙控器是一個好主意;但我仍然需要每個人的唯一名稱,對吧?我寧願將描述放在提交消息中,而不是分支名稱。 – 2011-02-01 15:00:47

4

我只是標籤的提交(採用了輕量化標籤)。我知道這不是你真正想要的解決方案,但在我看來這是最好的解決方案。標記的提交將永遠不會被清除,並且在列出分支時不會顯示。他們會列出標籤時,但如果你真的不想看到它們,你可以用一個通用的前綴開始每個標籤,然後使用git別名來過濾它們。例如:

[alias] 
    tags = !sh -c 'git tag | grep -v my_prefix'