[PATCH] Read configuration also from ~/.gitrc
From: Petr Baudis <hidden>
Date: 2016-06-15 22:42:27
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Hi, Dear diary, on Fri, May 26, 2006 at 05:28:37PM CEST, I got a letter where Anand Kumria [off-list ref] said that...
git is unable to construct a reasonable default email address in my current environment. So, I use GIT_AUTHOR_EMAIL and GIT_COMMITTER_EMAIL to override things. This has worked well but, now, I need to vary the email address for some repositories. Unfortunately the environment variables override .git/config. It would be good if things were like: - try to construct one automagically - use ~/.git/config (if available) - use .git/config - use environment variables That way I could set my default email address in ~/.git/config and override it as required for those repositories that need it.
hmm, might it be as simple as this? --- This command makes Git read configuration from ~/.gitrc in addition to the per-repository .git/config configuration file, and updates the documentation accordingly (and also expands it a little). Idea by Anand Kumria. Signed-off-by: Petr Baudis <redacted> --- Documentation/git-commit-tree.txt | 9 +++++---- Documentation/git-repo-config.txt | 6 +++--- Documentation/git-var.txt | 5 +++-- Documentation/git.txt | 15 +++++++++++---- config.c | 6 +++++- 5 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt
index 41d1a1c..1b0d102 100644
--- a/Documentation/git-commit-tree.txt
+++ b/Documentation/git-commit-tree.txt@@ -49,8 +49,9 @@ A commit encapsulates: - committer name and email and the commit time. If not provided, "git-commit-tree" uses your name, hostname and domain to -provide author and committer info. This can be overridden by -either `.git/config` file, or using the following environment variables. +provide author and committer info. This can be overridden by either the +`~/.gitrc` file, the `.git/config` file, or using the following +environment variables. GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
@@ -60,8 +61,8 @@ either `.git/config` file, or using the (nb "<", ">" and "\n"s are stripped) -In `.git/config` file, the following items are used for GIT_AUTHOR_NAME and -GIT_AUTHOR_EMAIL: +In the configuration file, the following items are used for GIT_AUTHOR_NAME +and GIT_AUTHOR_EMAIL: [user] name = "Your Name"
diff --git a/Documentation/git-repo-config.txt b/Documentation/git-repo-config.txt
index 660c18f..bb7f81f 100644
--- a/Documentation/git-repo-config.txt
+++ b/Documentation/git-repo-config.txt@@ -3,7 +3,7 @@ git-repo-config(1) NAME ---- -git-repo-config - Get and set options in .git/config +git-repo-config - Get and set git runtime configuration options SYNOPSIS
@@ -37,7 +37,7 @@ no checks or transformations are perform This command will fail if: -. The .git/config file is invalid, +. The configuration file is invalid, . Can not write to .git/config, . no section was provided, . the section or key is invalid,
@@ -70,7 +70,7 @@ OPTIONS Remove all matching lines from .git/config. -l, --list:: - List all variables set in .git/config. + List all variables set in ~/.gitrc or .git/config. EXAMPLE
diff --git a/Documentation/git-var.txt b/Documentation/git-var.txt
index a5b1a0d..4679aef 100644
--- a/Documentation/git-var.txt
+++ b/Documentation/git-var.txt@@ -18,8 +18,9 @@ OPTIONS ------- -l:: Cause the logical variables to be listed. In addition, all the - variables of the git configuration file .git/config are listed - as well. (However, the configuration variables listing functionality + variables of the git configuration files `~/.gitrc` and `.git/config` + are listed as well. + (However, the configuration variables listing functionality is deprecated in favor of `git-repo-config -l`.) EXAMPLE
diff --git a/Documentation/git.txt b/Documentation/git.txt
index e474bdf..f4e5df5 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt@@ -116,7 +116,7 @@ gitlink:git-read-tree[1]:: Reads tree information into the index. gitlink:git-repo-config[1]:: - Get and set options in .git/config. + Get and set git runtime configuration options. gitlink:git-unpack-objects[1]:: Unpacks objects out of a packed archive.
@@ -473,8 +473,7 @@ gitlink:gitk[1]:: Configuration Mechanism ----------------------- -Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file -is used to hold per-repository configuration options. It is a +You can adjust the Git behaviour by a configuration file. It is a simple text file modelled after `.ini` format familiar to some people. Here is an example:
@@ -496,7 +495,15 @@ # ------------ Various commands read from the configuration file and adjust -their operation accordingly. +their operation accordingly. See gitlink:git-repo-config[1] +for details and list of options. + +Git first reads the per-user global configuration from `~/.gitrc` +and then per-repository configuration from the `.git/config` file. +Either of these files may be missing; the per-repository configuration +wins in case of a conflict. Some behaviour can be also tweaked using +environment variables; in general, they take precedence over configuration +options. Identifier Terminology
diff --git a/config.c b/config.c
index 0248c6d..8a98865 100644
--- a/config.c
+++ b/config.c@@ -312,7 +312,11 @@ int git_config_from_file(config_fn_t fn, int git_config(config_fn_t fn) { - return git_config_from_file(fn, git_path("config")); + int ret = 0; + if (getenv("HOME")) + ret += git_config_from_file(fn, mkpath("%s/.gitrc", getenv("HOME"))); + ret += git_config_from_file(fn, git_path("config")); + return ret; } /*
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
A person is just about as big as the things that make them angry.