2013-09-01 41 views
4

我无法理解git submodule status的输出。我认为这是因为我不经常使用标签。搞定git子模块状态输出

我加了一个子模块到Git仓库(您可以在本地确实很容易直接使用下面的3个git命令复制此):

/ $ git init 
/$ git submodule add https://github.com/twbs/bootstrap.git 
Cloning into 'bootstrap'... 
## Output abridged ## 
/$ git submodule status 
93694898838b479d2806c53c827847f724312bcc bootstrap (v2.3.1-2965-g9369489)  
/$ cd bootstrap/ 
bootstrap/ $ git rev-parse HEAD 
93694898838b479d2806c53c827847f724312bcc 

我检查了v3.0.0

bootstrap/ $ git checkout v3.0.0 
Note: checking out 'v3.0.0'. 
## Tells me about the detached HEAD ## 
HEAD is now at e8a1df5... remove dumb validation reports 
bootstrap/ $ cd .. 
/$ git commit -a -m 'Added submodule and changed its checked out commit' 

输出git submodule status

/ $ git submodule status 
e8a1df5f060bf7e6631554648e0abde150aedbe4 bootstrap (v2.3.1-2765-ge8a1df5) 

引用的提交(e8a1df5)对我来说很有意义,但标记很混乱。 man git-submodule说这就是git submodule status输出的每一行是:

的SHA-1的当前签出提交用于每个子模块,与所述子模块路径沿着和git的输出描述为SHA-1。

所以git describe e8a1df5f060bf7e6631554648e0abde150aedbe4的输出是(v2.3.1-2765-ge8a1df5)?但我刚刚检出v3.0.0?!

反正man git-describe这样说:

该命令将查找最近的标记,它是从提交访问。如果标签指向提交,则只显示标签。否则,它会将标记名称与标记对象顶部的附加提交数量以及最近提交的缩写对象名称后缀相加。

所以,从git submodule status输出将这一知识用于(v2.3.1-2765-ge8a1df5)上面我收到:

  • v2.3.1”必须是最新的标签可达来自e8a1df5
  • “2765”必须是数字提交“v.2.3.1
  • 和“e8a1df5”必须是最近提交的缩写对象名称(请参阅man gitrevisions re:g前缀)

但这对我没有意义。为什么v2.3.1加上2765提交而不是v3.0.0?毕竟,我没有检查出v3.0.0和:

bootstrap/ $ git tag --contains `git rev-parse HEAD` 
v3.0.0 

我怎样才能找出原因git describe决定v2.3.1是最近可达标签?这里发生了什么?

+0

什么版本的Git?如果这是一个已修复的错误,请确保您使用的是最新版本。 –

+0

'--version'报告'git version 1.7.9.5'。这是Ubuntu 12.04中的最新版本。你认为这可能是一个错误? –

+0

@AndrewMarshall:您的个人资料中包含Sweet Dijkstra代码。我昨天看到了这本书:http://www.amazon.com/What-Computers-Still-Cant-Artificial/dp/0262540673,而且完全没了。没有读过任何一本书,但完全以我认为“男人,有人错过了这一点”的标题来判断。 –

回答