web-dev-qa-db-ja.com

クロスプラットフォームのGit構成のベストプラクティス

環境

複数のマシンと複数のプラットフォーム間で簡単に共有できるように、私のアプリケーションユーザー構成ファイルの多くはgitリポジトリに保存されています。これらの構成ファイルには、.gitconfigには、復帰改行文字を処理するための次の設定が含まれています。

[core]
    autocrlf = true
    safecrlf = false

問題

これらの設定は、あいまいなエラーの原因となるGNU/Linuxプラットフォームにも適用されます。

質問

これらのプラットフォーム固有の構成ファイルの違いを処理するためのいくつかのベストプラクティスは何ですか?

提案されたソリューション

この問題は、プラットフォームごとにブランチを用意し、共通のものをマスターに保持し、マスターが前進するときにプラットフォームのブランチとマージすることで解決できると思います。この問題の簡単解決策があるかどうか疑問に思っていますか?

50
Bas Bossink

私は質問でその種の設定(crlf)を広範囲にわたってレビューしました:
コードでgit設定を配布する.

結論は:

 *。Java + crlf 
 *。txt + crlf 
 ... 
  • マージ、git status、シェル環境、およびsvn importでのこのような変換のさまざまな副作用のため、それを必要としない種類のファイルの変換は行わないでください(「- コードでgit設定を配布する リンクと参照).
  • 可能であれば、crlf変換を完全に回避してください。

今、プラットフォームごとの設定の特定の問題に関して、特にプログラムに関連しないデータ(つまり、これらの設定)では、ブランチが常に適切なツールであるとは限りません開発中のものとは関係なく、VCSのみが開発の履歴を保存します)

質問で述べたように Git:プロジェクトの2つのブランチを維持し、共有データのみをマージするには?

システムに依存するコードを別のディレクトリに配置し、ビルドシステム(Makefilesまたは使用するもの)のクロスプラットフォームの依存関係を処理すると、作業が大幅に簡素化されます。

この場合、ブランチはシステム依存のコードに使用できますが、適切な.gitattributesファイルをビルドして、リポジトリに応じて適切な設定を適用できるスクリプトを使用して、サポートツールのシステム依存の設定用のディレクトリをお勧めします展開プラットフォーム。

32
VonC

決してautocrlfをオンにしないでください。頭痛と悲しみだけを引き起こします。

ウィンドウで\r\nを使用する言い訳はありません。まともなエディタはすべて(定義により)\nを処理できます。

53
hasen