2017-03-29 128 views
2

所以我注意到,因爲git根據文件系統中的分支名稱命名文件夾(在refs文件夾中,特別是遙控器),這可能會導致問題,因爲文件夾名稱中允許的字符取決於操作系統。Git分支名稱取決於操作系統?

例如,您可以在Mac OS創建一個分支,如:

feature/my_special_"Splash Screen"_feature 

如果我取這個在Windows上,它會失敗,這樣的消息:

Fetch failed: fatal: Unable to create 'C:/AndroidStudioProjects/MyProject/.git/refs/remotes/origin/feature/my_special_"Splash Screen"_feature.lock': Invalid argument 

由於文件名中包含這是在Windows上不允許的,而在MAC OS上允許的。

當你嘗試在windows上創建相同的分支時,git將簡單地移除aposthropes。

有沒有人知道這方面的官方文檔?另外,我們是否需要重新命名這個分支或者是否有解決方法?

+0

或者只是採用該分支的名稱可能只包含字母數字+「/」的方針和你所有的設置。您甚至可以使用自動檢查來防止人們將違反此政策的分支推送到中央存儲庫。 – larsks

+0

另一個問題是案例摺疊。 Git中正在進行的工作是停止使用基於文件系統的文件來存儲這些內容,事實上,分支名稱通常存儲在平面文件'.git/packed-refs'中,其中既不區分大小寫也不限制OS限制在文件名上是一個問題。儘管如此,@larsks說。 :-)如果您開始使用Unicode文件名(考慮將代碼與預先組合在一起),則工作樹內的文件名具有相同的問題,只會更糟。 (另外'''不是一個撇號,它是一個雙引號。) – torek

回答

3

一個非官方政策是 「Legal Git branch names」 中提到,引用this thread

一次Git分支名稱不能 「」

  • 有開頭的路徑組件
  • 擁有雙點 「..」
  • 有一個ASCII控制字符, 「〜」, 「^」, 「:」 或SP,隨時隨地
  • 最終以 「/」
  • 結束與「 .lock」
  • 包含一個 「\」(反斜線)

That patch (for a better error message on invalid branch name) was not implemented,它不包括當時的雙引號。

但是,在分支名稱中避免任何特殊字符是一個好主意。

This comment in refs.c最爲接近的官方政策:

/* 
* Try to read one refname component from the front of refname. 
* Return the length of the component found, or -1 if the component is 
* not legal. It is legal if it is something reasonable to have under 
* ".git/refs/"; We do not like it if: 
* 
* - any path component of it begins with ".", or 
* - it has double dots "..", or 
* - it has ASCII control characters, or 
* - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or 
* - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or 
* - it ends with a "/", or 
* - it ends with ".lock", or 
* - it contains a "@{" portion 
*/ 
+0

謝謝,很高興有這個基礎我們自己的政策。 – breakline