簡體   English   中英

如何使“git branch”尊重Linux上的“core.ignorecase”標志?

[英]How to make “git branch” respect the “core.ignorecase” flag on Linux?

我們正在使用位於辦公室Linux服務器上的遠程Git存儲庫。 所有客戶端都是安裝了Git Extensions作為客戶端的Windows PC(使用msysgit運行)。

在客戶端系統上,如果我嘗試執行以下操作:

git branch Branch1
git branch branch1

第二個命令將失敗,告訴我已經存在具有該名稱的分支。 這就是我的期望,因為我在git config中將core.ignorecase設置為true。

但是,如果我直接登錄Linux系統並運行相同的命令,即使core.ignorecase標志設置為true,也會創建兩個分支。

我原本期望第二個命令也會失敗,因為我將存儲庫配置為忽略大小寫,但是標志在Linux系統上什么都不做,或者我錯過了什么。

任何人都可以幫助我理解這個問題,因為我們計划很快將我們的SCM從Source Safe遷移到Git,這個問題讓我們感到害怕。 如果兩個開發人員創建具有相同名稱但不同情況的分支,並將結果推送到Linux存儲庫,會發生什么?

我想在@ meagar的答案中添加更多細節:

FAT32 / NTFS是保留大小寫的文件系統。 也就是說,如果你將文件命名為“Foo.txt”,它將被存儲為“”Foo.txt“。如果你將文件保存為”foo.txt“,它將被保存為”foo.txt“。但是由於它不區分大小寫,“Foo.txt”和“foo.txt”實際上是相同的,並且您不能在同一目錄中同時擁有這兩個文件。

在Windows的存儲庫中,如果將名稱從“Foo.txt”更改為“foo.txt”,並且如果您不將git顯示為更改,則可以將core.ignorecase配置設置為true,git不會把它視為一種變化。 如果你把它設置為假它會。 (但由於文件系統和git的性質,它似乎添加了一個新文件foo.txt,增加了Windows上的混亂)。

這就是core.ignorecase的目的

來到分公司。 分支只是提交的指針。 這些指針只是文件。 這些文件存儲在.git/refs/heads 當您創建分支(例如bar ,會創建名為.git/refs/head/bar的文件。 現在,在Linux中,當您創建名為Bar的分支時,它可以繼續創建文件.git/refs/head/Bar ,從而允許創建分支。 但是在Windows上,你不能創建.git/refs/head/Bar ,因此當bar存在時你將無法創建Bar分支。 意識到core.ignorecase與存儲庫中的文件 - 您的代碼庫 - 有關,並且對git的元數據文件沒有影響。

所以你必須忍受並適應這樣一個事實:在Linux中,你可以創建具有相同名稱的分支,大小寫不同,但在Windows中,你不能。

如何使“git branch”尊重Linux上的“core.ignorecase”標志?

你不能,因為國旗沒有你認為它做的。

core.ignorecase

如果為true,則此選項啟用各種變通方法,以使git能夠更好地處理不區分大小寫的文件系統,如FAT。

core.ignorecase與您描述的行為無關,它與分支名稱的區分大小寫無關。 Git無法區分Windows上的Branch1branch1core.ignorecase是否設置無關, core.ignorecase都會以相同的方式運行。

...但是在Linux系統上標志什么都不做,或者我錯過了什么。

你沒有錯過任何東西。 該標志在Linux系統上沒有任何作用。 core.ignorecase不是為了使操作系統不區分大小寫,而是為了允許Git在破壞不區分大小寫的操作系統上工作。 Linux從根本上區分大小寫,Git也是如此。 您應該嘗試使用它,並強制您的開發人員使用小寫作為其分支名稱。 應該試圖讓Git模仿來自其他操作系統的破壞行為。

如果兩個開發人員創建具有相同名稱但不同情況的分支,並將結果推送到Linux存儲庫,會發生什么?

然后你會有兩個完全不同的分支,一個是小寫的,另一個是錯誤的命名 ,有人會被迫合並並丟棄他們錯誤的分支。 這是你常常會做的事情,作為使用Git的副作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM