簡體   English   中英

如何告訴git-svn文件不是二進制文件

[英]How to tell git-svn that files are NOT binary

我正在使用git-svn將大型SVN存儲庫(約28k提交)轉換為Git。 當該過程完成時(〜1 1/2周),我遇到了一些.ps1-文件,它們在diff中被視為二進制文件。 我已經在master上提交了一個.gitignore文件(當然是在轉換之后),該文件告訴git將文件視為文本:

* -text
*.snk binary
*.ico binary
*.chm binary
and so on...

注意:-text只是告訴它按原樣對待行尾(不將其與Unix行尾一起存儲在其數據庫中)

但是,我當然只能在轉換后添加.gitattributes。

.gitattributes在以前的提交/差異的Git擴展中不太適用,但這可能是我現在不想討論的另一個問題。 主要問題是在git中二進制存儲的文件。

我讀過某個地方,您可以在.git / INFO下存儲一個gitattributes。 我可以在轉換過程之前執行此操作,但是由於轉換需要花費一個多星期的時間,因此我沒有再嘗試過,我希望在第一次執行時就正確解決。

因此,基本上我的問題現在是:考慮轉換后的存儲庫:我可以將現有git存儲庫中的現有二進制文件轉換為文本文件嗎?

如果不是:我如何在整個轉換過程中使用gitattributes告訴git-svn將哪些文件視為文本/二進制文件?

編輯:問題不是轉換中的任何內容(git故意將文件視為二進制),而是通過'git diff'或Git擴展名將文件視為二進制。 (請參閱答案)使用差異工具(例如BeyondCompare)時,您仍然可以使用這些文件。 這在歷史上只是一點點煩人。 由於文件是按原樣遷移的,因此轉換工作正常。 (即UTF-16)

binary屬性“ macro”是-diff -merge -text的簡寫(請參閱gitattributes docs )。

與影響存儲庫和工作副本版本之間文件行尾轉換的text屬性相反, diffmerge屬性不影響Git存儲文件的方式。 后兩個屬性僅影響Git 解釋文件內容的方式(例如,Git如何為文件創建差異/補丁)。

如果你沒有明確.ps1 binary ,或者.ps1 -diff.gitattributes ,為什么原因git diff解釋您.ps1文件,二進制文件,可能是因為他們的編碼。 請注意,例如,Git不支持UTF-16 / UCS-2。

在這種情況下,您可以創建一個自定義的“差異驅動程序”,將文件轉換為UTF-8(如本答案中所建議)。

或者,由於Windows PowerShell也可以處理UTF-8腳本文件,因此您可以將所有.ps1文件轉換為UTF-8。 (如果要轉換現有/遷移的提交中的文件,則可以使用git-filter-branch 。)

暫無
暫無

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

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