50

インデントと構文を尊重するように git diff を構成することは可能ですか? インデントとスペースを無視することについて話しているのではなく、古い行と新しい行を一致させるために、空白行、インデント レベル、および場合によっては括弧を使用することです。

例えば ​​git diff はしばしば次のように関数とその docblock をカットします:

 class C {

   /**
+   * Goes to the bar.
+   */
+  function bar() {
+    return 'bar';
+  }
+
+  /**
    * Gets your foo up to date.
    */
   function foo() {

私が好むとき

 class C {
+
+  /**
+   * Goes to the bar.
+   */
+  function bar() {
+    return 'bar';
+  }

   /**
    * Gets your foo up to date.
    */
   function foo() {

この例ではまだまったく害はありませんが、関数とその docblock が貪欲で単純な diff 実装のために実際に引き裂かれている例があります。

注: で構成済み*.php diff=phpです~/.gitattributes

編集: 別の例: ここで git diff はプロパティ docblock とメソッド docblock を混合します:

   /**
-   * @var int
+   * @param string $str
    */
4

2 に答える 2

5

git だけでそれを行う方法はわかりませんが、SemanticMergeと呼ばれる、その種の問題に対処する商用ツール (つまり、お金がかかる) が少なくとも 1 つあります。

非常に多くのクールなケースを処理でき、C#、Java、および部分的に C をサポートします。Git をマージ ツールとして使用するように構成できます。

(私は関係者ではありません。)

于 2014-07-11T11:44:24.377 に答える