2015-06-22 6 views
2

Я конвертирую большой SVN-репо (~ 28k Commits) в Git с помощью git-svn. Когда процесс прошел (~ 1 1/2 недели), я столкнулся с некоторыми .ps1-файлами, которые рассматривались как двоичные в diff. я совершил в .gitignore файл на мастере (после преобразования, конечно), что говорит мерзавцу лечить файлы как текст:Как сказать git-svn, что файлы НЕ являются двоичными

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

Примечания: -Text просто говорит это, чтобы рассматривать окончания строк как (не хранящие их с окончанием строки Unix в своей базе данных)

Однако я смог только добавить .gitattributes ПОСЛЕ конверсии.

. Gitattributes не совсем работает в Git-расширениях для предыдущих коммитов/различий, но это может быть еще одна проблема, которую я не хочу обсуждать прямо сейчас. Основная проблема - файлы, которые хранятся двоично в git.

Я где-то читал, что вы можете хранить gitattributes под .git/INFO. Я мог бы сделать это до процесса преобразования, но я не дал этой другой попытки, так как конверсия занимает больше недели, и я хотел бы получить ее сразу при первом ударе.

Так что в основном мой вопрос в настоящее время: С преобразованным репозиторием: можно ли преобразовать существующие двоичные файлы в существующий репозиторий git в текстовые файлы?

Если нет: Как я могу сообщить git-svn, какие файлы должны обрабатываться как text/binary с использованием gitattributes для всей процедуры преобразования?

EDIT: Проблема не была в преобразовании (git обрабатывает файлы как двоичные), но файлы обрабатываются как двоичные с помощью git diff или Git-extensions. (см. ответ) При использовании инструмента сравнения (например, BeyondCompare) вы все равно можете работать с этими файлами. Это лишь немного раздражает в истории. Преобразование работало безупречно, так как файлы были migratet как есть. (UTF-16, который является)

ответ

3

Атрибут «binary» «макрос» является сокращением для -diff -merge -text (см. gitattributes docs).

В противоположном от text атрибута по влияющим на окончании строки преобразования файлов между репозиторием и версией рабочей копии, то diff и merge -attributes не влиять, как Git хранит файлы. Последние два атрибута влияют только на то, как Git интерпретирует содержимое файла (например, как Git создает diff/patch для файла).

Если у вас нет явного .ps1 binary или .ps1 -diff в вашем .gitattributes, причина, почему git diff интерпретирует .ps1 файлов в бинарном виде, вероятно, из-за их кодирование. Обратите внимание, что Git не поддерживает UTF-16/UCS-2, например.

Если это так, вы можете создать собственный «драйвер diff», который преобразует файлы в UTF-8 (как предлагается в this answer).

Или, поскольку Windows PowerShell также может работать с файлами сценариев UTF-8, вы можете конвертировать все ваши файлы .ps1 в UTF-8. (Если вы хотите конвертировать файлы в существующие/перенесенные коммиты, вы можете использовать git-filter-branch.)

+0

Это была моя проблема.Инструмент в нашей команде был непоследовательным, поэтому в репозитории были некоторые файлы UTF-16. Кодирование можно легко увидеть в Notepad ++ или программно (Powershell) http://poshcode.org/2153 – rominator007

 Смежные вопросы

  • Нет связанных вопросов^_^