GIT_ONE_FILESYSTEM: flip the default to stop at filesystem boundaries
Regarding the new environment variable, Linus Torvalds <torvalds@linux-foundation.org> writes on Tue, 30 Mar 2010 in <alpine.LFD.2.00.1003301537150.3707@i5.linux-foundation.org>: I suspect that it is _very_ unusual to have a source repo that crosses multiple filesystems, and the original reason for this patch-series seems to me to be likely to be more common than that multi-fs case. So having the logic go the other way would seem to match the common case, no? The "crossing filesystem boundary" condition is checked by comparing st_dev field in the result from stat(2). This is slightly worrysome if non-POSIX ports return different values in the field even for directories in the same work tree extracted to the same "filesystem". Erik Faye-Lund confirms that in the msysgit port st_dev is 0, so this should be safe, as "even Windows is safe" ;-) This will affect those who use /.git to cram /etc and /home/me in the same repostiory, /home is mounted from non-root filesystem, and a git operation is done from inside /home/me/src. But that is such a corner case we don't want to give preference over helping people who will benefit from having this default so that they do not have to suffer from slow automounters. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8030e44215
commit
e640551773
@ -531,10 +531,14 @@ git so take care if using Cogito etc.
|
|||||||
(Useful for excluding slow-loading network directories.)
|
(Useful for excluding slow-loading network directories.)
|
||||||
|
|
||||||
'GIT_ONE_FILESYSTEM'::
|
'GIT_ONE_FILESYSTEM'::
|
||||||
If set to a true value ("true" or a non-zero integer), stop at
|
When run in a directory that does not have ".git" repository
|
||||||
filesystem boundaries when looking for a repository directory.
|
directory, git tries to find such a directory in the parent
|
||||||
Like 'GIT_CEILING_DIRECTORIES', it will not affect an explicit
|
directories to find the top of the working tree, but by default it
|
||||||
respository directory set via 'GIT_DIR' or on the command line.
|
does not cross filesystem boundaries. This environment variable
|
||||||
|
can be set to false value ("false" or zero) to tell git not to
|
||||||
|
stop at filesystem boundaries. Like 'GIT_CEILING_DIRECTORIES',
|
||||||
|
this will not affect an explicit respository directory set via
|
||||||
|
'GIT_DIR' or on the command line.
|
||||||
|
|
||||||
git Commits
|
git Commits
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
4
setup.c
4
setup.c
@ -323,7 +323,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
|||||||
const char *gitdirenv;
|
const char *gitdirenv;
|
||||||
const char *gitfile_dir;
|
const char *gitfile_dir;
|
||||||
int len, offset, ceil_offset, root_len;
|
int len, offset, ceil_offset, root_len;
|
||||||
int current_device = 0, one_filesystem = 0;
|
int current_device = 0, one_filesystem = 1;
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -444,7 +444,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
|||||||
}
|
}
|
||||||
cwd[offset] = '\0';
|
cwd[offset] = '\0';
|
||||||
die("Not a git repository (or any parent up to mount parent %s)\n"
|
die("Not a git repository (or any parent up to mount parent %s)\n"
|
||||||
"Stopping at filesystem boundary since GIT_ONE_FILESYSTEM is set.", cwd);
|
"Stopping at filesystem boundary since GIT_ONE_FILESYSTEM is true.", cwd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chdir("..")) {
|
if (chdir("..")) {
|
||||||
|
Loading…
Reference in New Issue
Block a user