2

git-svn を使用して、大規模な SVN リポジトリ (〜 28k コミット) を Git に変換しています。プロセスが完了したとき (~ 1 1/2 週間)、いくつかの .ps1 ファイルが差分でバイナリとして扱われているのに遭遇しました。ファイルをテキストとして扱うように git に指示する .gitignore ファイルをマスターに (もちろん変換後) コミットしました。

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

注: -text は、行末をそのまま扱うように指示するだけです (データベースに Unix の行末とともに保存しません)。

ただし、もちろん、変換後にのみ .gitattributes を追加できました。

.gitattributes は、以前のコミット/差分の Git 拡張機能ではうまく機能しませんが、それは今は議論したくない別の問題かもしれません。主な問題は、git にバイナリーとして保管されているファイルです。

.git/INFO の下に gitattributes を保存できることをどこかで読みました。変換プロセスの前にこれを行うこともできますが、変換には 1 週間以上かかるため、もう一度試していません。最初のストライクで正しく処理したいと考えています。

したがって、基本的に私の質問は次のとおりです。変換されたリポジトリを念頭に置いて、既存の git リポジトリ内の既存のバイナリ ファイルをテキスト ファイルに変換できますか?

そうでない場合: 変換手順全体で gitattributes を使用して、テキスト/バイナリとして扱われるファイルを git-svn にどのように伝えますか?

編集: 問題は変換 (意図的にファイルをバイナリとして扱う git) ではなく、「git diff」または Git 拡張機能によってファイルがバイナリとして扱われることでした。(回答を参照) 差分ツール (BeyondCompare など) を使用する場合でも、これらのファイルを操作できます。その場合、歴史の中で少し面倒です。ファイルがそのまま移行されたため、変換は問題なく機能しました。(つまりUTF-16)

4

1 に答える 1

3

binary属性 "macro" は-diff -merge -text( gitattributes docsを参照)の省略形です。

リポジトリと作業コピー バージョン間のファイルのtext行末変換に影響を与える - 属性とは対照的に、diffおよび -merge属性は Git がファイルを保存する方法には影響しません。後者の 2 つの属性は、Git がファイルの内容を解釈する方法 (たとえば、Git がファイルの差分/パッチを作成する方法) に影響を与えるだけです。

明示的な がない場合.ps1 binary、または.ps1 -diffがファイルをバイナリとして解釈する.gitattributes理由は、おそらくそれらのエンコーディングが原因です。たとえば、Git は UTF-16/UCS-2 をサポートしていないことに注意してください。git diff.ps1

この場合、ファイルを UTF-8 に変換するカスタムの「差分ドライバー」を作成できます (この回答で提案されているように)。

または、Windows PowerShell は UTF-8 スクリプト ファイルにも対応できるため、すべての.ps1ファイルを UTF-8 に変換することもできます。(既存/移行されたコミットのファイルを変換する場合は、 git-filter-branchを使用できます。)

于 2015-06-22T20:57:20.627 に答える