2017-08-28 117 views
1

我想表示貢獻用戶的Git分支與~代字符號的符號類似於用於在類UNIX操作系統上引用主文件夾的符號,但Git阻止我這樣做,因爲它會中止帶有錯誤的分支創建消息fatal: '~' is not a valid branch name.從貢獻者的分支名稱應該看起來像~alice/feature/foo~bob/bugfix/bar爲什麼'〜`代字符號不能成爲有效的Git分支名稱的一部分?

無下列命令與2.14.1版本的Git工作:

$ git checkout -b '~' 
fatal: '~' is not a valid branch name. 
$ git checkout -b '~bar' 
fatal: '~bar' is not a valid branch name. 
$ git checkout -b 'foo~' 
fatal: 'foo~' is not a valid branch name. 
$ git checkout -b 'foo~bar' 
fatal: 'foo~bar' is not a valid branch name. 

眼下作爲備用外延我已經決定@a t符號作爲我的目的的通用前綴。但我正在重新考慮將除了-連字號和_以外的其他分支名稱作爲單詞分隔符的決定,因爲Git本身或底層文件系統可能會施加一個Git存儲庫可能會施加的限制例如檢出並存儲。

+0

重複的問題鏈接需要再次審查。 git中的分支名稱實際上是一個文件夾。 〜表示unix系統中的主目錄。所以,該文件夾已經存在,因此git無法做出這樣的分支。這個問答有一些細節https://stackoverflow.com/questions/2527355/using-the-slash-character-in-git-branch-name/2527452#2527452 – 2017-08-28 17:11:47

+0

@Eyorther'〜'是一個非常合適的目錄名在Linux 。 'mkdir \〜'就像一個魅力。 – YSC

+1

@CodeCaster我投票重新提出了這個問題,因爲:1 /我花了一些努力來回答它提供的重複信息中沒有的信息,2 /這不是一個完美的重複:OP詢問它爲什麼被禁止,不是如果它是禁止。 – YSC

回答

2

The rules for reference names are given in the git check-ref-format manual page。波浪號~,克拉^和結腸:字符是被禁止的,因爲它們是語法項目時解析引用:master~3手段計數回三個第一的父母從提交到master點,例如,和HEAD:path/to/blob文件(BLOB)在當前的提交中。

+0

但是,如果Git對分支名稱中的特殊字符非常嚴格,那麼爲什麼它不禁止'@'* at *符號,因爲'@'是符號引用'HEAD'的縮寫? –

+2

事實上'@'-as-a-whole *是禁止的(規則9)而且@ @也是禁止的(規則8)。由於'this〜that'沒有定義的含義,只有'this〜',規則*可以放寬,以禁止只有'〜'後跟數字(或字符串尾)。然而,Git似乎正朝着另一個方向發展(增加更多的限制),可能是因爲Windows。 – torek

4

一個git參考(標籤或分支)禁止含有因爲該字符被用來指代一個父提交代字號(~):

  • ref~是簡寫ref~1和裝置ref的第一父母;
  • ref~2表示ref的第二個父母;
  • ...

退房保羅Boxley的Git caret and tilde文章中的git語法波浪和尖(^)的角色的快速摘要。

最後,你會發現所有關於參考official documentation中提交的git語法的文檔。

+0

爲什麼downvote? – YSC

+0

我認爲OP不喜歡答案(即使它是正確的)。這可能不是一個很好的理由,因爲我在評論我的答案時注意到它,但它*是(原始)原因。 – torek

相關問題