2012-06-11 70 views

回答

0

的圖案基本上是:

sha1("tag " + datasize + "\0" + data) 

datagit cat-file輸出。人們可以通過管道該輸出產生這git-hash-object像這樣:

git cat-file tag v0.30 | git hash-object -t tag --stdin 

而且相當於一個Perl的一行是:

git cat-file tag v0.30 | perl -MDigest::SHA1 -E '$/=undef;$_=<>;say Digest::SHA1->new->add("tag ".length()."\0".$_)->hex digest' 

看來,一個可以做同樣的事情與任何只需將"tag "替換爲適當的對象名即可:"blob ","tree ""commit "

0

這幾乎是一樣的,儘管提交對象前面的小標題是不同的。您可以使用git cat-file來查看實際的格式。

+0

啊,我看到'git cat-file'的輸出返回實際散列的內容。 – theory

1

一個標籤對象的內容如下:基於計算出的SHA1值文本

object <commit-sha1> 
type commit 
tag <tag-name> 
tagger <author-with-timestamp> 

<tag-message> 

我該如何在Git之外複製它(例如,在Perl或Python中)?

看看libgit2及其各種bindings

+0

太棒了。哪裏?我發現[pygit2中的博客sha1代碼](https://github.com/libgit2/pygit2/blob/master/test/utils.py#L54),但不是標籤。我的ack-foo必須不足以支持libgit2 ... – theory

+0

沒關係,我通過實驗找出了它。看到我的答案。 – theory