зеркало из https://github.com/microsoft/git.git
git-pickaxe: retire pickaxe
Just make it take over blame's place. Documentation and command have all stopped mentioning "git-pickaxe". The built-in synonym is left in the command table, so you can still say "git pickaxe", but it probably is a good idea to retire it as well. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
659db3f673
Коммит
acca687fa9
|
@ -7,7 +7,9 @@ git-blame - Show what revision and author last modified each line of a file
|
|||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-S <revs-file>] [--] <file> [<rev>]
|
||||
[verse]
|
||||
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
|
||||
[-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
@ -15,6 +17,8 @@ DESCRIPTION
|
|||
Annotates each line in the given file with information from the revision which
|
||||
last modified the line. Optionally, start annotating from the given revision.
|
||||
|
||||
Also it can limit the range of lines annotated.
|
||||
|
||||
This report doesn't tell you anything about lines which have been deleted or
|
||||
replaced; you need to use a tool such as gitlink:git-diff[1] or the "pickaxe"
|
||||
interface briefly mentioned in the following paragraph.
|
||||
|
@ -36,6 +40,12 @@ OPTIONS
|
|||
-c, --compatibility::
|
||||
Use the same output mode as gitlink:git-annotate[1] (Default: off).
|
||||
|
||||
-L n,m::
|
||||
Annotate only the specified line range (lines count from
|
||||
1). The range can be specified with a regexp. For
|
||||
example, `-L '/^sub esc_html /,/^}$/'` limits the
|
||||
annotation only to the body of `esc_html` subroutine.
|
||||
|
||||
-l, --long::
|
||||
Show long rev (Default: off).
|
||||
|
||||
|
@ -56,6 +66,24 @@ OPTIONS
|
|||
-p, --porcelain::
|
||||
Show in a format designed for machine consumption.
|
||||
|
||||
-M::
|
||||
Detect moving lines in the file as well. When a commit
|
||||
moves a block of lines in a file (e.g. the original file
|
||||
has A and then B, and the commit changes it to B and
|
||||
then A), traditional 'blame' algorithm typically blames
|
||||
the lines that were moved up (i.e. B) to the parent and
|
||||
assigns blame to the lines that were moved down (i.e. A)
|
||||
to the child commit. With this option, both groups of
|
||||
lines are blamed on the parent.
|
||||
|
||||
-C::
|
||||
In addition to `-M`, detect lines copied from other
|
||||
files that were modified in the same commit. This is
|
||||
useful when you reorganize your program and move code
|
||||
around across files. When this option is given twice,
|
||||
the command looks for copies from all other files in the
|
||||
parent for the commit that creates the file in addition.
|
||||
|
||||
-h, --help::
|
||||
Show help message.
|
||||
|
||||
|
@ -86,13 +114,51 @@ The contents of the actual line is output after the above
|
|||
header, prefixed by a TAB. This is to allow adding more
|
||||
header elements later.
|
||||
|
||||
|
||||
SPECIFIYING RANGES
|
||||
------------------
|
||||
|
||||
Unlike `git-blame` and `git-annotate` in older git, the extent
|
||||
of annotation can be limited to both line ranges and revision
|
||||
ranges. When you are interested in finding the origin for
|
||||
ll. 40-60 for file `foo`, you can use `-L` option like this:
|
||||
|
||||
git blame -L 40,60 foo
|
||||
|
||||
When you are not interested in changes older than the version
|
||||
v2.6.18, or changes older than 3 weeks, you can use revision
|
||||
range specifiers similar to `git-rev-list`:
|
||||
|
||||
git blame v2.6.18.. -- foo
|
||||
git blame --since=3.weeks -- foo
|
||||
|
||||
When revision range specifiers are used to limit the annotation,
|
||||
lines that have not changed since the range boundary (either the
|
||||
commit v2.6.18 or the most recent commit that is more than 3
|
||||
weeks old in the above example) are blamed for that range
|
||||
boundary commit.
|
||||
|
||||
A particularly useful way is to see if an added file have lines
|
||||
created by copy-and-paste from existing files. Sometimes this
|
||||
indicates that the developer was being sloppy and did not
|
||||
refactor the code properly. You can first find the commit that
|
||||
introduced the file with:
|
||||
|
||||
git log --diff-filter=A --pretty=short -- foo
|
||||
|
||||
and then annotate the change between the commit and its
|
||||
parents, using `commit{caret}!` notation:
|
||||
|
||||
git blame -C -C -f $commit^! -- foo
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
gitlink:git-annotate[1]
|
||||
|
||||
AUTHOR
|
||||
------
|
||||
Written by Fredrik Kuivinen <freku045@student.liu.se>.
|
||||
Written by Junio C Hamano <junkio@cox.net>
|
||||
|
||||
GIT
|
||||
---
|
||||
|
|
|
@ -1,162 +0,0 @@
|
|||
git-pickaxe(1)
|
||||
==============
|
||||
|
||||
NAME
|
||||
----
|
||||
git-pickaxe - Show what revision and author last modified each line of a file
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-pickaxe' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
|
||||
[-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
||||
Annotates each line in the given file with information from the revision which
|
||||
last modified the line. Optionally, start annotating from the given revision.
|
||||
|
||||
Also it can limit the range of lines annotated.
|
||||
|
||||
This report doesn't tell you anything about lines which have been deleted or
|
||||
replaced; you need to use a tool such as gitlink:git-diff[1] or the "pickaxe"
|
||||
interface briefly mentioned in the following paragraph.
|
||||
|
||||
Apart from supporting file annotation, git also supports searching the
|
||||
development history for when a code snippet occured in a change. This makes it
|
||||
possible to track when a code snippet was added to a file, moved or copied
|
||||
between files, and eventually deleted or replaced. It works by searching for
|
||||
a text string in the diff. A small example:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
$ git log --pretty=oneline -S'blame_usage'
|
||||
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <ancestry-file>
|
||||
ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
-c, --compatibility::
|
||||
Use the same output mode as gitlink:git-annotate[1] (Default: off).
|
||||
|
||||
-L n,m::
|
||||
Annotate only the specified line range (lines count from 1).
|
||||
|
||||
-l, --long::
|
||||
Show long rev (Default: off).
|
||||
|
||||
-t, --time::
|
||||
Show raw timestamp (Default: off).
|
||||
|
||||
-S, --rev-file <revs-file>::
|
||||
Use revs from revs-file instead of calling gitlink:git-rev-list[1].
|
||||
|
||||
-f, --show-name::
|
||||
Show filename in the original commit. By default
|
||||
filename is shown if there is any line that came from a
|
||||
file with different name, due to rename detection.
|
||||
|
||||
-n, --show-number::
|
||||
Show line number in the original commit (Default: off).
|
||||
|
||||
-p, --porcelain::
|
||||
Show in a format designed for machine consumption.
|
||||
|
||||
-M::
|
||||
Detect moving lines in the file as well. When a commit
|
||||
moves a block of lines in a file (e.g. the original file
|
||||
has A and then B, and the commit changes it to B and
|
||||
then A), traditional 'blame' algorithm typically blames
|
||||
the lines that were moved up (i.e. B) to the parent and
|
||||
assigns blame to the lines that were moved down (i.e. A)
|
||||
to the child commit. With this option, both groups of
|
||||
lines are blamed on the parent.
|
||||
|
||||
-C::
|
||||
In addition to `-M`, detect lines copied from other
|
||||
files that were modified in the same commit. This is
|
||||
useful when you reorganize your program and move code
|
||||
around across files. When this option is given twice,
|
||||
the command looks for copies from all other files in the
|
||||
parent for the commit that creates the file in addition.
|
||||
|
||||
-h, --help::
|
||||
Show help message.
|
||||
|
||||
|
||||
THE PORCELAIN FORMAT
|
||||
--------------------
|
||||
|
||||
In this format, each line is output after a header; the
|
||||
header at the minumum has the first line which has:
|
||||
|
||||
- 40-byte SHA-1 of the commit the line is attributed to;
|
||||
- the line number of the line in the original file;
|
||||
- the line number of the line in the final file;
|
||||
- on a line that starts a group of line from a different
|
||||
commit than the previous one, the number of lines in this
|
||||
group. On subsequent lines this field is absent.
|
||||
|
||||
This header line is followed by the following information
|
||||
at least once for each commit:
|
||||
|
||||
- author name ("author"), email ("author-mail"), time
|
||||
("author-time"), and timezone ("author-tz"); similarly
|
||||
for committer.
|
||||
- filename in the commit the line is attributed to.
|
||||
- the first line of the commit log message ("summary").
|
||||
|
||||
The contents of the actual line is output after the above
|
||||
header, prefixed by a TAB. This is to allow adding more
|
||||
header elements later.
|
||||
|
||||
|
||||
SPECIFIYING RANGES
|
||||
------------------
|
||||
|
||||
Unlike `git-blame` and `git-annotate` in older git, the extent
|
||||
of annotation can be limited to both line ranges and revision
|
||||
ranges. When you are interested in finding the origin for
|
||||
ll. 40-60 for file `foo`, you can use `-L` option like this:
|
||||
|
||||
git pickaxe -L 40,60 foo
|
||||
|
||||
When you are not interested in changes older than the version
|
||||
v2.6.18, or changes older than 3 weeks, you can use revision
|
||||
range specifiers similar to `git-rev-list`:
|
||||
|
||||
git pickaxe v2.6.18.. -- foo
|
||||
git pickaxe --since=3.weeks -- foo
|
||||
|
||||
When revision range specifiers are used to limit the annotation,
|
||||
lines that have not changed since the range boundary (either the
|
||||
commit v2.6.18 or the most recent commit that is more than 3
|
||||
weeks old in the above example) are blamed for that range
|
||||
boundary commit.
|
||||
|
||||
A particularly useful way is to see if an added file have lines
|
||||
created by copy-and-paste from existing files. Sometimes this
|
||||
indicates that the developer was being sloppy and did not
|
||||
refactor the code properly. You can first find the commit that
|
||||
introduced the file with:
|
||||
|
||||
git log --diff-filter=A --pretty=short -- foo
|
||||
|
||||
and then annotate the change between the commit and its
|
||||
parents, using `commit{caret}!` notation:
|
||||
|
||||
git pickaxe -C -C -f $commit^! -- foo
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
gitlink:git-blame[1]
|
||||
|
||||
AUTHOR
|
||||
------
|
||||
Written by Junio C Hamano <junkio@cox.net>
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
|
@ -252,9 +252,6 @@ gitlink:git-annotate[1]::
|
|||
Annotate file lines with commit info.
|
||||
|
||||
gitlink:git-blame[1]::
|
||||
Blame file lines on commits.
|
||||
|
||||
gitlink:git-pickaxe[1]::
|
||||
Find out where each line in a file came from.
|
||||
|
||||
gitlink:git-check-ref-format[1]::
|
||||
|
|
4
Makefile
4
Makefile
|
@ -201,7 +201,7 @@ PROGRAMS = \
|
|||
git-update-server-info$X \
|
||||
git-upload-pack$X git-verify-pack$X \
|
||||
git-pack-redundant$X git-var$X \
|
||||
git-describe$X git-merge-tree$X git-blame$X git-imap-send$X \
|
||||
git-describe$X git-merge-tree$X git-imap-send$X \
|
||||
git-merge-recursive$X \
|
||||
$(EXTRA_PROGRAMS)
|
||||
|
||||
|
@ -267,6 +267,7 @@ BUILTIN_OBJS = \
|
|||
builtin-annotate.o \
|
||||
builtin-apply.o \
|
||||
builtin-archive.o \
|
||||
builtin-blame.o \
|
||||
builtin-branch.o \
|
||||
builtin-cat-file.o \
|
||||
builtin-checkout-index.o \
|
||||
|
@ -290,7 +291,6 @@ BUILTIN_OBJS = \
|
|||
builtin-mv.o \
|
||||
builtin-name-rev.o \
|
||||
builtin-pack-objects.o \
|
||||
builtin-pickaxe.o \
|
||||
builtin-prune.o \
|
||||
builtin-prune-packed.o \
|
||||
builtin-push.o \
|
||||
|
|
1089
blame.c
1089
blame.c
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -19,8 +19,8 @@
|
|||
#include <sys/time.h>
|
||||
#include <regex.h>
|
||||
|
||||
static char pickaxe_usage[] =
|
||||
"git-pickaxe [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>] [-M] [-C] [-C] [commit] [--] file\n"
|
||||
static char blame_usage[] =
|
||||
"git-blame [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>] [-M] [-C] [-C] [commit] [--] file\n"
|
||||
" -c, --compatibility Use the same output mode as git-annotate (Default: off)\n"
|
||||
" -l, --long Show long commit SHA1 (Default: off)\n"
|
||||
" -t, --time Show raw timestamp (Default: off)\n"
|
||||
|
@ -287,12 +287,12 @@ static struct origin *find_origin(struct scoreboard *sb,
|
|||
hashcpy(porigin->blob_sha1, origin->blob_sha1);
|
||||
}
|
||||
else if (diff_queued_diff.nr != 1)
|
||||
die("internal error in pickaxe::find_origin");
|
||||
die("internal error in blame::find_origin");
|
||||
else {
|
||||
struct diff_filepair *p = diff_queued_diff.queue[0];
|
||||
switch (p->status) {
|
||||
default:
|
||||
die("internal error in pickaxe::find_origin (%c)",
|
||||
die("internal error in blame::find_origin (%c)",
|
||||
p->status);
|
||||
case 'M':
|
||||
porigin = get_origin(sb, parent, origin->path);
|
||||
|
@ -1619,13 +1619,13 @@ static void prepare_blame_range(struct scoreboard *sb,
|
|||
if (*term == ',') {
|
||||
term = parse_loc(term + 1, sb, lno, *bottom + 1, top);
|
||||
if (*term)
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
}
|
||||
if (*term)
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
}
|
||||
|
||||
int cmd_pickaxe(int argc, const char **argv, const char *prefix)
|
||||
int cmd_blame(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
struct rev_info revs;
|
||||
const char *path;
|
||||
|
@ -1669,7 +1669,7 @@ int cmd_pickaxe(int argc, const char **argv, const char *prefix)
|
|||
else if (!strncmp("-L", arg, 2)) {
|
||||
if (!arg[2]) {
|
||||
if (++i >= argc)
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
arg = argv[i];
|
||||
}
|
||||
else
|
||||
|
@ -1734,16 +1734,16 @@ int cmd_pickaxe(int argc, const char **argv, const char *prefix)
|
|||
if (seen_dashdash) {
|
||||
/* (1) */
|
||||
if (argc <= i)
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
path = add_prefix(prefix, argv[i]);
|
||||
if (i + 1 == argc - 1) {
|
||||
if (unk != 1)
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
argv[unk++] = argv[i + 1];
|
||||
}
|
||||
else if (i + 1 != argc)
|
||||
/* garbage at end */
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
}
|
||||
else {
|
||||
int j;
|
||||
|
@ -1752,7 +1752,7 @@ int cmd_pickaxe(int argc, const char **argv, const char *prefix)
|
|||
seen_dashdash = j;
|
||||
if (seen_dashdash) {
|
||||
if (seen_dashdash + 1 != argc - 1)
|
||||
usage(pickaxe_usage);
|
||||
usage(blame_usage);
|
||||
path = add_prefix(prefix, argv[seen_dashdash + 1]);
|
||||
for (j = i; j < seen_dashdash; j++)
|
||||
argv[unk++] = argv[j];
|
||||
|
@ -1772,7 +1772,7 @@ int cmd_pickaxe(int argc, const char **argv, const char *prefix)
|
|||
}
|
||||
}
|
||||
else if (i != argc - 1)
|
||||
usage(pickaxe_usage); /* garbage at end */
|
||||
usage(blame_usage); /* garbage at end */
|
||||
|
||||
if (!has_path_in_work_tree(path))
|
||||
die("cannot stat path %s: %s",
|
|
@ -17,6 +17,7 @@ extern int cmd_add(int argc, const char **argv, const char *prefix);
|
|||
extern int cmd_annotate(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_apply(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_archive(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_blame(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_branch(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_cat_file(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_checkout_index(int argc, const char **argv, const char *prefix);
|
||||
|
|
3
git.c
3
git.c
|
@ -222,6 +222,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)
|
|||
{ "annotate", cmd_annotate, },
|
||||
{ "apply", cmd_apply },
|
||||
{ "archive", cmd_archive },
|
||||
{ "blame", cmd_blame, RUN_SETUP | USE_PAGER },
|
||||
{ "branch", cmd_branch, RUN_SETUP },
|
||||
{ "cat-file", cmd_cat_file, RUN_SETUP },
|
||||
{ "checkout-index", cmd_checkout_index, RUN_SETUP },
|
||||
|
@ -249,7 +250,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)
|
|||
{ "mv", cmd_mv, RUN_SETUP },
|
||||
{ "name-rev", cmd_name_rev, RUN_SETUP },
|
||||
{ "pack-objects", cmd_pack_objects, RUN_SETUP },
|
||||
{ "pickaxe", cmd_pickaxe, RUN_SETUP | USE_PAGER },
|
||||
{ "pickaxe", cmd_blame, RUN_SETUP | USE_PAGER },
|
||||
{ "prune", cmd_prune, RUN_SETUP },
|
||||
{ "prune-packed", cmd_prune_packed, RUN_SETUP },
|
||||
{ "push", cmd_push, RUN_SETUP },
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
test_description='git-pickaxe'
|
||||
. ./test-lib.sh
|
||||
|
||||
PROG='git pickaxe -c'
|
||||
. ../annotate-tests.sh
|
||||
|
||||
test_done
|
Загрузка…
Ссылка в новой задаче