git-add -f: allow adding otherwise ignored files.
Instead of just warning, refuse to add otherwise ignored files by default, and allow it with an -f option. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
1e423f5655
commit
6a1ad32519
@ -7,7 +7,7 @@ git-add - Add file contents to the changeset to be committed next
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-add' [-n] [-v] [--interactive] [--] <file>...
|
||||
'git-add' [-n] [-v] [-f] [--interactive] [--] <file>...
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -25,7 +25,8 @@ the commit.
|
||||
The 'git status' command can be used to obtain a summary of what is included
|
||||
for the next commit.
|
||||
|
||||
This command can be used to add ignored files, but they have to be
|
||||
This command can be used to add ignored files with `-f` (force)
|
||||
option, but they have to be
|
||||
explicitly and exactly specified from the command line. File globbing
|
||||
and recursive behaviour do not add ignored files.
|
||||
|
||||
@ -48,6 +49,9 @@ OPTIONS
|
||||
-v::
|
||||
Be verbose.
|
||||
|
||||
-f::
|
||||
Allow adding otherwise ignored files.
|
||||
|
||||
\--interactive::
|
||||
Add modified contents in the working tree interactively to
|
||||
the index.
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "cache-tree.h"
|
||||
|
||||
static const char builtin_add_usage[] =
|
||||
"git-add [-n] [-v] [--interactive] [--] <filepattern>...";
|
||||
"git-add [-n] [-v] [-f] [--interactive] [--] <filepattern>...";
|
||||
|
||||
static void prune_directory(struct dir_struct *dir, const char **pathspec, int prefix)
|
||||
{
|
||||
@ -37,9 +37,6 @@ static void prune_directory(struct dir_struct *dir, const char **pathspec, int p
|
||||
free(entry);
|
||||
continue;
|
||||
}
|
||||
if (entry->ignored_entry)
|
||||
fprintf(stderr, "warning: '%s' is an ignored path.\n",
|
||||
entry->name);
|
||||
*dst++ = entry;
|
||||
}
|
||||
dir->nr = dst - dir->entries;
|
||||
@ -94,10 +91,13 @@ static void fill_directory(struct dir_struct *dir, const char **pathspec)
|
||||
|
||||
static struct lock_file lock_file;
|
||||
|
||||
static const char ignore_warning[] =
|
||||
"The following paths are ignored by one of your .gitignore files:\n";
|
||||
|
||||
int cmd_add(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i, newfd;
|
||||
int verbose = 0, show_only = 0;
|
||||
int verbose = 0, show_only = 0, ignored_too = 0;
|
||||
const char **pathspec;
|
||||
struct dir_struct dir;
|
||||
int add_interactive = 0;
|
||||
@ -132,6 +132,10 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
||||
show_only = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "-f")) {
|
||||
ignored_too = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "-v")) {
|
||||
verbose = 1;
|
||||
continue;
|
||||
@ -150,6 +154,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
||||
if (show_only) {
|
||||
const char *sep = "", *eof = "";
|
||||
for (i = 0; i < dir.nr; i++) {
|
||||
if (!ignored_too && dir.entries[i]->ignored_entry)
|
||||
continue;
|
||||
printf("%s%s", sep, dir.entries[i]->name);
|
||||
sep = " ";
|
||||
eof = "\n";
|
||||
@ -161,6 +167,24 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
||||
if (read_cache() < 0)
|
||||
die("index file corrupt");
|
||||
|
||||
if (!ignored_too) {
|
||||
int has_ignored = -1;
|
||||
for (i = 0; has_ignored < 0 && i < dir.nr; i++)
|
||||
if (dir.entries[i]->ignored_entry)
|
||||
has_ignored = i;
|
||||
if (0 <= has_ignored) {
|
||||
fprintf(stderr, ignore_warning);
|
||||
for (i = has_ignored; i < dir.nr; i++) {
|
||||
if (!dir.entries[i]->ignored_entry)
|
||||
continue;
|
||||
fprintf(stderr, "%s\n", dir.entries[i]->name);
|
||||
}
|
||||
fprintf(stderr,
|
||||
"Use -f if you really want to add them.\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < dir.nr; i++)
|
||||
add_file_to_index(dir.entries[i]->name, verbose);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user