私は最近、大規模なコードベースでリファクタリングを行い、一般的にデザインを改善してカバレッジを向上させました。また、かなりのファイルでは、文を使って余分を取り除いています。同様の機能が近くにあり、領域を追加するようにメソッドを移動しましたが、ファイル内のコードの機能は実際には変更されませんでした。コードを理解するソース管理用のマージツールはありますか?
一方、チームの他の開発者はバグを修正したり、コードの行を変更したりしています。明らかに、マージするときには、行番号が一致しなくなりメソッドが移動した可能性があるため、これが問題になります。
ここで、ソース管理環境では、メソッドを移動することは危険なことになる可能性があり、そのメリットがコストを上回ると判断しました。しかし、私が理解できないのは、なぜこのようにすべきなのかということです。
public class Calculator
{
public int Subtract(int a, int b)
{
return a + b;
}
public int Add(int a, int b)
{
return a + b;
}
}
そして私は、私は方法がアルファベット順になりたかったことを決めた:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Subtract(int a, int b)
{
return a + b;
}
}
別の開発者は、減算方式のバグを修正しながら
は私の最初のファイルは、単純な計算だったと言います
public class Calculator
{
public int Subtract(int a, int b)
{
return a - b;
}
public int Add(int a, int b)
{
return a + b;
}
}
標準のマージツールでは、おそらく手動で2つのファイルがありますが、コードの機能を理解していれば、これらの2つの変更を簡単に調整できます。他のメソッド、コメント、地域、またはステートメントを削除または追加する場合も同様です。
(最終的に!)質問に:コードの機能性をインテリジェントに理解し、上の2つのファイルを人間の介入なしでマージできるマージツールがありますか?そうでない場合は、どうしてですか?この問題を解決できない問題はありますか(もちろん、それは私が暗示しているほど簡単ではないことを理解していますが、見えない何らかの理由で不可能です)。
私はC#を私のソースコードとそれに働いていた何かを愛するだろうが、私は、これはプログラミングの世界のどこに存在するかどうかに興味がある...
は、私はすでにこの質問の長さについて本当に心配、インテリジェントソースシステムがどのように機能するのかを追加するために編集しました。
システムで最初の計算機ファイルがチェックされたとき、p私は私のコードをチェックインすると(アルファベットメソッドを作る)
それが更新されます(...括弧などのためにそこに余分な線で)
File: Calculator.cs
|
|--Class[0]: Calculator
|
|--Method[0]: Subtract
|
|--Line[0]: return a + b;
|
|--Method[1]: Add
|
|--Line[0]: return a +b;
:ファイルをお尻とクラスの階層を作成SubtractはMethod [1]に、AddはMethod [0]になります。
2番目の開発者はコードをチェックします(明らかにソース管理システムが元のものを基にしていたことがわかります)。今では、全体のファイルで行番号ごとに行番号を見つけるのではなく、Calculator.cs/Calculator/Subtract/0とメソッドが場所を変更したという事実は分かりますが、それでも問題はありません。マージ作業。
"自動"調整の結果はどうなりますか?この問題は、プログラマーの意図を理解するほど言語を理解することではなく、テレパシーを必要とします。 –
私は、コードの機能を理解し、それをレイアウトから分離するシステムは、最初の変更が純粋にレイアウトなので、ファイルのレイアウトに適用し、2番目の変更は純粋に関数なので、機能的な変更が行われた方法に、その方法が今あることがあります。 –
私の疑惑は、そのような獣は存在しないということですが、私はいくつかの答えを見たいと思っています。私はそのようなシステムがAIに接してスカイネットVCSにつながると感じています。 ;) –