特定のメソッドまたは機能への変更を表示できるバージョン管理システムはありますか?[閉まっている]


11

次のようなことを言うことができると便利な場合があります。

(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main

最後のコミット以降にソースファイル内の特定の関数に加えられた変更、または変更の完全な履歴を確認します。私の質問は2つあります。

  1. これを行う何かがありますか?
  2. そのようなツールは実用的でしょうか?関数の異なるバージョンを比較するには、各リビジョンでコードの簡単な解析を行う必要があります。オーバーヘッドが大きすぎて効率的ではないでしょうか?

7
これが必要なのは、メソッドが大きすぎる、クラスが適切に編成されていないなど、根本的な問題の兆候であると思われます。クラスが大きすぎない場合は、問題のメソッドに移動(または検索)し、クラス全体のコンテキスト内でメソッドのコードを確認します。要するに、メソッド解決はあまりにも具体的だと思います。
ロバートハーベイ

@Robertが良い点であり、不思議に思う動機は、少なくとも少しコードが肥大化したことが原因だと思います。特定のメソッドのバグをトレースし、そのメソッドの変更ログを参照して、どこで壊れたのかを確認したいと思います。急いでいる場合、完全な差分を検索するのは少し不便です:)
jches

4
これが役立つ非常にまれなケースでは、TortoiseXXXのBlame機能は非常に強力です。メソッドのすべての行に最後の変更がいつ加えられたかを確認でき、右マージンを使用して、それらの変更をステップバックし続けます。
pdr

回答:


14
  1. 私の知る限り、そうではありません。あるかもしれませんが、もしそうなら、私はそれが生産品質であるとは期待しません。
  2. 私はそれが実用的ではないと思いますが、あなたがリストした理由のためではありません。VCSは、この種の機能をサポートするために言語を認識する必要があるため、実用的ではありません。基本的に、言語テキストを解析するために何かを埋め込む必要があります(コンパイラが行う大きなステップの1つ)。これにより、すでにかなり複雑な作業を行っているVCSに多くの余分な重量が追加されます。
    しかし、もっと重要なのは、サポートしたいすべての言語で同じことをする必要があるということです。セールスポイントがCコードでのみ機能するVCSは、大きな牽引力を得られません。あいまいな言語をすべて無視しても、上位10の言語をサポートするのは大仕事です。

また、ロバートが指摘したように、すぐにメソッドにジャンプできるということは、diffツール内でメソッドに手動でジャンプしなければならないという大きな利点ではありません。


4
私は、第二言語依存の点と冗長コードの多くを有する
のChander Shivdasani

1
ただし、エディターを強調するコードに対しても同じ議論をすることができます。言語に対応している必要があり、実際に存在します。たぶん、ペイオフはもう少し高いかもしれません(codezのカラフルな画面!)。解析がおそらく最も難しい部分であることに同意します。ただし、特にプログラムを完全に解析する必要がないため、最も一般的な言語をサポートすることはそれほど難しくありません。
jches

8

svnは実際には、あなたが望むものに近い何かをします。

次のコマンドを使用できます。

svn diff -x -p program.c 

-x -p 変更セットの上に「C」関数名を提供します。これは次のようになります。

@@ -97,6 +102,8 @@ int function1(int *x)

フィルター処理は行われませんが、grep / searchを使用して目的を厳密に果たすことができます。

これは 'C'(またはC / C ++)専用です。ただし、svnが他の言語でも同様に利用できるようにする必要がある場合は、推測します。

私は、VCSがそれをしてはいけないという議論にはまったく同意しません。結局のところ、すべてのIDEまたはエディター(VIM、EMACSなど)で、各言語に固有の構文強調表示を行い、同時に多くをサポートすることが望まれます。したがって、VCSは開発者ツールであり、このような機能もサポートする必要があります。

もちろん、私がそれを発見したというあなたの質問のおかげです。私はそれを使用したことがありませんでした。




-1

ファイルの各行を最後に変更したリビジョンと作成者を表示するには:

git blame filename

1
確かに、Qはファイル内の特定のメソッドへの変更を検索する方法を要求します。特定のファイルには100個のリビジョンがあり、そのうちの特定の機能への変更を含むリビジョンを見つける必要があると想像してください。
カレブ

バージョン管理は構文の詳細を知らず、ファイルの種類も気にしません。
ギタ

-1

ENVYStOREの両方がそれを行います。上記のLogan Capaldoが述べたMonicelloのように、これらもSmalltalk向けであるのは興味深いことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.