web-dev-qa-db-ja.com

GITにコミットする前のコードフォーマット

私の理解によると、2人の開発者が同じプロジェクトで作業しているが、異なるコーディングスタイルを使用している場合、コミットされたソースを統一するための組み込みの方法はGITにありません。私が間違っていたら訂正してください。

すべての開発者に同じスタイルでコードをフォーマットするように依頼する必要がありますか?

同じスタイルに従ってコードをフォーマットするようにGITに依頼できますか? BitBucketで自動コードフォーマットを実現することは可能ですか?

10
vico

すべての開発者に同じスタイルでコードをフォーマットするように依頼する必要がありますか?

はい、それは良い考えです。

プロジェクトには通常、これが問題になる可能性を減らすためのコーディングスタイルのガイドラインがあります。これらは、非常に緩いものから非常に厳しいものまでさまざまです。ガイドラインには、レイアウトとフォーマットが含まれますが、これらに限定されません。

私が一緒に仕事をしたほとんどの開発者は、たとえそれが彼らの個人的なスタイルでなくても、手元にあるプロジェクトのスタイルを採用することに非常に満足しています。これはより大きな利益のためです。読みやすさを向上させ、「フォーマットの修正」が実際の変更と混ざり合う可能性を減らします。スタイルガイドラインが指定されていないコードを編集している場合は、可能な限り既存のスタイルに準拠するように努めます。

開発者ができる最悪のことは、コミットする前に、独自のレイアウトルールを使用して自動フォーマッタを介してソースファイル全体を実行することです。これにより、実際には行っていた作業に関係のない場所で大幅な変更が発生する可能性があり、複数のブランチで作業している場合は常に、痛みを伴うマージの競合が発生する可能性があります。

同じスタイルに従ってコードをフォーマットするようにGITに依頼できますか? BitBucketで自動コードフォーマットを実現することは可能ですか?

私はあなたがそれをしたいと思う理由に挑戦することによってこれに答えるつもりです。自動フォーマットを実行したり、「誤った」スタイルに基づいてコミットを拒否したりするコミットフックがあることに注意してください。

これがコードレビューの目的であり、人間がそれをよりよく行うコードには常に例外があります(たとえば、C++の土地では、clang-formatはほとんど素晴らしい仕事をしますが、重要な初期化子リストに関係するほとんどすべてを吸います)。マシンの解釈を受け入れるように全員に強制することは、邪魔になる可能性があります。

5
paddy

各開発者のマシンにpre-commit - hook をインストールし、ソースコードがチームの標準と一致しない場合に開発者がコミットできないように、選択したリンターを実行できます。

欠点は、フックをローカルにインストールしないだけで、開発者がこのメカニズムを巧みに利用できることです。

したがって、さらにリンターはビルドプロセスの一部として実行し、コードが適切にフォーマットされていない場合はビルドを失敗させる必要があります。

2
Gernot

私の知る限り、BitBucketはこれを備えていません。

しかし、迅速な交換を提供するために、共通のスタイルを見つけることは良い考えだと思います。

このため、可能であれば、統合されたフォーマット機能でIDEを使用し、設定を共有すると便利な場合があります。サポートされている言語はたくさんあるので、Eclipseが良い解決策になると思います。

私のチームの場合、自動フォーマットによってネイティブにサポートされているため、MS VisualStudioとAllmannスタイルを使用しています。

1
pguetschow