Skip to content

Commit

Permalink
Fallback to AppData if XDG_CONFIG_HOME is unset
Browse files Browse the repository at this point in the history
In order to be a better Windows citizenship, Git should
save its configuration files on AppData folder. This can
enables git configuration files be replicated between machines
using the same Microsoft account logon which would reduce the
friction of setting up Git on new systems. Therefore, if
%APPDATA%\Git\config exists, we use it; otherwise
$HOME/.config/git/config is used.

Signed-off-by: Ariel Lourenco <ariellourenco@users.noreply.github.com>
  • Loading branch information
ariellourenco authored and Git for Windows Build Agent committed Oct 25, 2024
1 parent e58e3a4 commit 1fb4278
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions path.c
Original file line number Diff line number Diff line change
Expand Up @@ -1441,6 +1441,7 @@ int looks_like_command_line_option(const char *str)
char *xdg_config_home_for(const char *subdir, const char *filename)
{
const char *home, *config_home;
char *home_config = NULL;

assert(subdir);
assert(filename);
Expand All @@ -1449,10 +1450,26 @@ char *xdg_config_home_for(const char *subdir, const char *filename)
return mkpathdup("%s/%s/%s", config_home, subdir, filename);

home = getenv("HOME");
if (home)
return mkpathdup("%s/.config/%s/%s", home, subdir, filename);
if (home && *home)
home_config = mkpathdup("%s/.config/%s/%s", home, subdir, filename);

#ifdef WIN32
{
const char *appdata = getenv("APPDATA");
if (appdata && *appdata) {
char *appdata_config = mkpathdup("%s/Git/%s", appdata, filename);
if (file_exists(appdata_config)) {
if (home_config && file_exists(home_config))
warning("'%s' was ignored because '%s' exists.", home_config, appdata_config);
free(home_config);
return appdata_config;
}
free(appdata_config);
}
}
#endif

return NULL;
return home_config;
}

char *xdg_config_home(const char *filename)
Expand Down

0 comments on commit 1fb4278

Please sign in to comment.