2011-02-01 43 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'