~ubuntu-branches/ubuntu/intrepid/git-core/intrepid-updates

« back to all changes in this revision

Viewing changes to Documentation/git-blame.txt

  • Committer: Package Import Robot
  • Author(s): Gerrit Pape
  • Date: 2007-04-22 13:31:05 UTC
  • mfrom: (1.1.14)
  • Revision ID: package-import@ubuntu.com-20070422133105-tkmhz328g2p0epz1
Tags: 1:1.5.1.2-1
* new upstream point release.
* debian/changelog.upstream: upstream changes taken from mailing list
  announcement.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
SYNOPSIS
9
9
--------
10
10
[verse]
11
 
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
12
 
            [-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
 
11
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [--incremental] [-L n,m]
 
12
            [-S <revs-file>] [-M] [-C] [-C] [--since=<date>]
 
13
            [<rev> | --contents <file>] [--] <file>
13
14
 
14
15
DESCRIPTION
15
16
-----------
24
25
interface briefly mentioned in the following paragraph.
25
26
 
26
27
Apart from supporting file annotation, git also supports searching the
27
 
development history for when a code snippet occured in a change. This makes it
 
28
development history for when a code snippet occurred in a change. This makes it
28
29
possible to track when a code snippet was added to a file, moved or copied
29
30
between files, and eventually deleted or replaced. It works by searching for
30
31
a text string in the diff. A small example:
37
38
 
38
39
OPTIONS
39
40
-------
40
 
-c, --compatibility::
 
41
include::blame-options.txt[]
 
42
 
 
43
-c::
41
44
        Use the same output mode as gitlink:git-annotate[1] (Default: off).
42
45
 
43
 
-L n,m::
44
 
        Annotate only the specified line range (lines count from 1).
45
 
 
46
 
-l, --long::
47
 
        Show long rev (Default: off).
48
 
 
49
 
-t, --time::
50
 
        Show raw timestamp (Default: off).
51
 
 
52
 
-S, --rev-file <revs-file>::
53
 
        Use revs from revs-file instead of calling gitlink:git-rev-list[1].
 
46
--score-debug::
 
47
        Include debugging information related to the movement of
 
48
        lines between files (see `-C`) and lines moved within a
 
49
        file (see `-M`).  The first number listed is the score.
 
50
        This is the number of alphanumeric characters detected
 
51
        to be moved between or within files.  This must be above
 
52
        a certain threshold for git-blame to consider those lines
 
53
        of code to have been moved.
54
54
 
55
55
-f, --show-name::
56
56
        Show filename in the original commit.  By default
60
60
-n, --show-number::
61
61
        Show line number in the original commit (Default: off).
62
62
 
63
 
-p, --porcelain::
64
 
        Show in a format designed for machine consumption.
65
 
 
66
 
-M::
67
 
        Detect moving lines in the file as well.  When a commit
68
 
        moves a block of lines in a file (e.g. the original file
69
 
        has A and then B, and the commit changes it to B and
70
 
        then A), traditional 'blame' algorithm typically blames
71
 
        the lines that were moved up (i.e. B) to the parent and
72
 
        assigns blame to the lines that were moved down (i.e. A)
73
 
        to the child commit.  With this option, both groups of
74
 
        lines are blamed on the parent.
75
 
 
76
 
-C::
77
 
        In addition to `-M`, detect lines copied from other
78
 
        files that were modified in the same commit.  This is
79
 
        useful when you reorganize your program and move code
80
 
        around across files.  When this option is given twice,
81
 
        the command looks for copies from all other files in the
82
 
        parent for the commit that creates the file in addition.
83
 
 
84
 
-h, --help::
85
 
        Show help message.
86
 
 
87
 
 
88
63
THE PORCELAIN FORMAT
89
64
--------------------
90
65
 
91
66
In this format, each line is output after a header; the
92
 
header at the minumum has the first line which has:
 
67
header at the minimum has the first line which has:
93
68
 
94
69
- 40-byte SHA-1 of the commit the line is attributed to;
95
70
- the line number of the line in the original file;
112
87
header elements later.
113
88
 
114
89
 
115
 
SPECIFIYING RANGES
116
 
------------------
 
90
SPECIFYING RANGES
 
91
-----------------
117
92
 
118
93
Unlike `git-blame` and `git-annotate` in older git, the extent
119
94
of annotation can be limited to both line ranges and revision
120
95
ranges.  When you are interested in finding the origin for
121
 
ll. 40-60 for file `foo`, you can use `-L` option like this:
 
96
ll. 40-60 for file `foo`, you can use `-L` option like these
 
97
(they mean the same thing -- both ask for 21 lines starting at
 
98
line 40):
122
99
 
123
100
        git blame -L 40,60 foo
 
101
        git blame -L 40,+21 foo
124
102
 
125
103
Also you can use regular expression to specify the line range.
126
104
 
155
133
        git blame -C -C -f $commit^! -- foo
156
134
 
157
135
 
 
136
INCREMENTAL OUTPUT
 
137
------------------
 
138
 
 
139
When called with `--incremental` option, the command outputs the
 
140
result as it is built.  The output generally will talk about
 
141
lines touched by more recent commits first (i.e. the lines will
 
142
be annotated out of order) and is meant to be used by
 
143
interactive viewers.
 
144
 
 
145
The output format is similar to the Porcelain format, but it
 
146
does not contain the actual lines from the file that is being
 
147
annotated.
 
148
 
 
149
. Each blame entry always starts with a line of:
 
150
 
 
151
        <40-byte hex sha1> <sourceline> <resultline> <num_lines>
 
152
+
 
153
Line numbers count from 1.
 
154
 
 
155
. The first time that commit shows up in the stream, it has various
 
156
  other information about it printed out with a one-word tag at the
 
157
  beginning of each line about that "extended commit info" (author,
 
158
  email, committer, dates, summary etc).
 
159
 
 
160
. Unlike Porcelain format, the filename information is always
 
161
  given and terminates the entry:
 
162
 
 
163
        "filename" <whitespace-quoted-filename-goes-here>
 
164
+
 
165
and thus it's really quite easy to parse for some line- and word-oriented
 
166
parser (which should be quite natural for most scripting languages).
 
167
+
 
168
[NOTE]
 
169
For people who do parsing: to make it more robust, just ignore any
 
170
lines in between the first and last one ("<sha1>" and "filename" lines)
 
171
where you don't recognize the tag-words (or care about that particular
 
172
one) at the beginning of the "extended information" lines. That way, if
 
173
there is ever added information (like the commit encoding or extended
 
174
commit commentary), a blame viewer won't ever care.
 
175
 
 
176
 
158
177
SEE ALSO
159
178
--------
160
179
gitlink:git-annotate[1]