Git属性
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLabは、リポジトリのルートディレクトリにある.gitattributesファイルでカスタムGit属性の定義をサポートします。.gitattributesファイルを使用して、ファイル処理と表示に対する変更を宣言します。以下はその例です:
- 差分内の生成されたファイルを折りたたむ。
- カスタムマージドライバーを作成します。
- 排他的なロックファイルを作成して、ファイルを読み取り専用としてマークします。
- 差分内の構文ハイライトを変更します。
- バイナリファイルの処理をGit LFSで宣言します。
- リポジトリで使用されている言語を宣言します。
エンコード要件
.gitattributesファイルはUTF-8でエンコードされている必要があり、バイトオーダーマークを含んでいてはいけません。異なるエンコードが使用されている場合、ファイルの内容は無視されます。
混在するファイルエンコードのサポート
GitLabはファイルのエンコードを自動的に検出しますが、検出器が異なるタイプ(ISO-8859-1など)に確信がない限り、デフォルトでUTF-8になります。不正確なエンコード検出は、UTF-8以外のエンコードのアクセント付き文字のように、テキストに一部の文字が表示されない原因となる可能性があります。
Gitには、この不測の事態を処理するための組み込みサポートがあり、指定されたエンコードとUTF-8の間でリポジトリ自体のファイルを自動的に変換します。.gitattributesファイルで、working-tree-encoding属性を使用して混在するファイルエンコードのサポートを設定します。
例:
*.xhtml text working-tree-encoding=ISO-8859-1この設定例では、Gitはリポジトリ内のすべての.xhtmlファイルをISO-8859-1エンコードでローカルツリーに保持しますが、リポジトリへのコミット時にはUTF-8との間で変換します。GitLabは正しくエンコードされたUTF-8のみを認識するため、ファイルを正確にレンダリングします。
この設定を既存のリポジトリに適用する場合、ローカルコピーには正しいエンコードがあるがリポジトリにはない場合、ファイルを更新して再コミットする必要がある場合があります。これは、git add --renormalize .を実行することでリポジトリ全体に対して実行できます。
詳細については、working-tree-encodingを参照してください。
構文ハイライト
.gitattributesファイルは、ファイルと差分の構文ハイライトに使用する言語を定義するために使用できます。詳細については、構文ハイライトを参照してください。
カスタムマージドライバー
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed、GitLab Dedicated
GitLab Self-Managedの管理者は、GitLab設定ファイルでカスタムマージドライバーを定義し、そのカスタムマージドライバーをGit .gitattributesファイルで使用できます。カスタムマージドライバーはGitLab.comではサポートされていません。
カスタムマージドライバーは、競合解決を高度に制御できるGit機能です。カスタムマージドライバーは、非自明なマージコンフリクトの場合にのみ実行されます。そのため、一部のファイルがマージされるのを防ぐ信頼できる方法ではありません。
カスタムマージドライバーを設定する
次の例は、GitLabでカスタムマージドライバーを定義して使用する方法を示しています。
カスタムマージドライバーの設定方法は、インストールタイプによって異なります。
/etc/gitlab/gitlab.rbを編集します。次のような設定を追加します:
gitaly['configuration'] = { # ... git: { # ... config: [ # ... { key: "merge.foo.driver", value: "true" }, ], }, }
gitaly.tomlを編集します。次のような設定を追加します:
[[git.config]] key = "merge.foo.driver" value = "true"
この例では、マージ中にGitはdriverの値を実行するコマンドとして使用します。この例ではtrueを引数なしで使用しているため、常にゼロ以外のリターンコードを返します。これは、.gitattributesで指定されたファイルに対しては、マージは何も実行しないことを意味します。
独自のマージドライバーを使用するには、driverの値を実行可能ファイルにポイントするように置き換えます。このコマンドがどのように実行されるかの詳細については、カスタムマージドライバーに関するGitドキュメントを参照してください。
カスタムマージドライバーが適用されるファイルを.gitattributesを使用して設定する
.gitattributesファイルで、カスタムマージドライバーで使用したいファイルのパスを設定できます。例:
config/* merge=fooこの場合、config/フォルダーの下にあるすべてのファイルは、GitLab設定で定義されたfooという名前のカスタムマージドライバーを使用します。
リソース
- Git属性に関する公式Gitドキュメント