2014-01-22 82 views
5

我們遇到序列化項目的問題。我們的用例是使用自己的數據庫在本地工作,並將所有項目與Unicorn同步。然後我們把所有的項目都推送到我們的Git倉庫。本地Git配置設置爲autocrlf=true。這是需要的,因爲我們的項目中有一些前端工程師使用Mac OS X.我們使用Unicorn序列化完整的「核心」數據庫(如安裝後的默認配置)。Sitecore序列化項目與Git autocrlf

看來,核心數據庫中的一些項目是使用非Windows系統創建的。如果我們查看項目/sitecore/system/Dictionary/O/One or more items have been changed Do you want to overwrite these changes:當我序列化該項目並查看它時,我看到Key字段包含多行,並且換行符標記爲「\n」,並且content-length77(請參閱附加的截屏Notepad ++,左側)。在此之後,我將這個文件推送到Git存儲庫,並從存儲庫中取出另一個工作站上的項目。由於設置爲autocrlf=true,「\n」會自動轉換爲「\r\n」,這會導致content-length79而不是原始的77(請參閱附加屏幕截圖的右側)。當我想反序列化這個項目時,我得到了內容長度不匹配的例外。

enter image description here

有誰有過這樣的錯誤前,你做了什麼,以避免這種情況?我看到選項禁用autocrlf或從序列化同步中排除這些項目。但是我想避免做這些選擇中的一個。

+0

這並不回答你的問題,但我從來沒有理解'autocrlf'的優點。 Win/Lin/Mac的角度似乎是一個弱點,因爲任何中途體面的文本編輯器都可以處理來自其他操作系統的行結尾。 'autocrlf'只會給我造成麻煩。 – Chris

回答

10

您可以從.gitattributes文件控制該行爲。

在我的屬性文件中,.item文件被設置爲二進制文件。

這是我在我們的項目中使用的.gitattributes文件。

* text=auto 

# These files are text and should be normalized (convert crlf => lf) 
*.cs  text diff=csharp 
*.xaml text 
*.csproj text 
*.sln  text 
*.tt  text 
*.ps1  text 
*.cmd  text 
*.msbuild text 
*.md  text 

# TDS files should be treated as binary 
*.item -text 
+0

正是我在找什麼,謝謝。 –

+0

該解決方案也適用於TDS。第一次切換到Git時,我們遇到了很多令人頭痛的問題(w/TDS項目),直到我們瞭解到這個技巧。 –

+0

TDS中的.item文件只是來自標準sitecore項目序列化的文件。 – dunston