私のSCMで、インポートやメソッドのシグネチャの変更(変数の名前変更など)などのコンフリクトが発生するたびに、より迷惑なコードを処理できる言語認識のdiff /マージメソッド共有プロジェクトで起こりうる小さな変更。 Unix環境で動作する、よりスムーズに競合を処理するものはありますか?Java対応のマージコマンド
答えて
私は、このようなツールが存在するとすばらしいことに同意しますが、私が認識しているものはありません。各SCMのマージアルゴリズム(git、hg、bzr、svnなど)は、単純なプレーンテキストである最低公倍数で動作するため、何も存在しないと私が信じる理由があります。これらのSCMツールが言語の構文と意味を実際に理解するためには、言語を解析する機能を含める必要があります。これは、SCMがJava、C#、Python、Ruby、Groovy、C、C++などの解析機能を含むためには、あまりにも大きな作業であるように思えますが、これらの言語のそれぞれがバージョン(例えば、Java genericsは1.5まで存在しませんでした)。したがって、SCMには、ソースコードが書かれている言語の言語とバージョンを検出する機能や、設定されている機能を含める必要があります。
言語依存のマージ機能は、サードパーティのマージツール(例えば、.gitconfigのマージ>ツール設定、.hgrcのui>マージ設定)にあります。このツールは、プロジェクト内の任意の.javaファイルがJava 1.6で記述されていることを知り、その後、JDKの解析機能を使用してASTを生成し、その変更がコンテキスト内で有意義であったかどうかを深く分析しますその言語。
はい、それは私が "マージコマンド"を意味するものです。しかし、そのようなことがあるかどうかという疑問はまだあります。 – Marcus
最初の場所での競合を避けるために、インポート順序や書式設定などのためにチームの誰もが同じIDE設定を共有しているかどうかを調べるとよいでしょう。
これは実際に問題を解決するものではありません。たとえば、いくつかのJavaコード "import a; import e;"を考えてみましょう。 "import b;"を追加するとします。あなたは "import c;"を適切なアルファベット順に追加します。マージする時間が来たら、マージ競合が発生します。インポートをアルファベット順に行うことに同意すると、正しいマージが何であるかについてあいまいさはありませんが、ツールはコーディング規約を認識していないためマージ競合を生成します。 – Phil
マージするのが最も一般的でないのは、コードの追加が同じ場所で他のコードの追加と衝突するようです。これには一般的な解決策があるはずです。マージのスタイルは、すべての構文で十分に機能します。 (既定のマージとして、すべての挿入を含むように既定では、マージが特定のブロックまたは範囲で発生します)。 –
私は全く同じものを探しています。 ものがない場合、私は1つになることがあります...ツール・ベンダーは、おそらくこの種のセマンティック言語対応のマージに対処すべきであるマージ:)
今のところ、貧乏人のトリックとして、I時々3つのファイル(を前処理EclipseのCode Cleanup/Organize Imports/Order Membersを通してそれらを供給することによって、標準的なフォームに変換することができます。
これは限られていますが、これはうまくいきます。前回は〜200までの競合の数を2に減らしました。これをスクリプトにまとめ、gitのマージツールにプラグインする予定です。
また、インポートの両側を保持し、進行中のことと実行予定を説明するコメントを追加する、Java自動インポートの競合を自動作成しました: 'organize imports'。
Javaのインポートの競合については、私は、競合するインポートセクション(またはすべてのインポート)を削除して、IDEにそれらを再挿入させることをお勧めします。あなたは明らかに、これが機能するために共通の輸入注文に同意する必要があります。インポートが一意ではない場合があります(例:java.util.Listとjava.awt.List)が、明らかな解決策がないケースはほとんどありません。 * – maaartinus
これは私がやったことです(「スクリプトの自動読み込みでJavaのインポートの競合が発生しました」も参照してください) )。とにかく明確化のおかげで – inger
git rebaseはこの問題を解決していませんか? 任意の変数の名前変更は、関連するコミットで考慮されます。 git rebaseを使用すると、上流のコミットと同期することができます。あなたが頻繁にrebase(毎日ish?)をしている限り、あなたはそんなに愚かな紛争を起こすべきではありません。もしあなたが本当の紛争であり、Javaの文法パーサによって解決できないのであれば。
- 1. ASP.NETデータアクセスチュートリアルのJava対応版
- 2. Java対応&&は評価
- 3. Java対応のエラー、私はXStreamの
- 4. 多言語対応のJavaスイングプログラム
- 5. Javaのjava.util.Arrays.toString(...)メソッドに対応する.NET
- 6. Javaに対応するxsd.exe/XMLSerializer?
- 7. ilasm/ildasmに対応するJavaバイトコード
- 8. RとStataのマージコマンドの比較
- 9. Android対応のUISwitch
- 10. Android対応のjava.awt.Dimension
- 11. iPhone対応の-doCommandBySelector :?
- 12. バイナリ対応のトルネードウェブソケット
- 13. 対応ナビ
- 14. Silverlight対応コーデック
- 15. ネットワーク対応wx.FileDialog
- 16. HTML対応ウェブサイト
- 17. フライウェイ対応データベース
- 18. mediaelement.js対応フォーマット
- 19. オーバーレイネットワーク対応HAProxy
- 20. オンライン対応ウェブテスター
- 21. ネイティブドラッグアンドドロップに対応
- 22. 1252からUnicode .NETへのエンコーディング(Javaでの対応)
- 23. wss:bindingのJava-configの対応部分ですか?
- 24. .NetでのJMSの対応
- 25. モノラル対応ネットワーク/ソケットライブラリ
- 26. AJAX対応WCFサービス
- 27. クロスバージョン対応Androidタブレイアウト
- 28. 対応するタクソノミーノード
- 29. IIS 7対応プロトコル
- 30. iPhone対応JavaScriptストリーミングプレーヤー
良いアイデア。 – Asaph
「低吊りの果物」のケースはとても簡単なので、誰かが私がこの質問を始めようと思っていたに違いないと思います。 – Marcus
http://stackoverflow.com/questions/523307/semantic-diff-utilities – Marcus