make commit message a little more consistent and conforting
It is nicer to let the user know when a commit succeeded all the time, not only the first time. Also the commit sha1 is much more useful than the tree sha1 in this case. This patch also introduces a -q switch to supress this message as well as the summary of created/deleted files. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
1510fea781
commit
ebd124c678
@ -336,17 +336,9 @@ $ commit=$(echo 'Initial commit' | git-commit-tree $tree)
|
|||||||
$ git-update-ref HEAD $commit
|
$ git-update-ref HEAD $commit
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
which will say:
|
In this case this creates a totally new commit that is not related to
|
||||||
|
anything else. Normally you do this only *once* for a project ever, and
|
||||||
----------------
|
all later commits will be parented on top of an earlier commit.
|
||||||
Committing initial tree 8988da15d077d4829fc51d8544c097def6644dbb
|
|
||||||
----------------
|
|
||||||
|
|
||||||
just to warn you about the fact that it created a totally new commit
|
|
||||||
that is not related to anything else. Normally you do this only *once*
|
|
||||||
for a project ever, and all later commits will be parented on top of an
|
|
||||||
earlier commit, and you'll never see this "Committing initial tree"
|
|
||||||
message ever again.
|
|
||||||
|
|
||||||
Again, normally you'd never actually do this by hand. There is a
|
Again, normally you'd never actually do this by hand. There is a
|
||||||
helpful script called `git commit` that will do all of this for you. So
|
helpful script called `git commit` that will do all of this for you. So
|
||||||
|
@ -21,6 +21,11 @@
|
|||||||
deleted lines in decimal notation and pathname without
|
deleted lines in decimal notation and pathname without
|
||||||
abbreviation, to make it more machine friendly.
|
abbreviation, to make it more machine friendly.
|
||||||
|
|
||||||
|
--shortstat::
|
||||||
|
Output only the last line of the --stat format containing total
|
||||||
|
number of modified files, as well as number of added and deleted
|
||||||
|
lines.
|
||||||
|
|
||||||
--summary::
|
--summary::
|
||||||
Output a condensed summary of extended header information
|
Output a condensed summary of extended header information
|
||||||
such as creations, renames and mode changes.
|
such as creations, renames and mode changes.
|
||||||
|
@ -113,6 +113,9 @@ but can be used to amend a merge commit.
|
|||||||
as well. This is usually not what you want unless you
|
as well. This is usually not what you want unless you
|
||||||
are concluding a conflicted merge.
|
are concluding a conflicted merge.
|
||||||
|
|
||||||
|
-q|--quiet::
|
||||||
|
Supress commit summary message.
|
||||||
|
|
||||||
\--::
|
\--::
|
||||||
Do not interpret any more arguments as options.
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
|
@ -22,14 +22,14 @@ defaulting to local storage area
|
|||||||
$ echo 'hello world' > file.txt
|
$ echo 'hello world' > file.txt
|
||||||
$ git add .
|
$ git add .
|
||||||
$ git commit -a -m "initial commit"
|
$ git commit -a -m "initial commit"
|
||||||
Committing initial tree 92b8b694ffb1675e5975148e1121810081dbdffe
|
Created initial commit 54196cc2703dc165cbd373a65a4dcf22d50ae7f7
|
||||||
create mode 100644 file.txt
|
create mode 100644 file.txt
|
||||||
$ echo 'hello world!' >file.txt
|
$ echo 'hello world!' >file.txt
|
||||||
$ git commit -a -m "add emphasis"
|
$ git commit -a -m "add emphasis"
|
||||||
|
Created commit c4d59f390b9cfd4318117afde11d601c1085f241
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
What are the 40 digits of hex that git responded to the first commit
|
What are the 40 digits of hex that git responded to the commit with?
|
||||||
with?
|
|
||||||
|
|
||||||
We saw in part one of the tutorial that commits have names like this.
|
We saw in part one of the tutorial that commits have names like this.
|
||||||
It turns out that every object in the git history is stored under
|
It turns out that every object in the git history is stored under
|
||||||
@ -39,13 +39,25 @@ the same data twice (since identical data is given an identical SHA1
|
|||||||
name), and that the contents of a git object will never change (since
|
name), and that the contents of a git object will never change (since
|
||||||
that would change the object's name as well).
|
that would change the object's name as well).
|
||||||
|
|
||||||
|
It is expected that the content of the commit object you created while
|
||||||
|
following the example above generates a different SHA1 hash than
|
||||||
|
the one shown above because the commit object records the time when
|
||||||
|
it was created and the name of the person performing the commit.
|
||||||
|
|
||||||
We can ask git about this particular object with the cat-file
|
We can ask git about this particular object with the cat-file
|
||||||
command--just cut-and-paste from the reply to the initial commit, to
|
command. Don't copy the 40 hex digits from this example but use those
|
||||||
save yourself typing all 40 hex digits:
|
from your own version. Note that you can shorten it to only a few
|
||||||
|
characters to save yourself typing all 40 hex digits:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
$ git cat-file -t 92b8b694ffb1675e5975148e1121810081dbdffe
|
$ git-cat-file -t 54196cc2
|
||||||
tree
|
commit
|
||||||
|
$ git-cat-file commit 54196cc2
|
||||||
|
tree 92b8b694ffb1675e5975148e1121810081dbdffe
|
||||||
|
author J. Bruce Fields <bfields@puzzle.fieldses.org> 1143414668 -0500
|
||||||
|
committer J. Bruce Fields <bfields@puzzle.fieldses.org> 1143414668 -0500
|
||||||
|
|
||||||
|
initial commit
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
A tree can refer to one or more "blob" objects, each corresponding to
|
A tree can refer to one or more "blob" objects, each corresponding to
|
||||||
@ -102,8 +114,7 @@ $ find .git/objects/
|
|||||||
|
|
||||||
and the contents of these files is just the compressed data plus a
|
and the contents of these files is just the compressed data plus a
|
||||||
header identifying their length and their type. The type is either a
|
header identifying their length and their type. The type is either a
|
||||||
blob, a tree, a commit, or a tag. We've seen a blob and a tree now,
|
blob, a tree, a commit, or a tag.
|
||||||
so next we should look at a commit.
|
|
||||||
|
|
||||||
The simplest commit to find is the HEAD commit, which we can find
|
The simplest commit to find is the HEAD commit, which we can find
|
||||||
from .git/HEAD:
|
from .git/HEAD:
|
||||||
|
@ -107,8 +107,6 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
|
|||||||
if (new_parent(parents))
|
if (new_parent(parents))
|
||||||
parents++;
|
parents++;
|
||||||
}
|
}
|
||||||
if (!parents)
|
|
||||||
fprintf(stderr, "Committing initial tree %s\n", argv[1]);
|
|
||||||
|
|
||||||
init_buffer(&buffer, &size);
|
init_buffer(&buffer, &size);
|
||||||
add_buffer(&buffer, &size, "tree %s\n", sha1_to_hex(tree_sha1));
|
add_buffer(&buffer, &size, "tree %s\n", sha1_to_hex(tree_sha1));
|
||||||
|
38
diff.c
38
diff.c
@ -801,6 +801,35 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
|
|||||||
set, total_files, adds, dels, reset);
|
set, total_files, adds, dels, reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void show_shortstats(struct diffstat_t* data)
|
||||||
|
{
|
||||||
|
int i, adds = 0, dels = 0, total_files = data->nr;
|
||||||
|
|
||||||
|
if (data->nr == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < data->nr; i++) {
|
||||||
|
if (!data->files[i]->is_binary &&
|
||||||
|
!data->files[i]->is_unmerged) {
|
||||||
|
int added = data->files[i]->added;
|
||||||
|
int deleted= data->files[i]->deleted;
|
||||||
|
if (!data->files[i]->is_renamed &&
|
||||||
|
(added + deleted == 0)) {
|
||||||
|
total_files--;
|
||||||
|
} else {
|
||||||
|
adds += added;
|
||||||
|
dels += deleted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(data->files[i]->name);
|
||||||
|
free(data->files[i]);
|
||||||
|
}
|
||||||
|
free(data->files);
|
||||||
|
|
||||||
|
printf(" %d files changed, %d insertions(+), %d deletions(-)\n",
|
||||||
|
total_files, adds, dels);
|
||||||
|
}
|
||||||
|
|
||||||
static void show_numstat(struct diffstat_t* data, struct diff_options *options)
|
static void show_numstat(struct diffstat_t* data, struct diff_options *options)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -1771,6 +1800,7 @@ int diff_setup_done(struct diff_options *options)
|
|||||||
options->output_format &= ~(DIFF_FORMAT_RAW |
|
options->output_format &= ~(DIFF_FORMAT_RAW |
|
||||||
DIFF_FORMAT_NUMSTAT |
|
DIFF_FORMAT_NUMSTAT |
|
||||||
DIFF_FORMAT_DIFFSTAT |
|
DIFF_FORMAT_DIFFSTAT |
|
||||||
|
DIFF_FORMAT_SHORTSTAT |
|
||||||
DIFF_FORMAT_SUMMARY |
|
DIFF_FORMAT_SUMMARY |
|
||||||
DIFF_FORMAT_PATCH);
|
DIFF_FORMAT_PATCH);
|
||||||
|
|
||||||
@ -1781,6 +1811,7 @@ int diff_setup_done(struct diff_options *options)
|
|||||||
if (options->output_format & (DIFF_FORMAT_PATCH |
|
if (options->output_format & (DIFF_FORMAT_PATCH |
|
||||||
DIFF_FORMAT_NUMSTAT |
|
DIFF_FORMAT_NUMSTAT |
|
||||||
DIFF_FORMAT_DIFFSTAT |
|
DIFF_FORMAT_DIFFSTAT |
|
||||||
|
DIFF_FORMAT_SHORTSTAT |
|
||||||
DIFF_FORMAT_SUMMARY |
|
DIFF_FORMAT_SUMMARY |
|
||||||
DIFF_FORMAT_CHECKDIFF))
|
DIFF_FORMAT_CHECKDIFF))
|
||||||
options->recursive = 1;
|
options->recursive = 1;
|
||||||
@ -1872,6 +1903,9 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
|||||||
else if (!strcmp(arg, "--numstat")) {
|
else if (!strcmp(arg, "--numstat")) {
|
||||||
options->output_format |= DIFF_FORMAT_NUMSTAT;
|
options->output_format |= DIFF_FORMAT_NUMSTAT;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(arg, "--shortstat")) {
|
||||||
|
options->output_format |= DIFF_FORMAT_SHORTSTAT;
|
||||||
|
}
|
||||||
else if (!strncmp(arg, "--stat", 6)) {
|
else if (!strncmp(arg, "--stat", 6)) {
|
||||||
char *end;
|
char *end;
|
||||||
int width = options->stat_width;
|
int width = options->stat_width;
|
||||||
@ -2646,7 +2680,7 @@ void diff_flush(struct diff_options *options)
|
|||||||
separator++;
|
separator++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output_format & (DIFF_FORMAT_DIFFSTAT|DIFF_FORMAT_NUMSTAT)) {
|
if (output_format & (DIFF_FORMAT_DIFFSTAT|DIFF_FORMAT_SHORTSTAT|DIFF_FORMAT_NUMSTAT)) {
|
||||||
struct diffstat_t diffstat;
|
struct diffstat_t diffstat;
|
||||||
|
|
||||||
memset(&diffstat, 0, sizeof(struct diffstat_t));
|
memset(&diffstat, 0, sizeof(struct diffstat_t));
|
||||||
@ -2660,6 +2694,8 @@ void diff_flush(struct diff_options *options)
|
|||||||
show_numstat(&diffstat, options);
|
show_numstat(&diffstat, options);
|
||||||
if (output_format & DIFF_FORMAT_DIFFSTAT)
|
if (output_format & DIFF_FORMAT_DIFFSTAT)
|
||||||
show_stats(&diffstat, options);
|
show_stats(&diffstat, options);
|
||||||
|
else if (output_format & DIFF_FORMAT_SHORTSTAT)
|
||||||
|
show_shortstats(&diffstat);
|
||||||
separator++;
|
separator++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
diff.h
1
diff.h
@ -29,6 +29,7 @@ typedef void (*diff_format_fn_t)(struct diff_queue_struct *q,
|
|||||||
#define DIFF_FORMAT_NUMSTAT 0x0004
|
#define DIFF_FORMAT_NUMSTAT 0x0004
|
||||||
#define DIFF_FORMAT_SUMMARY 0x0008
|
#define DIFF_FORMAT_SUMMARY 0x0008
|
||||||
#define DIFF_FORMAT_PATCH 0x0010
|
#define DIFF_FORMAT_PATCH 0x0010
|
||||||
|
#define DIFF_FORMAT_SHORTSTAT 0x0020
|
||||||
|
|
||||||
/* These override all above */
|
/* These override all above */
|
||||||
#define DIFF_FORMAT_NAME 0x0100
|
#define DIFF_FORMAT_NAME 0x0100
|
||||||
|
@ -80,6 +80,7 @@ no_edit=
|
|||||||
log_given=
|
log_given=
|
||||||
log_message=
|
log_message=
|
||||||
verify=t
|
verify=t
|
||||||
|
quiet=
|
||||||
verbose=
|
verbose=
|
||||||
signoff=
|
signoff=
|
||||||
force_author=
|
force_author=
|
||||||
@ -241,6 +242,10 @@ $1"
|
|||||||
signoff=t
|
signoff=t
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-q|--q|--qu|--qui|--quie|--quiet)
|
||||||
|
quiet=t
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
|
-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
|
||||||
verbose=t
|
verbose=t
|
||||||
shift
|
shift
|
||||||
@ -615,11 +620,17 @@ then
|
|||||||
git-rerere
|
git-rerere
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -x "$GIT_DIR"/hooks/post-commit && test "$ret" = 0
|
if test "$ret" = 0
|
||||||
then
|
then
|
||||||
"$GIT_DIR"/hooks/post-commit
|
if test -x "$GIT_DIR"/hooks/post-commit
|
||||||
|
then
|
||||||
|
"$GIT_DIR"/hooks/post-commit
|
||||||
|
fi
|
||||||
|
if test -z "$quiet"
|
||||||
|
then
|
||||||
|
echo "Created${initial_commit:+ initial} commit $commit"
|
||||||
|
git-diff-tree --shortstat --summary --root --no-commit-id HEAD
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
test "$ret" = 0 && git-diff-tree --summary --root --no-commit-id HEAD
|
|
||||||
|
|
||||||
exit "$ret"
|
exit "$ret"
|
||||||
|
@ -37,8 +37,6 @@ test_expect_success 'tree' "test 8988da15d077d4829fc51d8544c097def6644dbb = $tre
|
|||||||
|
|
||||||
output="$(echo "Initial commit" | git-commit-tree $(git-write-tree) 2>&1 > .git/refs/heads/master)"
|
output="$(echo "Initial commit" | git-commit-tree $(git-write-tree) 2>&1 > .git/refs/heads/master)"
|
||||||
|
|
||||||
test_expect_success 'commit' "test 'Committing initial tree 8988da15d077d4829fc51d8544c097def6644dbb' = \"$output\""
|
|
||||||
|
|
||||||
git-diff-index -p HEAD > diff.output
|
git-diff-index -p HEAD > diff.output
|
||||||
test_expect_success 'git-diff-index -p HEAD' 'cmp diff.expect diff.output'
|
test_expect_success 'git-diff-index -p HEAD' 'cmp diff.expect diff.output'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user