diff --git a/Documentation/git-replace.txt b/Documentation/git-replace.txt index 8adc1ef55c620d..65a0da508a6be0 100644 --- a/Documentation/git-replace.txt +++ b/Documentation/git-replace.txt @@ -17,31 +17,35 @@ DESCRIPTION Adds a 'replace' reference in `.git/refs/replace/` The name of the 'replace' reference is the SHA1 of the object that is -replaced. The content of the replace reference is the SHA1 of the +replaced. The content of the 'replace' reference is the SHA1 of the replacement object. -Unless `-f` is given, the replace reference must not yet exist in +Unless `-f` is given, the 'replace' reference must not yet exist in `.git/refs/replace/` directory. -Replace references will be used by default by all git commands except -those doing reachability traversal (prune, pack transfer and fsck). +Replacement references will be used by default by all git commands +except those doing reachability traversal (prune, pack transfer and +fsck). -It is possible to disable use of replacement refs for any command -using the --no-replace-objects option just after "git". +It is possible to disable use of replacement references for any +command using the `--no-replace-objects` option just after 'git'. -For example if commit "foo" has been replaced by commit "bar": +For example if commit 'foo' has been replaced by commit 'bar': ------------------------------------------------ -$ git --no-replace-object cat-file commit foo +$ git --no-replace-objects cat-file commit foo ------------------------------------------------ -show information about commit "foo", while: +shows information about commit 'foo', while: ------------------------------------------------ $ git cat-file commit foo ------------------------------------------------ -show information about commit "bar". +shows information about commit 'bar'. + +The 'GIT_NO_REPLACE_OBJECTS' environment variable can be set to +achieve the same effect as the `--no-replace-objects` option. OPTIONS ------- diff --git a/cache.h b/cache.h index 14c88e65c301bf..bf468e52352c19 100644 --- a/cache.h +++ b/cache.h @@ -369,6 +369,7 @@ static inline enum object_type object_type(unsigned int mode) #define CONFIG_ENVIRONMENT "GIT_CONFIG" #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH" #define CEILING_DIRECTORIES_ENVIRONMENT "GIT_CEILING_DIRECTORIES" +#define NO_REPLACE_OBJECTS_ENVIRONMENT "GIT_NO_REPLACE_OBJECTS" #define GITATTRIBUTES_FILE ".gitattributes" #define INFOATTRIBUTES_FILE "info/attributes" #define ATTRIBUTE_MACRO_PREFIX "[attr]" diff --git a/connect.c b/connect.c index 839a1037057d52..db965c9982f1f2 100644 --- a/connect.c +++ b/connect.c @@ -609,6 +609,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig, GIT_WORK_TREE_ENVIRONMENT, GRAFT_ENVIRONMENT, INDEX_ENVIRONMENT, + NO_REPLACE_OBJECTS_ENVIRONMENT, NULL }; conn->env = env; diff --git a/environment.c b/environment.c index 571ab56b7e58e2..5171d9f9a4a300 100644 --- a/environment.c +++ b/environment.c @@ -84,6 +84,8 @@ static void setup_git_env(void) git_graft_file = getenv(GRAFT_ENVIRONMENT); if (!git_graft_file) git_graft_file = git_pathdup("info/grafts"); + if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT)) + read_replace_refs = 0; } int is_bare_repository(void) diff --git a/git.c b/git.c index 743ee57100ac49..11544cdb403771 100644 --- a/git.c +++ b/git.c @@ -89,6 +89,9 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--no-replace-objects")) { read_replace_refs = 0; + setenv(NO_REPLACE_OBJECTS_ENVIRONMENT, "1", 1); + if (envchanged) + *envchanged = 1; } else if (!strcmp(cmd, "--git-dir")) { if (*argc < 2) { fprintf(stderr, "No directory given for --git-dir.\n" ); diff --git a/t/t6050-replace.sh b/t/t6050-replace.sh index d4818b430aad55..203ffdb17a9146 100755 --- a/t/t6050-replace.sh +++ b/t/t6050-replace.sh @@ -77,6 +77,11 @@ test_expect_success 'test --no-replace-objects option' ' git --no-replace-objects show $HASH2 | grep "A U Thor" ' +test_expect_success 'test GIT_NO_REPLACE_OBJECTS env variable' ' + GIT_NO_REPLACE_OBJECTS=1 git cat-file commit $HASH2 | grep "author A U Thor" && + GIT_NO_REPLACE_OBJECTS=1 git show $HASH2 | grep "A U Thor" +' + cat >tag.sig <