10

私は、複数の IDE を使用しているユーザーと異なるコード スタイル設定を使用して、git をソースとし、maven で管理された Java プロジェクトで共同作業を行っています (注 1)。

style-1を使用してコードを表示および編集できるが、 style-2を使用して SCM にコミットできるツールまたは IDE 構成はありますか?

私の調査では「いいえ」と指摘されていますが、git フックCheckstyle / jrefactoryを組み合わせたソリューションは可能かもしれません。

上記に「いいえ」の場合、以下のTBD プロセスアクションを実行するツール/プロセスはありますか?

User1 のチェックアウト プロセス フローは次のようになります。

  1. git pull
  2. TBD プロセスはコードを User1 style-1にフォーマットします
  3. User1 は、好みの IDE でスタイル 1設定を使用して作業します

User1 のコミット ワークフローは次のようになります。

  1. User1 はコードをコミット/プッシュする準備ができています
  2. TBD プロセスはコードを標準フォーマットstyle-standardにフォーマットします
  3. git push

注 1: 複数の IDE = Eclipse、IntelliJ、Netbeans。

注 2: 私の質問は、IDE 関連のソリューションに焦点を当てたいという点で、この質問とは異なります。これは、少数の標準に準拠していないユーザーを強制することがおそらくより効率的なソリューションであるためです。

注 3: ベスト プラクティスの理由から、これを行うべきではないことを認めます。ただし、IDE と SCM にさらなる柔軟性を期待するときが来たと認めた場合、この質問はそれらのソリューションを調査することを目的としています。

4

2 に答える 2

12

まず、絶対にやってはいけません。コードスタイル戦争はどのプロジェクトにとっても悪いことであり、誰もが使用しなければならない1 つのコードスタイルを決定するのが最善です。ファイルを保存するたびに指定されたコードスタイルを自動的に適用するように IDE を構成するのは簡単です。そのため、開発者は自分でターゲット コードスタイルにコードを記述する必要はなく、IDE に任せることができます。確かに、これは彼らがまだ気に入らないコードスタイルでコードを読まなければならないという事実を解決するものではありませんが、目に見えない自動コード変更よりははるかに安全です。それがバグの主な原因です。

コマンド ラインから Eclipse のコード フォーマッタを使用して、別のコード スタイルを適用することもできます。git フックをセットアップし、全員が Eclipse を使用できるようにし、好みのコードスタイルに適切な構成ファイルを提供する必要があります。チェックアウト後とコミット前の両方にフックが必要です。1 つはユーザーのコードスタイルをセットアップするためのもので、もう 1 つは中央のコードスタイルでコミットするためのものです。さらに一歩進むには、インデックスを操作してフォーマットされたコードを追加し、スタイルの違いが含まれないようにすることができますgit diff(ただし、 には表示されgit diff --stagedます)。

繰り返しますが、そうすべきではありません

于 2013-05-24T01:21:37.963 に答える
7

これはあまり良い考えではないという点で、私はセルジュ・ドミトリウに同意します。それでも、git はまさにあなたが探しているものを提供します。ただし、これは、中心となるコーディング スタイルが明確に定義され、厳密に守られている場合にのみ機能します。仕組みは次のとおりです。

Git はsmudge/clean フィルターを提供します。これらを使用すると、チェックアウト時にすべてのコードをいわゆる「スマッジ」フィルターに通し、コードがステージング領域に追加されたときに「クリーン」フィルターでそれを逆にすることができます。これらのフィルタは で設定され.gitattributes、そのファイルのリポジトリ ローカル バージョンが で利用可能です.git/info/attributes。そのため、チェックアウト時にコードを個人的なコーディング スタイルに変更するツールに汚れフィルターを設定します。

汚れフィルター

そして、クリーン フィルターは、チェックイン時にコードを中央のコーディング スタイルに変換します (より正確には、ファイルがステージングされたとき)。

きれいなフィルター

これは非常に重要です。これはsmudge -> cleanノーオペレーションであり、元のファイルを再度生成します。そうしないと、ファイルを変更するたびにフォーマットの変更をチェックインすることになります。

smudge および clean フィルターを使用すると、git のすべての機能 (などを含むgit diff) が保持されます。完全なドキュメントは次の場所にあります。git help attributes

于 2013-05-24T09:09:37.543 に答える