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>maint
parent
1e423f5655
commit
6a1ad32519
|
@ -7,7 +7,7 @@ git-add - Add file contents to the changeset to be committed next
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-add' [-n] [-v] [--interactive] [--] <file>...
|
'git-add' [-n] [-v] [-f] [--interactive] [--] <file>...
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
|
@ -25,7 +25,8 @@ the commit.
|
||||||
The 'git status' command can be used to obtain a summary of what is included
|
The 'git status' command can be used to obtain a summary of what is included
|
||||||
for the next commit.
|
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
|
explicitly and exactly specified from the command line. File globbing
|
||||||
and recursive behaviour do not add ignored files.
|
and recursive behaviour do not add ignored files.
|
||||||
|
|
||||||
|
@ -48,6 +49,9 @@ OPTIONS
|
||||||
-v::
|
-v::
|
||||||
Be verbose.
|
Be verbose.
|
||||||
|
|
||||||
|
-f::
|
||||||
|
Allow adding otherwise ignored files.
|
||||||
|
|
||||||
\--interactive::
|
\--interactive::
|
||||||
Add modified contents in the working tree interactively to
|
Add modified contents in the working tree interactively to
|
||||||
the index.
|
the index.
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "cache-tree.h"
|
#include "cache-tree.h"
|
||||||
|
|
||||||
static const char builtin_add_usage[] =
|
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)
|
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);
|
free(entry);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (entry->ignored_entry)
|
|
||||||
fprintf(stderr, "warning: '%s' is an ignored path.\n",
|
|
||||||
entry->name);
|
|
||||||
*dst++ = entry;
|
*dst++ = entry;
|
||||||
}
|
}
|
||||||
dir->nr = dst - dir->entries;
|
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 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 cmd_add(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
int i, newfd;
|
int i, newfd;
|
||||||
int verbose = 0, show_only = 0;
|
int verbose = 0, show_only = 0, ignored_too = 0;
|
||||||
const char **pathspec;
|
const char **pathspec;
|
||||||
struct dir_struct dir;
|
struct dir_struct dir;
|
||||||
int add_interactive = 0;
|
int add_interactive = 0;
|
||||||
|
@ -132,6 +132,10 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
||||||
show_only = 1;
|
show_only = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(arg, "-f")) {
|
||||||
|
ignored_too = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!strcmp(arg, "-v")) {
|
if (!strcmp(arg, "-v")) {
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
continue;
|
continue;
|
||||||
|
@ -150,6 +154,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
||||||
if (show_only) {
|
if (show_only) {
|
||||||
const char *sep = "", *eof = "";
|
const char *sep = "", *eof = "";
|
||||||
for (i = 0; i < dir.nr; i++) {
|
for (i = 0; i < dir.nr; i++) {
|
||||||
|
if (!ignored_too && dir.entries[i]->ignored_entry)
|
||||||
|
continue;
|
||||||
printf("%s%s", sep, dir.entries[i]->name);
|
printf("%s%s", sep, dir.entries[i]->name);
|
||||||
sep = " ";
|
sep = " ";
|
||||||
eof = "\n";
|
eof = "\n";
|
||||||
|
@ -161,6 +167,24 @@ int cmd_add(int argc, const char **argv, const char *prefix)
|
||||||
if (read_cache() < 0)
|
if (read_cache() < 0)
|
||||||
die("index file corrupt");
|
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++)
|
for (i = 0; i < dir.nr; i++)
|
||||||
add_file_to_index(dir.entries[i]->name, verbose);
|
add_file_to_index(dir.entries[i]->name, verbose);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue