I keep my rc files, including .gitconfig and my default gitignore list under version control and like to have the same contents everywhere. Unfortunately my home directory is at different locations on different systems. I'd like to be able to put something like this in my ~/.gitconfig: [core] excludesfile = ~/.gitignore or excludesfile = $HOME/.gitignore Another idea is to have a non-absolute path be interpreted relative to the location of .gitconfig, i.e. $HOME, instead of the current directory. $GIT_DIR/info/excludes is already for repository-specific excludes so no functionality would be lost. Below is a sample patch that works for me. We could also use getpwuid(getuid()) instead of getenv("HOME") to be consistent with user_path() but this is simpler and arguably more likely what the user wants when it matters. >From 6eb18f8ade791521bdad955e1da2b40399a426f0 Mon Sep 17 00:00:00 2001 From: Karl Chen <quarl@xxxxxxxxx> Date: Thu, 21 Aug 2008 21:00:26 -0700 Subject: [PATCH] Support "core.excludesfile = ~/.gitignore" The config variable core.excludesfile is parsed to substitute leading "~/" with getenv("HOME"). Signed-off-by: Karl Chen <quarl@xxxxxxxxx> --- config.c | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config.c b/config.c index 53f04a0..41061d2 100644 --- a/config.c +++ b/config.c @@ -334,6 +334,18 @@ int git_config_string(const char **dest, const char *var, const char *value) return 0; } +static char const *git_config_subst_userdir(char const *value) { + if (value[0] == '~' && value[1] == '/') { + const char *home = getenv("HOME"); + char *userdir_excludes_file = malloc(strlen(home) + strlen(value)-1 + 1); + strcpy(userdir_excludes_file, home); + strcat(userdir_excludes_file, value+1); + return userdir_excludes_file; + } else { + return xstrdup(value); + } +} + static int git_default_core_config(const char *var, const char *value) { /* This needs a better name */ @@ -456,8 +468,12 @@ static int git_default_core_config(const char *var, const char *value) if (!strcmp(var, "core.editor")) return git_config_string(&editor_program, var, value); - if (!strcmp(var, "core.excludesfile")) - return git_config_string(&excludes_file, var, value); + if (!strcmp(var, "core.excludesfile")) { + if (!value) + return config_error_nonbool(var); + excludes_file = git_config_subst_userdir(value); + return 0; + } if (!strcmp(var, "core.whitespace")) { if (!value) -- 1.5.6.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html