git などで diff を表示するときに、「何行目のどのあたりに差分があるのか」というのを示す行があります。 これ、hunk header と呼ばれるものなんですが、git だとここに、「どのメソッドに属する差分なのか」「どのタグに属する差分なのか」といった情報を付与することができます。
例えば、デフォルトのまま java ファイルを diff にかけると、クラス名が表示されますが、
@@ -125,6 +125,7 @@ public final class Main {
ちょっと設定を変えると、メソッド名の粒度に変更できたりします。Github でもこんなかんじですね。
@@ -125,6 +125,7 @@ private static void startStubby4jUsingCommandLineArgs() {
実現方法としては、git の attribute の使用。
プロジェクト関係なくこれを実現したい場合、git のデフォルトの attributes 用設定ファイルである $HOME/.config/git/attributes
に設定を書けばよいです。
プロジェクト固有の設定については、$GIT_DIR/info/attributes
ファイルに記述することになります。
もしこの場所を変更したいときは、.gitconfig
の core.attributesfile
で設定ですね。
文法は普通の attribute の設定と同じなので、java なら
*.java diff=java
とするだけで、拡張子が .java
のファイルに対する差分の hunk header にメソッド名が表示されるようになります。
diff --git a/main/java/io/github/azagniotov/stubby4j/Main.java b/main/java/io/github/azagniotov/stubby4j/Main.java index ee7707c..5c6dec3 100644 --- a/main/java/io/github/azagniotov/stubby4j/Main.java +++ b/main/java/io/github/azagniotov/stubby4j/Main.java @@ -125,6 +125,7 @@ private static void startStubby4jUsingCommandLineArgs() { ANSITerminal.status(String.format(BR + "stubby4j successfully started after %s milliseconds", (totalEnd - initialStart)) + BR); + stubbyManager.statuses().forEach(ANSITerminal::status); ANSITerminal.info(BR + "Quit: ctrl-c" + BR); @@ -136,4 +137,4 @@ private static void startStubby4jUsingCommandLineArgs() { throw new Stubby4JException(msg, ex); } } -} \ No newline at end of file +}
いくつかの言語用に git が最初からこの attribute を用意してくれていて、
- C/C++:
diff=cpp
- CSS:
diff=css
- HTML:
diff=html
- Perl:
diff=perl
- PHP:
diff=php
- Python:
diff=python
- Ruby:
diff=ruby
などが代表的かと思います。 ちなみに、HTML ってどうなるんだろうって思ったら、タグ名が表示される感じでした。
--- a/b.htm +++ b/b.htm @@ -35,7 +35,7 @@ <h1 class="header-logo">