Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
ca182053c7 | |||
1ecc18e4fc | |||
3a75f67401 | |||
e921fb82cf | |||
e93ec6f9d8 | |||
ae4a35261d | |||
ee3d299e93 | |||
e99c2fbdda | |||
a0dfb48af7 | |||
cb95bf488b | |||
c2bc6e404d | |||
87758f975b | |||
2c817df25d | |||
a94d9948da | |||
0de62e5985 | |||
d5a6aafc90 |
@ -25,7 +25,9 @@ information.
|
|||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
-a|--all::
|
-a|--all::
|
||||||
Update all paths in the index file.
|
Update all paths in the index file. This flag notices
|
||||||
|
files that have been modified and deleted, but new files
|
||||||
|
you have not told about git are not affected.
|
||||||
|
|
||||||
-c or -C <commit>::
|
-c or -C <commit>::
|
||||||
Take existing commit object, and reuse the log message
|
Take existing commit object, and reuse the log message
|
||||||
|
@ -145,6 +145,32 @@ brings your index file and the working tree back to that state,
|
|||||||
and resets the tip of the branch to that commit.
|
and resets the tip of the branch to that commit.
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
Interrupted workflow::
|
||||||
|
+
|
||||||
|
You can get interrupted by an ungent fix request while you are
|
||||||
|
still in the middle of a large change. The files in your
|
||||||
|
working tree are not in any shape to be committed yet, but you
|
||||||
|
need to get to the other branch for a quick bugfix.
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git checkout feature ;# you were working in "feature" branch and
|
||||||
|
$ work work work ;# got interrupted
|
||||||
|
$ git commit -a -m 'snapshot WIP' <1>
|
||||||
|
$ git checkout master
|
||||||
|
$ fix fix fix
|
||||||
|
$ git commit ;# commit with real log
|
||||||
|
$ git checkout feature
|
||||||
|
$ git reset --soft HEAD^ ;# go back to WIP state <2>
|
||||||
|
$ git reset <3>
|
||||||
|
|
||||||
|
<1> This commit will get blown away so a throw-away log message is OK.
|
||||||
|
<2> This removes the 'WIP' commit from the commit history, and makes
|
||||||
|
your working tree in the state just before you made that snapshot.
|
||||||
|
<3> After <2>, the index file still has all the WIP changes you
|
||||||
|
committed in <1>. This sets it to the last commit you were
|
||||||
|
basing the WIP changes on.
|
||||||
|
------------
|
||||||
|
|
||||||
Author
|
Author
|
||||||
------
|
------
|
||||||
Written by Junio C Hamano <junkio@cox.net> and Linus Torvalds <torvalds@osdl.org>
|
Written by Junio C Hamano <junkio@cox.net> and Linus Torvalds <torvalds@osdl.org>
|
||||||
@ -156,4 +182,3 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
|
|||||||
GIT
|
GIT
|
||||||
---
|
---
|
||||||
Part of the gitlink:git[7] suite
|
Part of the gitlink:git[7] suite
|
||||||
|
|
||||||
|
@ -111,6 +111,17 @@ branch::
|
|||||||
a particular revision, which is called the branch head. The
|
a particular revision, which is called the branch head. The
|
||||||
branch heads are stored in `$GIT_DIR/refs/heads/`.
|
branch heads are stored in `$GIT_DIR/refs/heads/`.
|
||||||
|
|
||||||
|
master::
|
||||||
|
The default branch. Whenever you create a git repository, a branch
|
||||||
|
named "master" is created, and becomes the active branch. In most
|
||||||
|
cases, this contains the local development.
|
||||||
|
|
||||||
|
origin::
|
||||||
|
The default upstream branch. Most projects have one upstream
|
||||||
|
project which they track, and by default 'origin' is used for
|
||||||
|
that purpose. New updates from upstream will be fetched into
|
||||||
|
this branch; you should never commit to it yourself.
|
||||||
|
|
||||||
ref::
|
ref::
|
||||||
A 40-byte hex representation of a SHA1 pointing to a particular
|
A 40-byte hex representation of a SHA1 pointing to a particular
|
||||||
object. These may be stored in `$GIT_DIR/refs/`.
|
object. These may be stored in `$GIT_DIR/refs/`.
|
||||||
|
@ -134,9 +134,9 @@ is often useful.
|
|||||||
+
|
+
|
||||||
Some short-cut notations are also supported.
|
Some short-cut notations are also supported.
|
||||||
+
|
+
|
||||||
* For backward compatibility, `tag` is almost ignored;
|
* `tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`;
|
||||||
it just makes the following parameter <tag> to mean a
|
used with pull or fetch, it requests fetching everything up to
|
||||||
refspec `refs/tags/<tag>:refs/tags/<tag>`.
|
the given tag.
|
||||||
* A parameter <ref> without a colon is equivalent to
|
* A parameter <ref> without a colon is equivalent to
|
||||||
<ref>: when pulling/fetching, and <ref>`:`<ref> when
|
<ref>: when pulling/fetching, and <ref>`:`<ref> when
|
||||||
pushing. That is, do not store it locally if
|
pushing. That is, do not store it locally if
|
||||||
|
2
Makefile
2
Makefile
@ -55,7 +55,7 @@ all:
|
|||||||
# Define USE_STDEV below if you want git to care about the underlying device
|
# Define USE_STDEV below if you want git to care about the underlying device
|
||||||
# change being considered an inode change from the update-cache perspective.
|
# change being considered an inode change from the update-cache perspective.
|
||||||
|
|
||||||
GIT_VERSION = 1.0.8
|
GIT_VERSION = 1.0.13
|
||||||
|
|
||||||
# CFLAGS and LDFLAGS are for the users to override from the command line.
|
# CFLAGS and LDFLAGS are for the users to override from the command line.
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* passed around in one int (high 16-bit for merge and low 16-bit
|
* passed around in one int (high 16-bit for merge and low 16-bit
|
||||||
* for break).
|
* for break).
|
||||||
*/
|
*/
|
||||||
#define MAX_SCORE 60000
|
#define MAX_SCORE 60000.0
|
||||||
#define DEFAULT_RENAME_SCORE 30000 /* rename/copy similarity minimum (50%) */
|
#define DEFAULT_RENAME_SCORE 30000 /* rename/copy similarity minimum (50%) */
|
||||||
#define DEFAULT_BREAK_SCORE 30000 /* minimum for break to happen (50%)*/
|
#define DEFAULT_BREAK_SCORE 30000 /* minimum for break to happen (50%)*/
|
||||||
#define DEFAULT_MERGE_SCORE 48000 /* maximum for break-merge to happen (80%)*/
|
#define DEFAULT_MERGE_SCORE 48000 /* maximum for break-merge to happen (80%)*/
|
||||||
|
9
entry.c
9
entry.c
@ -70,7 +70,6 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout
|
|||||||
unsigned long size;
|
unsigned long size;
|
||||||
long wrote;
|
long wrote;
|
||||||
char type[20];
|
char type[20];
|
||||||
char target[1024];
|
|
||||||
|
|
||||||
new = read_sha1_file(ce->sha1, type, &size);
|
new = read_sha1_file(ce->sha1, type, &size);
|
||||||
if (!new || strcmp(type, "blob")) {
|
if (!new || strcmp(type, "blob")) {
|
||||||
@ -94,12 +93,10 @@ static int write_entry(struct cache_entry *ce, const char *path, struct checkout
|
|||||||
return error("git-checkout-index: unable to write file %s", path);
|
return error("git-checkout-index: unable to write file %s", path);
|
||||||
break;
|
break;
|
||||||
case S_IFLNK:
|
case S_IFLNK:
|
||||||
memcpy(target, new, size);
|
if (symlink(new, path)) {
|
||||||
target[size] = '\0';
|
|
||||||
if (symlink(target, path)) {
|
|
||||||
free(new);
|
free(new);
|
||||||
return error("git-checkout-index: unable to create symlink %s (%s)",
|
return error("git-checkout-index: unable to create "
|
||||||
path, strerror(errno));
|
"symlink %s (%s)", path, strerror(errno));
|
||||||
}
|
}
|
||||||
free(new);
|
free(new);
|
||||||
break;
|
break;
|
||||||
|
@ -262,9 +262,6 @@ static void filter_refs(struct ref **refs, int nr_match, char **match)
|
|||||||
{
|
{
|
||||||
struct ref *prev, *current, *next;
|
struct ref *prev, *current, *next;
|
||||||
|
|
||||||
if (!nr_match)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (prev = NULL, current = *refs; current; current = next) {
|
for (prev = NULL, current = *refs; current; current = next) {
|
||||||
next = current->next;
|
next = current->next;
|
||||||
if ((!memcmp(current->name, "refs/", 5) &&
|
if ((!memcmp(current->name, "refs/", 5) &&
|
||||||
|
@ -93,10 +93,11 @@ static int name_ref(const char *path, const unsigned char *sha1)
|
|||||||
}
|
}
|
||||||
if (o && o->type == commit_type) {
|
if (o && o->type == commit_type) {
|
||||||
struct commit *commit = (struct commit *)o;
|
struct commit *commit = (struct commit *)o;
|
||||||
const char *p;
|
|
||||||
|
|
||||||
while ((p = strchr(path, '/')))
|
if (!strncmp(path, "refs/heads/", 11))
|
||||||
path = p+1;
|
path = path + 11;
|
||||||
|
else if (!strncmp(path, "refs/", 5))
|
||||||
|
path = path + 5;
|
||||||
|
|
||||||
name_rev(commit, strdup(path), 0, 0, deref);
|
name_rev(commit, strdup(path), 0, 0, deref);
|
||||||
}
|
}
|
||||||
|
16
sha1_file.c
16
sha1_file.c
@ -321,16 +321,12 @@ struct packed_git *packed_git;
|
|||||||
static int check_packed_git_idx(const char *path, unsigned long *idx_size_,
|
static int check_packed_git_idx(const char *path, unsigned long *idx_size_,
|
||||||
void **idx_map_)
|
void **idx_map_)
|
||||||
{
|
{
|
||||||
SHA_CTX ctx;
|
|
||||||
unsigned char sha1[20];
|
|
||||||
void *idx_map;
|
void *idx_map;
|
||||||
unsigned int *index;
|
unsigned int *index;
|
||||||
unsigned long idx_size;
|
unsigned long idx_size;
|
||||||
int nr, i;
|
int nr, i;
|
||||||
int fd;
|
int fd = open(path, O_RDONLY);
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
fd = open(path, O_RDONLY);
|
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (fstat(fd, &st)) {
|
if (fstat(fd, &st)) {
|
||||||
@ -368,16 +364,6 @@ static int check_packed_git_idx(const char *path, unsigned long *idx_size_,
|
|||||||
if (idx_size != 4*256 + nr * 24 + 20 + 20)
|
if (idx_size != 4*256 + nr * 24 + 20 + 20)
|
||||||
return error("wrong index file size");
|
return error("wrong index file size");
|
||||||
|
|
||||||
/*
|
|
||||||
* File checksum.
|
|
||||||
*/
|
|
||||||
SHA1_Init(&ctx);
|
|
||||||
SHA1_Update(&ctx, idx_map, idx_size-20);
|
|
||||||
SHA1_Final(sha1, &ctx);
|
|
||||||
|
|
||||||
if (memcmp(sha1, idx_map + idx_size - 20, 20))
|
|
||||||
return error("index checksum mismatch");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -492,7 +492,7 @@ static void append_one_rev(const char *av)
|
|||||||
append_ref(av, revkey);
|
append_ref(av, revkey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (strchr(av, '*') || strchr(av, '?')) {
|
if (strchr(av, '*') || strchr(av, '?') || strchr(av, '[')) {
|
||||||
/* glob style match */
|
/* glob style match */
|
||||||
int saved_matches = ref_name_cnt;
|
int saved_matches = ref_name_cnt;
|
||||||
match_ref_pattern = av;
|
match_ref_pattern = av;
|
||||||
|
@ -46,14 +46,14 @@ H=$(doit 8 H $A $F)
|
|||||||
|
|
||||||
test_expect_success 'compute merge-base (single)' \
|
test_expect_success 'compute merge-base (single)' \
|
||||||
'MB=$(git-merge-base G H) &&
|
'MB=$(git-merge-base G H) &&
|
||||||
expr "$(git-name-rev "$MB")" : "[0-9a-f]* B"'
|
expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"'
|
||||||
|
|
||||||
test_expect_success 'compute merge-base (all)' \
|
test_expect_success 'compute merge-base (all)' \
|
||||||
'MB=$(git-merge-base --all G H) &&
|
'MB=$(git-merge-base --all G H) &&
|
||||||
expr "$(git-name-rev "$MB")" : "[0-9a-f]* B"'
|
expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"'
|
||||||
|
|
||||||
test_expect_success 'compute merge-base with show-branch' \
|
test_expect_success 'compute merge-base with show-branch' \
|
||||||
'MB=$(git-show-branch --merge-base G H) &&
|
'MB=$(git-show-branch --merge-base G H) &&
|
||||||
expr "$(git-name-rev "$MB")" : "[0-9a-f]* B"'
|
expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -534,10 +534,17 @@ int main(int argc, const char **argv)
|
|||||||
struct strbuf buf;
|
struct strbuf buf;
|
||||||
strbuf_init(&buf);
|
strbuf_init(&buf);
|
||||||
while (1) {
|
while (1) {
|
||||||
|
char *path_name;
|
||||||
read_line(&buf, stdin, line_termination);
|
read_line(&buf, stdin, line_termination);
|
||||||
if (buf.eof)
|
if (buf.eof)
|
||||||
break;
|
break;
|
||||||
update_one(buf.buf, prefix, prefix_length);
|
if (line_termination && buf.buf[0] == '"')
|
||||||
|
path_name = unquote_c_style(buf.buf, NULL);
|
||||||
|
else
|
||||||
|
path_name = buf.buf;
|
||||||
|
update_one(path_name, prefix, prefix_length);
|
||||||
|
if (path_name != buf.buf)
|
||||||
|
free(path_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (active_cache_changed) {
|
if (active_cache_changed) {
|
||||||
|
Reference in New Issue
Block a user