2016-09-15 260 views
0

我用下面的命令與一個名爲「標籤」標籤來標記我的頭承諾:標籤一個git用「標籤」標籤

git tag -a tag -m "comment on my tag" 

當我

git push origin tag 

我得到不過,一個錯誤:

fatal: tag shorthand without < tag >

我沒有得到相同的錯誤標記與不同的名稱。我想git把這個​​「標籤」當作它的子命令。也許這不是一個經常使用的情況......但是可以將「標籤」推送到遠程回購?我不想推我的其他標籤

git push --tags 

雖然!

+3

如果你混帳推的文檔中查找(即做'混帳推--help'。並搜索標籤)。你會看到'git push'有一個特定的關鍵字,你可以用它明確指定你可以用來推送標籤。這個關鍵字就是'tag'(驚喜!)。所以,理論上你可以做'git push tag tag',第一個'tag'是關鍵字,第二個'tag'是標籤名。但是,我同意下面的答案:命名標籤'tag'是不可取的。 – Alderath

+0

我只嘗試過「git push -tag tag」和「git push --tag tag」。 謝謝! :) – forestgril

回答

1

如果你看看git的代碼(下面的鏈接),我們可以看到,它正在檢查關鍵字標籤期間。

https://github.com/tnachen/git/blob/master/builtin/push.c

答案很簡單:給標籤一個有意義的名稱,不使用git關鍵字

static void set_refspecs(const char **refs, int nr) 
{ 
    int i; 
    for (i = 0; i < nr; i++) { 
     const char *ref = refs[i]; 
     if (!strcmp("tag", ref)) { 
      char *tag; 
      int len; 
      if (nr <= ++i) 
       die("tag shorthand without <tag>"); 
      len = strlen(refs[i]) + 11; 
      if (deleterefs) { 
       tag = xmalloc(len+1); 
       strcpy(tag, ":refs/tags/"); 
      } else { 
       tag = xmalloc(len); 
       strcpy(tag, "refs/tags/"); 
      } 
      strcat(tag, refs[i]); 
      ref = tag; 
     } else if (deleterefs && !strchr(ref, ':')) { 
      char *delref; 
      int len = strlen(ref)+1; 
      delref = xmalloc(len+1); 
      strcpy(delref, ":"); 
      strcat(delref, ref); 
      ref = delref; 
     } else if (deleterefs) 
      die("--delete only accepts plain target ref names"); 
     add_refspec(ref); 
    } 
}