首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将信息存储在分支(元数据)中,说明它与“父”分支的分叉点

将信息存储在分支(元数据)中,说明它与“父”分支的分叉点
EN

Stack Overflow用户
提问于 2018-09-01 02:52:10
回答 1查看 493关注 0票数 2

说我有这个:

代码语言:javascript
复制
latest_commit=`git rev-parse HEAD`
git checkout -b "foo_$latest_commit"
git reset --soft "origin/dev"

我正在做的是跟踪第二支从第一支分化到哪里。但是,与将提交id放入第二个分支的名称不同,是否有一种方法可以将元数据存储在第二个分支中,这样我就不必在分支的名称中放置一个长的提交id了吗?

最终,我想做什么?在使用foo_$latest_commit压缩提交之后,我将将git reset --soft合并到集成分支中。以后,我希望能够安全地删除第一支和第二支。如果第一个分支的尖端与第二个分支的名称中的提交id匹配,我可以安全地删除第一个分支。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-01 05:01:07

..。有没有办法把元数据存储在第二分支的某个地方。

不是直接的,不是。

请记住,每个分支名称只是一个指向提交的(可移动的)指针,如果您使用git checkout获取"on“分支,则git commit会自动移动该指针。其他各种命令都愿意以不同的方式移动它:例如,git merge --ff-only将以快速前进的方式移动当前的分支名称,而git reset将任意移动它。

那么:您可以在哪里存储元数据?这有点棘手。

Git由两个主要数据库组成:存储库本身是一个键值存储区,哈希is作为键,存储库对象(blobs、树、提交和带注释的标记)作为值。同时,引用-- refs/heads/*中的分支名称、refs/tags/*中的标记名、refs/stash中的存储库等等--是一个键值存储,其值为散列ID,其值为散列ID。

由于您的目标是(我认为)将一个分支名称与两个不同的散列ID关联起来,一个显而易见的方法就是在refs中创建您自己的命名空间。假设我们选择,例如,refs/bases/。对于名称为B(例如全名refs/heads/B )的分支,只需创建一个refs/bases/B。您唯一可以在refs/bases/B中存储的东西是散列ID,但这正是您想要存储的内容,所以您已经完成了。

如果您希望存储一个简单的散列ID以外的其他内容--例如,如果您想存储另一个名称--您将需要某种类型的数据对象。您的选择是四种对象类型中的任何一种,但其中两种类型受到强烈限制:树或提交必须正确格式化。其中一个是弱约束的:带注释的标记对象必须包含另一个对象的散列ID --注释标记的目标--然后可以包含任意文本。最后一个blob是不受约束的,因为它可能包含任意文本。

若要创建带注释的标记对象,请使用git mktag。有关所需的标记格式,请参阅其文档。

若要创建blob,请使用git hash-object -w (可能与--stdin一起使用);请参阅其文档。

两者都输出一个散列ID,然后您可以将其设置为要存储在refs/bases/Brefs/xyz-meta/B或您选择的任何名称空间下的散列ID。

最后一个音符

对于大多数Git用法,工作方式不是存储基本分支名称,也不存储基提交散列ID。相反,使用set减法请求可达提交,形式如下:

  • 所有可从名称T(用于提示)到达的提交;但是
  • 将所有可从名称S(表示停止)的提交排除在外。

例如,这正是git rebase对传递给它的参数所做的事情:当运行git checkout feature; git rebase develop时,Git枚举所有可从feature到达的提交,减去可从develop到达的所有提交。这在Git中非常常见,因此它有一个git rev-list语法:develop..feature的意思是feature ^develop,意思是“提交可以从feature到达,不包括可从develop到达的提交”。

(元数据技巧所能得到的是自动记住适当的名称,但事实证明,在实践中,大多数人似乎并不需要这个名称。不过,对于你的特殊用法来说,这可能是一件好事。我把这部分放在这里是因为我相信将来,其他人会找到你的问题和答案,并认为这是一个聪明的方式来记住每个派生分支的“基分支”。的确如此,但这不是一件聪明的事情。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52124477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档