{"thread":{"id":"6556","subject":"git user's manual","startedAt":"2007-01-27T06:28:26Z","lastAt":"2007-01-29T17:35:40Z","messageCount":18,"participants":["J. Bruce Fields","Matthias Lederhofer","Linus Torvalds","Junio C Hamano","Nicolas Pitre","Tom Prince","Jakub Narebski","Mark Wooding"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"32802","messageId":"20070127062826.GE14205@fieldses.org","threadId":"6556","inReplyTo":null,"subject":"git user's manual","fromName":"J. Bruce Fields","fromEmail":"bfields@fieldses.org","sentAt":"2007-01-27T06:28:26Z","receivedAt":"2007-01-27T06:28:26Z","isPatch":false,"sender":{"key":"bfields@citi.umich.edu","avatar":null},"body":"I'm still tinkering with this \"Git User's Manual\"; you can see the\ncurrent draft at:\n\n\thttp://fieldses.org/~bfields/git-user-manual.html\n\nor get the source from the branch master in:\n\n\tgit://linux-nfs.org/~bfields/git.git\n\nChanges include:\n\n\t- a \"quick start\" with a bunch of commands and no explanation,\n\t  as the first chapter\n\t- discussion of git-remote, presenting that as the primary\n\t  method for tracking remotes and postponing fetches of\n\t  individual branches till later.  (Is this a sensible\n\t  approach?)\n\t- import of a slightly modified version of the README as the\n\t  start of a \"git internals' chapter.\n\t- discussion of history rewriting, pitfalls thereof,\n\t  cherry-pick, rebase, etc.\n\t- updates to try to track recent interface improvements,\n\t  etc.\n\nSo it's longer, but still incomplete, and some of it's probably quite\nwrong....\n\nDespite that I'm tempted to ask that it be merged some time soon and\njust not referred to much yet; then hopefully people could help bludgeon\nit into shape before we start adding pointers to it from elsewhere.\n\nThen we'll have to figure out whether it could obsolete any existing\ndocumentation.  I'd kind of like to rip out tutorial-2.txt at least, and\nmaybe absorb cvs-migration and a few other things as new chapters.\n\nI dunno; thoughts?\n\n--b.\n"},{"id":"32888","messageId":"20070128002246.GA10179@moooo.ath.cx","threadId":"6556","inReplyTo":"20070127062826.GE14205@fieldses.org","subject":"[PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Matthias Lederhofer","fromEmail":"matled@gmx.net","sentAt":"2007-01-28T00:22:46Z","receivedAt":"2007-01-28T00:22:46Z","isPatch":true,"sender":{"key":"matled@gmx.net","avatar":null},"body":"---\nThere are some other places where direct editing of .git/config is\nsuggested.  I'd rather tell the user to use repo-config and add a note\nthat repo-config saves the configuration to .git/config (or\n~/.gitconfig with --global) which can be edited by hand too.\ncat .git/config to show the remote configuration can be replaced by\ngit-repo-config -l | grep '^remote\\.'\n---\n Documentation/user-manual.txt |    7 ++-----\n 1 files changed, 2 insertions(+), 5 deletions(-)\n\ndiff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt\nindex 87c605f..7a286d4 100644\n--- a/Documentation/user-manual.txt\n+++ b/Documentation/user-manual.txt\n@@ -153,11 +153,8 @@ Making changes\n Make sure git knows who to blame:\n \n ------------------------------------------------\n-$ cat >~/.gitconfig <<\\EOF\n-[user]\n-name = Your Name Comes Here\n-email = you@yourdomain.example.com\n-EOF\n+$ git repo-config --global user.name \"Your Name Comes Here\"\n+$ git repo-config --global user.email you@yourdomain.example.com\n ------------------------------------------------\n \n Select file contents to include in the next commit, then make the\n-- \n1.5.0.rc2.g18af\n"},{"id":"32889","messageId":"Pine.LNX.4.64.0701271625120.25027@woody.linux-foundation.org","threadId":"6556","inReplyTo":"20070128002246.GA10179@moooo.ath.cx","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2007-01-28T00:32:14Z","receivedAt":"2007-01-28T00:32:14Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Sun, 28 Jan 2007, Matthias Lederhofer wrote:\n>\n> There are some other places where direct editing of .git/config is\n> suggested.  I'd rather tell the user to use repo-config and add a note\n> that repo-config saves the configuration to .git/config (or\n> ~/.gitconfig with --global) which can be edited by hand too.\n> cat .git/config to show the remote configuration can be replaced by\n> git-repo-config -l | grep '^remote\\.'\n\nI dunno. I really think that editing the config file is actually simpler.\n\nThe \"git repo-config\" thing is really usefull from scripting, and for \ngeneral automation, but maybe it's just me - I find human-readable ASCII \nfiles that you can put comments in etc just *nice*.\n\nI think the whole notion that you have to use a tool to edit \nconfigurations is asinine. It's good to have a tool for automation, but \nit's bad if that's the only way to interact with the system.\n\nThe first time I had to use AIX, and realized that they do everything with \nsome crazy system management tool, and that you can't do anything by \nediting files in /etc, I realized that IBM was totally incompetent when it \ncame to UNIX.\n\nI mean, do people _really_ think that it's easier to do black magic \nscripts like\n\n\tgit repo-config --global user.name \"Your Name Comes Here\"\n\n(which not only looks scary, but means that the user will never learn \nabout the git config file at all), or just somebody saying:\n\n\t\"Fill your .git/config file with\n\n\t\t[user]\n\t\t\tname = Your Name Here\n\t\t\temail = your@email.example\n\n\t and be happy\"\n\nI'm just saying that the second example seems to not only be more \nhuman-friendly, it actually teaches people something that \"git \nrepo-config\" never did. \n\nMaybe most users will just do what they are told without thinking about \nit, but then some users will look at that and say \"Ahh, there's a \n.git/config file, I wonder what else I could do there..\"\n\n\t\t\tLinus\n"},{"id":"32890","messageId":"20070128013452.GA11244@moooo.ath.cx","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701271625120.25027@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Matthias Lederhofer","fromEmail":"matled@gmx.net","sentAt":"2007-01-28T01:34:52Z","receivedAt":"2007-01-28T01:34:52Z","isPatch":true,"sender":{"key":"matled@gmx.net","avatar":null},"body":"Linus Torvalds <torvalds@linux-foundation.org> wrote:\n> I dunno. I really think that editing the config file is actually simpler.\n> \n> The \"git repo-config\" thing is really usefull from scripting, and for \n> general automation, but maybe it's just me - I find human-readable ASCII \n> files that you can put comments in etc just *nice*.\n> \n> I think the whole notion that you have to use a tool to edit \n> configurations is asinine. It's good to have a tool for automation, but \n> it's bad if that's the only way to interact with the system.\n> \n> The first time I had to use AIX, and realized that they do everything with \n> some crazy system management tool, and that you can't do anything by \n> editing files in /etc, I realized that IBM was totally incompetent when it \n> came to UNIX.\n> \n> I mean, do people _really_ think that it's easier to do black magic \n> scripts like\n> \n> \tgit repo-config --global user.name \"Your Name Comes Here\"\n> \n> (which not only looks scary, but means that the user will never learn \n> about the git config file at all), or just somebody saying:\n> \n> \t\"Fill your .git/config file with\n> \n> \t\t[user]\n> \t\t\tname = Your Name Here\n> \t\t\temail = your@email.example\n> \n> \t and be happy\"\n> \n> I'm just saying that the second example seems to not only be more \n> human-friendly, it actually teaches people something that \"git \n> repo-config\" never did. \n> \n> Maybe most users will just do what they are told without thinking about \n> it, but then some users will look at that and say \"Ahh, there's a \n> .git/config file, I wonder what else I could do there..\"\n\nGood point, otoh the git-repo-config manual page is actually the one\ndocumenting .git/config :).  Therefore I think the manual should\nmention git-repo-config(1) for information on .git/config with the\nfirst use of the config file (actually the second because the first is\nin part 1 which is only a list of commands).\n\nLater in the manual git-repo-config is used to read (-l) and edit the\nconfig file, perhaps there should be a short sentence that there is no\ndifference to editing .git/config directly.\n\n---\nuser-manual: mention git-repo-config(1) with .git/config\n\n---\n Documentation/user-manual.txt |    3 ++-\n 1 files changed, 2 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt\nindex 87c605f..509a867 100644\n--- a/Documentation/user-manual.txt\n+++ b/Documentation/user-manual.txt\n@@ -603,7 +603,8 @@ $ cat .git/config\n \n This is what causes git to track the remote's branches; you may\n modify or delete these configuration options by editing .git/config\n-with a text editor.\n+with a text editor.  See gitlink:git-repo-config[1] for more\n+information on .git/config.\n \n Exploring git history\n =====================\n-- \n1.5.0.rc2.g18af\n"},{"id":"32891","messageId":"Pine.LNX.4.64.0701271745000.25027@woody.linux-foundation.org","threadId":"6556","inReplyTo":"20070128013452.GA11244@moooo.ath.cx","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2007-01-28T01:47:49Z","receivedAt":"2007-01-28T01:47:49Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Sun, 28 Jan 2007, Matthias Lederhofer wrote:\n> \n> Good point, otoh the git-repo-config manual page is actually the one\n> documenting .git/config :).\n\nBtw, one thing I don't like about \"git-repo-config\" is the name.\n\nMany people thought \"git init-db\" was confusing, and now we call it just \n\"git init\".\n\nCan I vote for doing that for \"git repo-config\" too? Is there something \nwrong with just calling it \"git config\"?\n\nEspecially as it's not even repo-specific. Use \"--global\", and it has \nalmost nothing at all to do with the particular \"repo\" you're working \nwith.\n\nWhat would also mean that we'd have the man-page with a simple\n\n\tman git-config\n\nwhich makes tons of sense if it documents both the config file *and* the \n\"git config\" program.\n\nOr is that too sneaky?\n\n\t\tLinus\n"},{"id":"32892","messageId":"7vodojhpos.fsf@assigned-by-dhcp.cox.net","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701271745000.25027@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-28T02:04:35Z","receivedAt":"2007-01-28T02:04:35Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linus Torvalds <torvalds@linux-foundation.org> writes:\n\n> What would also mean that we'd have the man-page with a simple\n>\n> \tman git-config\n>\n> which makes tons of sense if it documents both the config file *and* the \n> \"git config\" program.\n>\n> Or is that too sneaky?\n\nI like that.\n\nIf the solution can help us deprecate and eventually remove\ngit-var that would be ultra-nice.\n"},{"id":"32897","messageId":"20070128024009.GB6545@socrates.priv","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701271745000.25027@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Tom Prince","fromEmail":"tom.prince@ualberta.net","sentAt":"2007-01-28T02:40:09Z","receivedAt":"2007-01-28T02:40:09Z","isPatch":true,"sender":{"key":"tom.prince@ualberta.net","avatar":"https://gravatar.com/avatar/a0ad19caee7618876339485106ec994f5202505eecd210ba5c0bd869feaa555a?d=mp&s=160"},"body":"On Sat, Jan 27, 2007 at 05:47:49PM -0800, Linus Torvalds wrote:\n> Btw, one thing I don't like about \"git-repo-config\" is the name.\n>\n> Many people thought \"git init-db\" was confusing, and now we call it just\n> \"git init\".\n>\n> Can I vote for doing that for \"git repo-config\" too? Is there something\n> wrong with just calling it \"git config\"?\n>\n> Especially as it's not even repo-specific. Use \"--global\", and it has\n> almost nothing at all to do with the particular \"repo\" you're working\n> with.\n>\n> What would also mean that we'd have the man-page with a simple\n>\n>       man git-config\n>\n> which makes tons of sense if it documents both the config file *and* the\n> \"git config\" program.\n>\n> Or is that too sneaky?\n>\n>               Linus\n---\n .gitignore                                         |    1 +\n Documentation/cmd-list.perl                        |    2 +-\n Documentation/config.txt                           |    2 +-\n Documentation/core-tutorial.txt                    |    2 +-\n Documentation/cvs-migration.txt                    |    2 +-\n Documentation/everyday.txt                         |    4 +-\n Documentation/git-config.txt                       |  227 ++++++++++++++++++++\n Documentation/git-pull.txt                         |    4 +-\n Documentation/git-remote.txt                       |    4 +-\n Documentation/git-repo-config.txt                  |  227 --------------------\n Documentation/git-svn.txt                          |   20 +-\n Documentation/git-update-index.txt                 |    4 +-\n Documentation/git-var.txt                          |    4 +-\n Documentation/git.txt                              |    2 +-\n Documentation/howto/setup-git-server-over-http.txt |    4 +-\n Documentation/tutorial.txt                         |    8 +-\n Makefile                                           |    4 +-\n builtin-config.c                                   |  220 +++++++++++++++++++\n builtin-repo-config.c                              |  220 -------------------\n builtin.h                                          |    2 +-\n contrib/completion/git-completion.bash             |   15 +-\n contrib/emacs/git.el                               |    8 +-\n contrib/gitview/gitview                            |    2 +-\n contrib/remotes2config.sh                          |    4 +-\n git-clone.sh                                       |   10 +-\n git-commit.sh                                      |    4 +-\n git-cvsserver.perl                                 |    6 +-\n git-fetch.sh                                       |    2 +-\n git-instaweb.sh                                    |   10 +-\n git-ls-remote.sh                                   |    2 +-\n git-merge.sh                                       |    4 +-\n git-p4import.py                                    |    4 +-\n git-parse-remote.sh                                |   14 +-\n git-remote.perl                                    |    8 +-\n git-repack.sh                                      |    2 +-\n git-revert.sh                                      |    2 +-\n git-sh-setup.sh                                    |    2 +-\n git-svn.perl                                       |   20 +-\n git.c                                              |    3 +-\n gitk                                               |    2 +-\n gitweb/gitweb.perl                                 |    2 +-\n ident.c                                            |    4 +-\n perl/Git.pm                                        |    8 +-\n t/t1300-repo-config.sh                             |  102 +++++-----\n t/t1400-update-ref.sh                              |    4 +-\n t/t1410-reflog.sh                                  |    2 +-\n t/t3200-branch.sh                                  |    6 +-\n t/t3700-add.sh                                     |    6 +-\n t/t3900-i18n-commit.sh                             |   24 +-\n t/t3901-i18n-patch.sh                              |   58 +++---\n t/t4000-diff-format.sh                             |    2 +-\n t/t4006-diff-mode.sh                               |    2 +-\n t/t4013-diff-various.sh                            |    2 +-\n t/t4102-apply-rename.sh                            |    2 +-\n t/t5301-sliding-window.sh                          |   14 +-\n t/t5400-send-pack.sh                               |    2 +-\n t/t5500-fetch-pack.sh                              |    2 +-\n t/t5510-fetch.sh                                   |   10 +-\n t/t6200-fmt-merge-msg.sh                           |    6 +-\n 59 files changed, 674 insertions(+), 671 deletions(-)\n create mode 100644 Documentation/git-config.txt\n delete mode 100644 Documentation/git-repo-config.txt\n create mode 100644 builtin-config.c\n delete mode 100644 builtin-repo-config.c\n\ndiff --git a/.gitignore b/.gitignore\nindex 6da1cdb..b4dccd7 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -23,6 +23,7 @@ git-clean\n git-clone\n git-commit\n git-commit-tree\n+git-config\n git-convert-objects\n git-count-objects\n git-cvsexportcommit\ndiff --git a/Documentation/cmd-list.perl b/Documentation/cmd-list.perl\nindex 744db82..8244625 100755\n--- a/Documentation/cmd-list.perl\n+++ b/Documentation/cmd-list.perl\n@@ -144,7 +144,7 @@ git-receive-pack                        synchelpers\n git-reflog                              ancillarymanipulators\n git-relink                              ancillarymanipulators\n git-repack                              ancillarymanipulators\n-git-repo-config                         ancillarymanipulators\n+git-config                              ancillarymanipulators\n git-request-pull                        foreignscminterface\n git-rerere                              ancillaryinterrogators\n git-reset                               mainporcelain\ndiff --git a/Documentation/config.txt b/Documentation/config.txt\nindex 3f2fa09..4897c55 100644\n--- a/Documentation/config.txt\n+++ b/Documentation/config.txt\n@@ -62,7 +62,7 @@ The values following the equals sign in variable assign are all either\n a string, an integer, or a boolean.  Boolean values may be given as yes/no,\n 0/1 or true/false.  Case is not significant in boolean values, when\n converting value to the canonical form using '--bool' type specifier;\n-`git-repo-config` will ensure that the output is \"true\" or \"false\".\n+`git-config` will ensure that the output is \"true\" or \"false\".\n \n String values may be entirely or partially enclosed in double quotes.\n You need to enclose variable value in double quotes if you want to\ndiff --git a/Documentation/core-tutorial.txt b/Documentation/core-tutorial.txt\nindex 7317489..86a9c75 100644\n--- a/Documentation/core-tutorial.txt\n+++ b/Documentation/core-tutorial.txt\n@@ -1130,7 +1130,7 @@ the remote repository URL in the local repository's config file\n like this:\n \n ------------------------------------------------\n-$ git repo-config remote.linus.url http://www.kernel.org/pub/scm/git/git.git/\n+$ git config remote.linus.url http://www.kernel.org/pub/scm/git/git.git/\n ------------------------------------------------\n \n and use the \"linus\" keyword with `git pull` instead of the full URL.\ndiff --git a/Documentation/cvs-migration.txt b/Documentation/cvs-migration.txt\nindex 775bf42..764cc56 100644\n--- a/Documentation/cvs-migration.txt\n+++ b/Documentation/cvs-migration.txt\n@@ -36,7 +36,7 @@ them first before running git pull.\n ================================\n The `pull` command knows where to get updates from because of certain\n configuration variables that were set by the first `git clone`\n-command; see `git repo-config -l` and the gitlink:git-repo-config[1] man\n+command; see `git config -l` and the gitlink:git-config[1] man\n page for details.\n ================================\n \ndiff --git a/Documentation/everyday.txt b/Documentation/everyday.txt\nindex ca36a76..fbbbc92 100644\n--- a/Documentation/everyday.txt\n+++ b/Documentation/everyday.txt\n@@ -212,12 +212,12 @@ Push into another repository.::\n ------------\n satellite$ git clone mothership:frotz frotz <1>\n satellite$ cd frotz\n-satellite$ git repo-config --get-regexp '^(remote|branch)\\.' <2>\n+satellite$ git config --get-regexp '^(remote|branch)\\.' <2>\n remote.origin.url mothership:frotz\n remote.origin.fetch refs/heads/*:refs/remotes/origin/*\n branch.master.remote origin\n branch.master.merge refs/heads/master\n-satellite$ git repo-config remote.origin.push \\\n+satellite$ git config remote.origin.push \\\n            master:refs/remotes/satellite/master <3>\n satellite$ edit/compile/test/commit\n satellite$ git push origin <4>\ndiff --git a/Documentation/git-config.txt b/Documentation/git-config.txt\nnew file mode 100644\nindex 0000000..b0dbfb2\n--- /dev/null\n+++ b/Documentation/git-config.txt\n@@ -0,0 +1,227 @@\n+git-config(1)\n+==================\n+\n+NAME\n+----\n+git-config - Get and set repository or global options\n+\n+\n+SYNOPSIS\n+--------\n+[verse]\n+'git-config' [--global] [type] name [value [value_regex]]\n+'git-config' [--global] [type] --add name value\n+'git-config' [--global] [type] --replace-all name [value [value_regex]]\n+'git-config' [--global] [type] --get name [value_regex]\n+'git-config' [--global] [type] --get-all name [value_regex]\n+'git-config' [--global] [type] --unset name [value_regex]\n+'git-config' [--global] [type] --unset-all name [value_regex]\n+'git-config' [--global] -l | --list\n+\n+DESCRIPTION\n+-----------\n+You can query/set/replace/unset options with this command. The name is\n+actually the section and the key separated by a dot, and the value will be\n+escaped.\n+\n+Multiple lines can be added to an option by using the '--add' option.\n+If you want to update or unset an option which can occur on multiple\n+lines, a POSIX regexp `value_regex` needs to be given.  Only the\n+existing values that match the regexp are updated or unset.  If\n+you want to handle the lines that do *not* match the regex, just\n+prepend a single exclamation mark in front (see EXAMPLES).\n+\n+The type specifier can be either '--int' or '--bool', which will make\n+'git-config' ensure that the variable(s) are of the given type and\n+convert the value to the canonical form (simple decimal number for int,\n+a \"true\" or \"false\" string for bool). If no type specifier is passed,\n+no checks or transformations are performed on the value.\n+\n+This command will fail if:\n+\n+. The .git/config file is invalid,\n+. Can not write to .git/config,\n+. no section was provided,\n+. the section or key is invalid,\n+. you try to unset an option which does not exist,\n+. you try to unset/set an option for which multiple lines match, or\n+. you use --global option without $HOME being properly set.\n+\n+\n+OPTIONS\n+-------\n+\n+--replace-all::\n+\tDefault behavior is to replace at most one line. This replaces\n+\tall lines matching the key (and optionally the value_regex).\n+\n+--add::\n+\tAdds a new line to the option without altering any existing\n+\tvalues.  This is the same as providing '^$' as the value_regex.\n+\n+--get::\n+\tGet the value for a given key (optionally filtered by a regex\n+\tmatching the value). Returns error code 1 if the key was not\n+\tfound and error code 2 if multiple key values were found.\n+\n+--get-all::\n+\tLike get, but does not fail if the number of values for the key\n+\tis not exactly one.\n+\n+--get-regexp::\n+\tLike --get-all, but interprets the name as a regular expression.\n+\n+--global::\n+\tUse global ~/.gitconfig file rather than the repository .git/config.\n+\n+--unset::\n+\tRemove the line matching the key from config file.\n+\n+--unset-all::\n+\tRemove all matching lines from config file.\n+\n+-l, --list::\n+\tList all variables set in config file.\n+\n+--bool::\n+\tgit-config will ensure that the output is \"true\" or \"false\"\n+\n+--int::\n+\tgit-config will ensure that the output is a simple\n+\tdecimal number.  An optional value suffix of 'k', 'm', or 'g'\n+\tin the config file will cause the value to be multiplied\n+\tby 1024, 1048576, or 1073741824 prior to output.\n+\n+\n+ENVIRONMENT\n+-----------\n+\n+GIT_CONFIG::\n+\tTake the configuration from the given file instead of .git/config.\n+\tUsing the \"--global\" option forces this to ~/.gitconfig.\n+\n+GIT_CONFIG_LOCAL::\n+\tCurrently the same as $GIT_CONFIG; when Git will support global\n+\tconfiguration files, this will cause it to take the configuration\n+\tfrom the global configuration file in addition to the given file.\n+\n+\n+EXAMPLE\n+-------\n+\n+Given a .git/config like this:\n+\n+\t#\n+\t# This is the config file, and\n+\t# a '#' or ';' character indicates\n+\t# a comment\n+\t#\n+\n+\t; core variables\n+\t[core]\n+\t\t; Don't trust file modes\n+\t\tfilemode = false\n+\n+\t; Our diff algorithm\n+\t[diff]\n+\t\texternal = \"/usr/local/bin/gnu-diff -u\"\n+\t\trenames = true\n+\n+\t; Proxy settings\n+\t[core]\n+\t\tgitproxy=\"ssh\" for \"ssh://kernel.org/\"\n+\t\tgitproxy=\"proxy-command\" for kernel.org\n+\t\tgitproxy=\"myprotocol-command\" for \"my://\"\n+\t\tgitproxy=default-proxy ; for all the rest\n+\n+you can set the filemode to true with\n+\n+------------\n+% git config core.filemode true\n+------------\n+\n+The hypothetical proxy command entries actually have a postfix to discern\n+what URL they apply to. Here is how to change the entry for kernel.org\n+to \"ssh\".\n+\n+------------\n+% git config core.gitproxy '\"ssh\" for kernel.org' 'for kernel.org$'\n+------------\n+\n+This makes sure that only the key/value pair for kernel.org is replaced.\n+\n+To delete the entry for renames, do\n+\n+------------\n+% git config --unset diff.renames\n+------------\n+\n+If you want to delete an entry for a multivar (like core.gitproxy above),\n+you have to provide a regex matching the value of exactly one line.\n+\n+To query the value for a given key, do\n+\n+------------\n+% git config --get core.filemode\n+------------\n+\n+or\n+\n+------------\n+% git config core.filemode\n+------------\n+\n+or, to query a multivar:\n+\n+------------\n+% git config --get core.gitproxy \"for kernel.org$\"\n+------------\n+\n+If you want to know all the values for a multivar, do:\n+\n+------------\n+% git config --get-all core.gitproxy\n+------------\n+\n+If you like to live dangerous, you can replace *all* core.gitproxy by a\n+new one with\n+\n+------------\n+% git config --replace-all core.gitproxy ssh\n+------------\n+\n+However, if you really only want to replace the line for the default proxy,\n+i.e. the one without a \"for ...\" postfix, do something like this:\n+\n+------------\n+% git config core.gitproxy ssh '! for '\n+------------\n+\n+To actually match only values with an exclamation mark, you have to\n+\n+------------\n+% git config section.key value '[!]'\n+------------\n+\n+To add a new proxy, without altering any of the existing ones, use\n+\n+------------\n+% git config core.gitproxy '\"proxy\" for example.com'\n+------------\n+\n+\n+include::config.txt[]\n+\n+\n+Author\n+------\n+Written by Johannes Schindelin <Johannes.Schindelin@gmx.de>\n+\n+Documentation\n+--------------\n+Documentation by Johannes Schindelin, Petr Baudis and the git-list <git@vger.kernel.org>.\n+\n+GIT\n+---\n+Part of the gitlink:git[7] suite\n+\ndiff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt\nindex 3e5f115..a81d68c 100644\n--- a/Documentation/git-pull.txt\n+++ b/Documentation/git-pull.txt\n@@ -42,7 +42,7 @@ git pull, git pull origin::\n \tcurrent branch.  Normally the branch merged in is\n \tthe HEAD of the remote repository, but the choice is\n \tdetermined by the branch.<name>.remote and\n-\tbranch.<name>.merge options; see gitlink:git-repo-config[1]\n+\tbranch.<name>.merge options; see gitlink:git-config[1]\n \tfor details.\n \n git pull origin next::\n@@ -94,7 +94,7 @@ gitlink:git-reset[1].\n \n SEE ALSO\n --------\n-gitlink:git-fetch[1], gitlink:git-merge[1], gitlink:git-repo-config[1]\n+gitlink:git-fetch[1], gitlink:git-merge[1], gitlink:git-config[1]\n \n \n Author\ndiff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt\nindex 5b93a8c..358c1ac 100644\n--- a/Documentation/git-remote.txt\n+++ b/Documentation/git-remote.txt\n@@ -28,7 +28,7 @@ In the third form, gives some information about the remote <name>.\n \n The remote configuration is achieved using the `remote.origin.url` and\n `remote.origin.fetch` configuration variables.  (See\n-gitlink:git-repo-config[1]).\n+gitlink:git-config[1]).\n \n Examples\n --------\n@@ -58,7 +58,7 @@ See Also\n --------\n gitlink:git-fetch[1]\n gitlink:git-branch[1]\n-gitlink:git-repo-config[1]\n+gitlink:git-config[1]\n \n Author\n ------\ndiff --git a/Documentation/git-repo-config.txt b/Documentation/git-repo-config.txt\ndeleted file mode 100644\nindex 9db3d30..0000000\n--- a/Documentation/git-repo-config.txt\n+++ /dev/null\n@@ -1,227 +0,0 @@\n-git-repo-config(1)\n-==================\n-\n-NAME\n-----\n-git-repo-config - Get and set repository or global options\n-\n-\n-SYNOPSIS\n---------\n-[verse]\n-'git-repo-config' [--global] [type] name [value [value_regex]]\n-'git-repo-config' [--global] [type] --add name value\n-'git-repo-config' [--global] [type] --replace-all name [value [value_regex]]\n-'git-repo-config' [--global] [type] --get name [value_regex]\n-'git-repo-config' [--global] [type] --get-all name [value_regex]\n-'git-repo-config' [--global] [type] --unset name [value_regex]\n-'git-repo-config' [--global] [type] --unset-all name [value_regex]\n-'git-repo-config' [--global] -l | --list\n-\n-DESCRIPTION\n------------\n-You can query/set/replace/unset options with this command. The name is\n-actually the section and the key separated by a dot, and the value will be\n-escaped.\n-\n-Multiple lines can be added to an option by using the '--add' option.\n-If you want to update or unset an option which can occur on multiple\n-lines, a POSIX regexp `value_regex` needs to be given.  Only the\n-existing values that match the regexp are updated or unset.  If\n-you want to handle the lines that do *not* match the regex, just\n-prepend a single exclamation mark in front (see EXAMPLES).\n-\n-The type specifier can be either '--int' or '--bool', which will make\n-'git-repo-config' ensure that the variable(s) are of the given type and\n-convert the value to the canonical form (simple decimal number for int,\n-a \"true\" or \"false\" string for bool). If no type specifier is passed,\n-no checks or transformations are performed on the value.\n-\n-This command will fail if:\n-\n-. The .git/config file is invalid,\n-. Can not write to .git/config,\n-. no section was provided,\n-. the section or key is invalid,\n-. you try to unset an option which does not exist,\n-. you try to unset/set an option for which multiple lines match, or\n-. you use --global option without $HOME being properly set.\n-\n-\n-OPTIONS\n--------\n-\n---replace-all::\n-\tDefault behavior is to replace at most one line. This replaces\n-\tall lines matching the key (and optionally the value_regex).\n-\n---add::\n-\tAdds a new line to the option without altering any existing\n-\tvalues.  This is the same as providing '^$' as the value_regex.\n-\n---get::\n-\tGet the value for a given key (optionally filtered by a regex\n-\tmatching the value). Returns error code 1 if the key was not\n-\tfound and error code 2 if multiple key values were found.\n-\n---get-all::\n-\tLike get, but does not fail if the number of values for the key\n-\tis not exactly one.\n-\n---get-regexp::\n-\tLike --get-all, but interprets the name as a regular expression.\n-\n---global::\n-\tUse global ~/.gitconfig file rather than the repository .git/config.\n-\n---unset::\n-\tRemove the line matching the key from config file.\n-\n---unset-all::\n-\tRemove all matching lines from config file.\n-\n--l, --list::\n-\tList all variables set in config file.\n-\n---bool::\n-\tgit-repo-config will ensure that the output is \"true\" or \"false\"\n-\n---int::\n-\tgit-repo-config will ensure that the output is a simple\n-\tdecimal number.  An optional value suffix of 'k', 'm', or 'g'\n-\tin the config file will cause the value to be multiplied\n-\tby 1024, 1048576, or 1073741824 prior to output.\n-\n-\n-ENVIRONMENT\n------------\n-\n-GIT_CONFIG::\n-\tTake the configuration from the given file instead of .git/config.\n-\tUsing the \"--global\" option forces this to ~/.gitconfig.\n-\n-GIT_CONFIG_LOCAL::\n-\tCurrently the same as $GIT_CONFIG; when Git will support global\n-\tconfiguration files, this will cause it to take the configuration\n-\tfrom the global configuration file in addition to the given file.\n-\n-\n-EXAMPLE\n--------\n-\n-Given a .git/config like this:\n-\n-\t#\n-\t# This is the config file, and\n-\t# a '#' or ';' character indicates\n-\t# a comment\n-\t#\n-\n-\t; core variables\n-\t[core]\n-\t\t; Don't trust file modes\n-\t\tfilemode = false\n-\n-\t; Our diff algorithm\n-\t[diff]\n-\t\texternal = \"/usr/local/bin/gnu-diff -u\"\n-\t\trenames = true\n-\n-\t; Proxy settings\n-\t[core]\n-\t\tgitproxy=\"ssh\" for \"ssh://kernel.org/\"\n-\t\tgitproxy=\"proxy-command\" for kernel.org\n-\t\tgitproxy=\"myprotocol-command\" for \"my://\"\n-\t\tgitproxy=default-proxy ; for all the rest\n-\n-you can set the filemode to true with\n-\n-------------\n-% git repo-config core.filemode true\n-------------\n-\n-The hypothetical proxy command entries actually have a postfix to discern\n-what URL they apply to. Here is how to change the entry for kernel.org\n-to \"ssh\".\n-\n-------------\n-% git repo-config core.gitproxy '\"ssh\" for kernel.org' 'for kernel.org$'\n-------------\n-\n-This makes sure that only the key/value pair for kernel.org is replaced.\n-\n-To delete the entry for renames, do\n-\n-------------\n-% git repo-config --unset diff.renames\n-------------\n-\n-If you want to delete an entry for a multivar (like core.gitproxy above),\n-you have to provide a regex matching the value of exactly one line.\n-\n-To query the value for a given key, do\n-\n-------------\n-% git repo-config --get core.filemode\n-------------\n-\n-or\n-\n-------------\n-% git repo-config core.filemode\n-------------\n-\n-or, to query a multivar:\n-\n-------------\n-% git repo-config --get core.gitproxy \"for kernel.org$\"\n-------------\n-\n-If you want to know all the values for a multivar, do:\n-\n-------------\n-% git repo-config --get-all core.gitproxy\n-------------\n-\n-If you like to live dangerous, you can replace *all* core.gitproxy by a\n-new one with\n-\n-------------\n-% git repo-config --replace-all core.gitproxy ssh\n-------------\n-\n-However, if you really only want to replace the line for the default proxy,\n-i.e. the one without a \"for ...\" postfix, do something like this:\n-\n-------------\n-% git repo-config core.gitproxy ssh '! for '\n-------------\n-\n-To actually match only values with an exclamation mark, you have to\n-\n-------------\n-% git repo-config section.key value '[!]'\n-------------\n-\n-To add a new proxy, without altering any of the existing ones, use\n-\n-------------\n-% git repo-config core.gitproxy '\"proxy\" for example.com'\n-------------\n-\n-\n-include::config.txt[]\n-\n-\n-Author\n-------\n-Written by Johannes Schindelin <Johannes.Schindelin@gmx.de>\n-\n-Documentation\n---------------\n-Documentation by Johannes Schindelin, Petr Baudis and the git-list <git@vger.kernel.org>.\n-\n-GIT\n----\n-Part of the gitlink:git[7] suite\n-\ndiff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt\nindex b95ff1d..aea4a6b 100644\n--- a/Documentation/git-svn.txt\n+++ b/Documentation/git-svn.txt\n@@ -204,7 +204,7 @@ removed by default if there are no files left in them.  git\n cannot version empty directories.  Enabling this flag will make\n the commit to SVN act like git.\n \n-repo-config key: svn.rmdir\n+config key: svn.rmdir\n \n -e::\n --edit::\n@@ -215,7 +215,7 @@ Edit the commit message before committing to SVN.  This is off by\n default for objects that are commits, and forced on when committing\n tree objects.\n \n-repo-config key: svn.edit\n+config key: svn.edit\n \n -l<num>::\n --find-copies-harder::\n@@ -226,8 +226,8 @@ They are both passed directly to git-diff-tree see\n gitlink:git-diff-tree[1] for more information.\n \n [verse]\n-repo-config key: svn.l\n-repo-config key: svn.findcopiesharder\n+config key: svn.l\n+config key: svn.findcopiesharder\n \n -A<filename>::\n --authors-file=<filename>::\n@@ -245,7 +245,7 @@ will abort operation. The user will then have to add the\n appropriate entry.  Re-running the previous git-svn command\n after the authors-file is modified should continue operation.\n \n-repo-config key: svn.authorsfile\n+config key: svn.authorsfile\n \n -q::\n --quiet::\n@@ -262,8 +262,8 @@ repo-config key: svn.authorsfile\n \n \t--repack-flags are passed directly to gitlink:git-repack[1].\n \n-repo-config key: svn.repack\n-repo-config key: svn.repackflags\n+config key: svn.repack\n+config key: svn.repackflags\n \n -m::\n --merge::\n@@ -304,7 +304,7 @@ used to track branches across multiple SVN _repositories_.\n This option may be specified multiple times, once for each\n branch.\n \n-repo-config key: svn.branch\n+config key: svn.branch\n \n -i<GIT_SVN_ID>::\n --id <GIT_SVN_ID>::\n@@ -320,7 +320,7 @@ for more information on using GIT_SVN_ID.\n \tstarted tracking a branch and never tracked the trunk it was\n \tdescended from.\n \n-repo-config key: svn.followparent\n+config key: svn.followparent\n \n --no-metadata::\n \tThis gets rid of the git-svn-id: lines at the end of every commit.\n@@ -332,7 +332,7 @@ repo-config key: svn.followparent\n \tThe 'git-svn log' command will not work on repositories using this,\n \teither.\n \n-repo-config key: svn.nometadata\n+config key: svn.nometadata\n \n --\n \ndiff --git a/Documentation/git-update-index.txt b/Documentation/git-update-index.txt\nindex 5bbae42..b161c8b 100644\n--- a/Documentation/git-update-index.txt\n+++ b/Documentation/git-update-index.txt\n@@ -289,7 +289,7 @@ Configuration\n \n The command honors `core.filemode` configuration variable.  If\n your repository is on an filesystem whose executable bits are\n-unreliable, this should be set to 'false' (see gitlink:git-repo-config[1]).\n+unreliable, this should be set to 'false' (see gitlink:git-config[1]).\n This causes the command to ignore differences in file modes recorded\n in the index and the file mode on the filesystem if they differ only on\n executable bit.   On such an unfortunate filesystem, you may\n@@ -301,7 +301,7 @@ The command looks at `core.ignorestat` configuration variable.  See\n \n See Also\n --------\n-gitlink:git-repo-config[1]\n+gitlink:git-config[1]\n \n \n Author\ndiff --git a/Documentation/git-var.txt b/Documentation/git-var.txt\nindex 8a50638..9b0de1c 100644\n--- a/Documentation/git-var.txt\n+++ b/Documentation/git-var.txt\n@@ -20,7 +20,7 @@ OPTIONS\n \tCause the logical variables to be listed. In addition, all the\n \tvariables of the git configuration file .git/config are listed\n \tas well. (However, the configuration variables listing functionality\n-\tis deprecated in favor of `git-repo-config -l`.)\n+\tis deprecated in favor of `git-config -l`.)\n \n EXAMPLE\n --------\n@@ -49,7 +49,7 @@ See Also\n --------\n gitlink:git-commit-tree[1]\n gitlink:git-tag[1]\n-gitlink:git-repo-config[1]\n+gitlink:git-config[1]\n \n Author\n ------\ndiff --git a/Documentation/git.txt b/Documentation/git.txt\nindex 9761de3..7cd3467 100644\n--- a/Documentation/git.txt\n+++ b/Documentation/git.txt\n@@ -24,7 +24,7 @@ link:everyday.html[Everyday Git] for a useful minimum set of commands, and\n also want to read link:cvs-migration.html[CVS migration].\n \n The COMMAND is either a name of a Git command (see below) or an alias\n-as defined in the configuration file (see gitlink:git-repo-config[1]).\n+as defined in the configuration file (see gitlink:git-config[1]).\n \n OPTIONS\n -------\ndiff --git a/Documentation/howto/setup-git-server-over-http.txt b/Documentation/howto/setup-git-server-over-http.txt\nindex a202f3a..8eadc20 100644\n--- a/Documentation/howto/setup-git-server-over-http.txt\n+++ b/Documentation/howto/setup-git-server-over-http.txt\n@@ -205,7 +205,7 @@ To check whether all is OK, do:\n Now, add the remote in your existing repository which contains the project\n you want to export:\n \n-   $ git-repo-config remote.upload.url \\\n+   $ git-config remote.upload.url \\\n        http://<username>@<servername>/my-new-repo.git/\n \n It is important to put the last '/'; Without it, the server will send\n@@ -222,7 +222,7 @@ From your client repository, do\n \n This pushes branch 'master' (which is assumed to be the branch you\n want to export) to repository called 'upload', which we previously\n-defined with git-repo-config.\n+defined with git-config.\n \n \n Troubleshooting:\ndiff --git a/Documentation/tutorial.txt b/Documentation/tutorial.txt\nindex c27a450..adb1e32 100644\n--- a/Documentation/tutorial.txt\n+++ b/Documentation/tutorial.txt\n@@ -16,8 +16,8 @@ public email address before doing any operation.  The easiest\n way to do so is:\n \n ------------------------------------------------\n-$ git repo-config --global user.name \"Your Name Comes Here\"\n-$ git repo-config --global user.email you@yourdomain.example.com\n+$ git config --global user.name \"Your Name Comes Here\"\n+$ git config --global user.email you@yourdomain.example.com\n ------------------------------------------------\n \n \n@@ -353,12 +353,12 @@ repository in the repository configuration, and that location is\n used for pulls:\n \n -------------------------------------\n-$ git repo-config --get remote.origin.url\n+$ git config --get remote.origin.url\n /home/bob/myrepo\n -------------------------------------\n \n (The complete configuration created by git-clone is visible using\n-\"git repo-config -l\", and the gitlink:git-repo-config[1] man page\n+\"git config -l\", and the gitlink:git-config[1] man page\n explains the meaning of each option.)\n \n Git also keeps a pristine copy of Alice's master branch under the\ndiff --git a/Makefile b/Makefile\nindex 07246f3..fd8a522 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -213,7 +213,7 @@ EXTRA_PROGRAMS =\n \n BUILT_INS = \\\n \tgit-format-patch$X git-show$X git-whatchanged$X git-cherry$X \\\n-\tgit-get-tar-commit-id$X git-init$X \\\n+\tgit-get-tar-commit-id$X git-init$X git-repo-config$X \\\n \t$(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))\n \n # what 'all' will build and 'install' will install, in gitexecdir\n@@ -299,7 +299,7 @@ BUILTIN_OBJS = \\\n \tbuiltin-push.o \\\n \tbuiltin-read-tree.o \\\n \tbuiltin-reflog.o \\\n-\tbuiltin-repo-config.o \\\n+\tbuiltin-config.o \\\n \tbuiltin-rerere.o \\\n \tbuiltin-rev-list.o \\\n \tbuiltin-rev-parse.o \\\ndiff --git a/builtin-config.c b/builtin-config.c\nnew file mode 100644\nindex 0000000..3c3860f\n--- /dev/null\n+++ b/builtin-config.c\n@@ -0,0 +1,220 @@\n+#include \"builtin.h\"\n+#include \"cache.h\"\n+\n+static const char git_config_set_usage[] =\n+\"git-config [ --global ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --list\";\n+\n+static char *key;\n+static regex_t *key_regexp;\n+static regex_t *regexp;\n+static int show_keys;\n+static int use_key_regexp;\n+static int do_all;\n+static int do_not_match;\n+static int seen;\n+static enum { T_RAW, T_INT, T_BOOL } type = T_RAW;\n+\n+static int show_all_config(const char *key_, const char *value_)\n+{\n+\tif (value_)\n+\t\tprintf(\"%s=%s\\n\", key_, value_);\n+\telse\n+\t\tprintf(\"%s\\n\", key_);\n+\treturn 0;\n+}\n+\n+static int show_config(const char* key_, const char* value_)\n+{\n+\tchar value[256];\n+\tconst char *vptr = value;\n+\tint dup_error = 0;\n+\n+\tif (!use_key_regexp && strcmp(key_, key))\n+\t\treturn 0;\n+\tif (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0))\n+\t\treturn 0;\n+\tif (regexp != NULL &&\n+\t\t\t (do_not_match ^\n+\t\t\t  regexec(regexp, (value_?value_:\"\"), 0, NULL, 0)))\n+\t\treturn 0;\n+\n+\tif (show_keys)\n+\t\tprintf(\"%s \", key_);\n+\tif (seen && !do_all)\n+\t\tdup_error = 1;\n+\tif (type == T_INT)\n+\t\tsprintf(value, \"%d\", git_config_int(key_, value_?value_:\"\"));\n+\telse if (type == T_BOOL)\n+\t\tvptr = git_config_bool(key_, value_) ? \"true\" : \"false\";\n+\telse\n+\t\tvptr = value_?value_:\"\";\n+\tseen++;\n+\tif (dup_error) {\n+\t\terror(\"More than one value for the key %s: %s\",\n+\t\t\t\tkey_, vptr);\n+\t}\n+\telse\n+\t\tprintf(\"%s\\n\", vptr);\n+\n+\treturn 0;\n+}\n+\n+static int get_value(const char* key_, const char* regex_)\n+{\n+\tint ret = -1;\n+\tchar *tl;\n+\tchar *global = NULL, *config = NULL;\n+\tconst char *local;\n+\n+\tlocal = getenv(CONFIG_ENVIRONMENT);\n+\tif (!local) {\n+\t\tconst char *home = getenv(\"HOME\");\n+\t\tlocal = getenv(CONFIG_LOCAL_ENVIRONMENT);\n+\t\tif (!local)\n+\t\t\tlocal = config = xstrdup(git_path(\"config\"));\n+\t\tif (home)\n+\t\t\tglobal = xstrdup(mkpath(\"%s/.gitconfig\", home));\n+\t}\n+\n+\tkey = xstrdup(key_);\n+\tfor (tl=key+strlen(key)-1; tl >= key && *tl != '.'; --tl)\n+\t\t*tl = tolower(*tl);\n+\tfor (tl=key; *tl && *tl != '.'; ++tl)\n+\t\t*tl = tolower(*tl);\n+\n+\tif (use_key_regexp) {\n+\t\tkey_regexp = (regex_t*)xmalloc(sizeof(regex_t));\n+\t\tif (regcomp(key_regexp, key, REG_EXTENDED)) {\n+\t\t\tfprintf(stderr, \"Invalid key pattern: %s\\n\", key_);\n+\t\t\tgoto free_strings;\n+\t\t}\n+\t}\n+\n+\tif (regex_) {\n+\t\tif (regex_[0] == '!') {\n+\t\t\tdo_not_match = 1;\n+\t\t\tregex_++;\n+\t\t}\n+\n+\t\tregexp = (regex_t*)xmalloc(sizeof(regex_t));\n+\t\tif (regcomp(regexp, regex_, REG_EXTENDED)) {\n+\t\t\tfprintf(stderr, \"Invalid pattern: %s\\n\", regex_);\n+\t\t\tgoto free_strings;\n+\t\t}\n+\t}\n+\n+\tif (do_all && global)\n+\t\tgit_config_from_file(show_config, global);\n+\tgit_config_from_file(show_config, local);\n+\tif (!do_all && !seen && global)\n+\t\tgit_config_from_file(show_config, global);\n+\n+\tfree(key);\n+\tif (regexp) {\n+\t\tregfree(regexp);\n+\t\tfree(regexp);\n+\t}\n+\n+\tif (do_all)\n+\t\tret = !seen;\n+\telse\n+\t\tret = (seen == 1) ? 0 : seen > 1 ? 2 : 1;\n+\n+free_strings:\n+\tfree(config);\n+\tfree(global);\n+\treturn ret;\n+}\n+\n+int cmd_config(int argc, const char **argv, const char *prefix)\n+{\n+\tint nongit = 0;\n+\tsetup_git_directory_gently(&nongit);\n+\n+\twhile (1 < argc) {\n+\t\tif (!strcmp(argv[1], \"--int\"))\n+\t\t\ttype = T_INT;\n+\t\telse if (!strcmp(argv[1], \"--bool\"))\n+\t\t\ttype = T_BOOL;\n+\t\telse if (!strcmp(argv[1], \"--list\") || !strcmp(argv[1], \"-l\"))\n+\t\t\treturn git_config(show_all_config);\n+\t\telse if (!strcmp(argv[1], \"--global\")) {\n+\t\t\tchar *home = getenv(\"HOME\");\n+\t\t\tif (home) {\n+\t\t\t\tchar *user_config = xstrdup(mkpath(\"%s/.gitconfig\", home));\n+\t\t\t\tsetenv(\"GIT_CONFIG\", user_config, 1);\n+\t\t\t\tfree(user_config);\n+\t\t\t} else {\n+\t\t\t\tdie(\"$HOME not set\");\n+\t\t\t}\n+\t\t} else if (!strcmp(argv[1], \"--rename-section\")) {\n+\t\t\tint ret;\n+\t\t\tif (argc != 4)\n+\t\t\t\tusage(git_config_set_usage);\n+\t\t\tret = git_config_rename_section(argv[2], argv[3]);\n+\t\t\tif (ret < 0)\n+\t\t\t\treturn ret;\n+\t\t\tif (ret == 0) {\n+\t\t\t\tfprintf(stderr, \"No such section!\\n\");\n+\t\t\t\treturn 1;\n+\t\t\t}\n+\t\t\treturn 0;\n+\t\t} else\n+\t\t\tbreak;\n+\t\targc--;\n+\t\targv++;\n+\t}\n+\n+\tswitch (argc) {\n+\tcase 2:\n+\t\treturn get_value(argv[1], NULL);\n+\tcase 3:\n+\t\tif (!strcmp(argv[1], \"--unset\"))\n+\t\t\treturn git_config_set(argv[2], NULL);\n+\t\telse if (!strcmp(argv[1], \"--unset-all\"))\n+\t\t\treturn git_config_set_multivar(argv[2], NULL, NULL, 1);\n+\t\telse if (!strcmp(argv[1], \"--get\"))\n+\t\t\treturn get_value(argv[2], NULL);\n+\t\telse if (!strcmp(argv[1], \"--get-all\")) {\n+\t\t\tdo_all = 1;\n+\t\t\treturn get_value(argv[2], NULL);\n+\t\t} else if (!strcmp(argv[1], \"--get-regexp\")) {\n+\t\t\tshow_keys = 1;\n+\t\t\tuse_key_regexp = 1;\n+\t\t\tdo_all = 1;\n+\t\t\treturn get_value(argv[2], NULL);\n+\t\t} else\n+\n+\t\t\treturn git_config_set(argv[1], argv[2]);\n+\tcase 4:\n+\t\tif (!strcmp(argv[1], \"--unset\"))\n+\t\t\treturn git_config_set_multivar(argv[2], NULL, argv[3], 0);\n+\t\telse if (!strcmp(argv[1], \"--unset-all\"))\n+\t\t\treturn git_config_set_multivar(argv[2], NULL, argv[3], 1);\n+\t\telse if (!strcmp(argv[1], \"--get\"))\n+\t\t\treturn get_value(argv[2], argv[3]);\n+\t\telse if (!strcmp(argv[1], \"--get-all\")) {\n+\t\t\tdo_all = 1;\n+\t\t\treturn get_value(argv[2], argv[3]);\n+\t\t} else if (!strcmp(argv[1], \"--get-regexp\")) {\n+\t\t\tshow_keys = 1;\n+\t\t\tuse_key_regexp = 1;\n+\t\t\tdo_all = 1;\n+\t\t\treturn get_value(argv[2], argv[3]);\n+\t\t} else if (!strcmp(argv[1], \"--add\"))\n+\t\t\treturn git_config_set_multivar(argv[2], argv[3], \"^$\", 0);\n+\t\telse if (!strcmp(argv[1], \"--replace-all\"))\n+\n+\t\t\treturn git_config_set_multivar(argv[2], argv[3], NULL, 1);\n+\t\telse\n+\n+\t\t\treturn git_config_set_multivar(argv[1], argv[2], argv[3], 0);\n+\tcase 5:\n+\t\tif (!strcmp(argv[1], \"--replace-all\"))\n+\t\t\treturn git_config_set_multivar(argv[2], argv[3], argv[4], 1);\n+\tcase 1:\n+\tdefault:\n+\t\tusage(git_config_set_usage);\n+\t}\n+\treturn 0;\n+}\ndiff --git a/builtin-repo-config.c b/builtin-repo-config.c\ndeleted file mode 100644\nindex 9063311..0000000\n--- a/builtin-repo-config.c\n+++ /dev/null\n@@ -1,220 +0,0 @@\n-#include \"builtin.h\"\n-#include \"cache.h\"\n-\n-static const char git_config_set_usage[] =\n-\"git-repo-config [ --global ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --list\";\n-\n-static char *key;\n-static regex_t *key_regexp;\n-static regex_t *regexp;\n-static int show_keys;\n-static int use_key_regexp;\n-static int do_all;\n-static int do_not_match;\n-static int seen;\n-static enum { T_RAW, T_INT, T_BOOL } type = T_RAW;\n-\n-static int show_all_config(const char *key_, const char *value_)\n-{\n-\tif (value_)\n-\t\tprintf(\"%s=%s\\n\", key_, value_);\n-\telse\n-\t\tprintf(\"%s\\n\", key_);\n-\treturn 0;\n-}\n-\n-static int show_config(const char* key_, const char* value_)\n-{\n-\tchar value[256];\n-\tconst char *vptr = value;\n-\tint dup_error = 0;\n-\n-\tif (!use_key_regexp && strcmp(key_, key))\n-\t\treturn 0;\n-\tif (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0))\n-\t\treturn 0;\n-\tif (regexp != NULL &&\n-\t\t\t (do_not_match ^\n-\t\t\t  regexec(regexp, (value_?value_:\"\"), 0, NULL, 0)))\n-\t\treturn 0;\n-\n-\tif (show_keys)\n-\t\tprintf(\"%s \", key_);\n-\tif (seen && !do_all)\n-\t\tdup_error = 1;\n-\tif (type == T_INT)\n-\t\tsprintf(value, \"%d\", git_config_int(key_, value_?value_:\"\"));\n-\telse if (type == T_BOOL)\n-\t\tvptr = git_config_bool(key_, value_) ? \"true\" : \"false\";\n-\telse\n-\t\tvptr = value_?value_:\"\";\n-\tseen++;\n-\tif (dup_error) {\n-\t\terror(\"More than one value for the key %s: %s\",\n-\t\t\t\tkey_, vptr);\n-\t}\n-\telse\n-\t\tprintf(\"%s\\n\", vptr);\n-\n-\treturn 0;\n-}\n-\n-static int get_value(const char* key_, const char* regex_)\n-{\n-\tint ret = -1;\n-\tchar *tl;\n-\tchar *global = NULL, *repo_config = NULL;\n-\tconst char *local;\n-\n-\tlocal = getenv(CONFIG_ENVIRONMENT);\n-\tif (!local) {\n-\t\tconst char *home = getenv(\"HOME\");\n-\t\tlocal = getenv(CONFIG_LOCAL_ENVIRONMENT);\n-\t\tif (!local)\n-\t\t\tlocal = repo_config = xstrdup(git_path(\"config\"));\n-\t\tif (home)\n-\t\t\tglobal = xstrdup(mkpath(\"%s/.gitconfig\", home));\n-\t}\n-\n-\tkey = xstrdup(key_);\n-\tfor (tl=key+strlen(key)-1; tl >= key && *tl != '.'; --tl)\n-\t\t*tl = tolower(*tl);\n-\tfor (tl=key; *tl && *tl != '.'; ++tl)\n-\t\t*tl = tolower(*tl);\n-\n-\tif (use_key_regexp) {\n-\t\tkey_regexp = (regex_t*)xmalloc(sizeof(regex_t));\n-\t\tif (regcomp(key_regexp, key, REG_EXTENDED)) {\n-\t\t\tfprintf(stderr, \"Invalid key pattern: %s\\n\", key_);\n-\t\t\tgoto free_strings;\n-\t\t}\n-\t}\n-\n-\tif (regex_) {\n-\t\tif (regex_[0] == '!') {\n-\t\t\tdo_not_match = 1;\n-\t\t\tregex_++;\n-\t\t}\n-\n-\t\tregexp = (regex_t*)xmalloc(sizeof(regex_t));\n-\t\tif (regcomp(regexp, regex_, REG_EXTENDED)) {\n-\t\t\tfprintf(stderr, \"Invalid pattern: %s\\n\", regex_);\n-\t\t\tgoto free_strings;\n-\t\t}\n-\t}\n-\n-\tif (do_all && global)\n-\t\tgit_config_from_file(show_config, global);\n-\tgit_config_from_file(show_config, local);\n-\tif (!do_all && !seen && global)\n-\t\tgit_config_from_file(show_config, global);\n-\n-\tfree(key);\n-\tif (regexp) {\n-\t\tregfree(regexp);\n-\t\tfree(regexp);\n-\t}\n-\n-\tif (do_all)\n-\t\tret = !seen;\n-\telse\n-\t\tret = (seen == 1) ? 0 : seen > 1 ? 2 : 1;\n-\n-free_strings:\n-\tfree(repo_config);\n-\tfree(global);\n-\treturn ret;\n-}\n-\n-int cmd_repo_config(int argc, const char **argv, const char *prefix)\n-{\n-\tint nongit = 0;\n-\tsetup_git_directory_gently(&nongit);\n-\n-\twhile (1 < argc) {\n-\t\tif (!strcmp(argv[1], \"--int\"))\n-\t\t\ttype = T_INT;\n-\t\telse if (!strcmp(argv[1], \"--bool\"))\n-\t\t\ttype = T_BOOL;\n-\t\telse if (!strcmp(argv[1], \"--list\") || !strcmp(argv[1], \"-l\"))\n-\t\t\treturn git_config(show_all_config);\n-\t\telse if (!strcmp(argv[1], \"--global\")) {\n-\t\t\tchar *home = getenv(\"HOME\");\n-\t\t\tif (home) {\n-\t\t\t\tchar *user_config = xstrdup(mkpath(\"%s/.gitconfig\", home));\n-\t\t\t\tsetenv(\"GIT_CONFIG\", user_config, 1);\n-\t\t\t\tfree(user_config);\n-\t\t\t} else {\n-\t\t\t\tdie(\"$HOME not set\");\n-\t\t\t}\n-\t\t} else if (!strcmp(argv[1], \"--rename-section\")) {\n-\t\t\tint ret;\n-\t\t\tif (argc != 4)\n-\t\t\t\tusage(git_config_set_usage);\n-\t\t\tret = git_config_rename_section(argv[2], argv[3]);\n-\t\t\tif (ret < 0)\n-\t\t\t\treturn ret;\n-\t\t\tif (ret == 0) {\n-\t\t\t\tfprintf(stderr, \"No such section!\\n\");\n-\t\t\t\treturn 1;\n-\t\t\t}\n-\t\t\treturn 0;\n-\t\t} else\n-\t\t\tbreak;\n-\t\targc--;\n-\t\targv++;\n-\t}\n-\n-\tswitch (argc) {\n-\tcase 2:\n-\t\treturn get_value(argv[1], NULL);\n-\tcase 3:\n-\t\tif (!strcmp(argv[1], \"--unset\"))\n-\t\t\treturn git_config_set(argv[2], NULL);\n-\t\telse if (!strcmp(argv[1], \"--unset-all\"))\n-\t\t\treturn git_config_set_multivar(argv[2], NULL, NULL, 1);\n-\t\telse if (!strcmp(argv[1], \"--get\"))\n-\t\t\treturn get_value(argv[2], NULL);\n-\t\telse if (!strcmp(argv[1], \"--get-all\")) {\n-\t\t\tdo_all = 1;\n-\t\t\treturn get_value(argv[2], NULL);\n-\t\t} else if (!strcmp(argv[1], \"--get-regexp\")) {\n-\t\t\tshow_keys = 1;\n-\t\t\tuse_key_regexp = 1;\n-\t\t\tdo_all = 1;\n-\t\t\treturn get_value(argv[2], NULL);\n-\t\t} else\n-\n-\t\t\treturn git_config_set(argv[1], argv[2]);\n-\tcase 4:\n-\t\tif (!strcmp(argv[1], \"--unset\"))\n-\t\t\treturn git_config_set_multivar(argv[2], NULL, argv[3], 0);\n-\t\telse if (!strcmp(argv[1], \"--unset-all\"))\n-\t\t\treturn git_config_set_multivar(argv[2], NULL, argv[3], 1);\n-\t\telse if (!strcmp(argv[1], \"--get\"))\n-\t\t\treturn get_value(argv[2], argv[3]);\n-\t\telse if (!strcmp(argv[1], \"--get-all\")) {\n-\t\t\tdo_all = 1;\n-\t\t\treturn get_value(argv[2], argv[3]);\n-\t\t} else if (!strcmp(argv[1], \"--get-regexp\")) {\n-\t\t\tshow_keys = 1;\n-\t\t\tuse_key_regexp = 1;\n-\t\t\tdo_all = 1;\n-\t\t\treturn get_value(argv[2], argv[3]);\n-\t\t} else if (!strcmp(argv[1], \"--add\"))\n-\t\t\treturn git_config_set_multivar(argv[2], argv[3], \"^$\", 0);\n-\t\telse if (!strcmp(argv[1], \"--replace-all\"))\n-\n-\t\t\treturn git_config_set_multivar(argv[2], argv[3], NULL, 1);\n-\t\telse\n-\n-\t\t\treturn git_config_set_multivar(argv[1], argv[2], argv[3], 0);\n-\tcase 5:\n-\t\tif (!strcmp(argv[1], \"--replace-all\"))\n-\t\t\treturn git_config_set_multivar(argv[2], argv[3], argv[4], 1);\n-\tcase 1:\n-\tdefault:\n-\t\tusage(git_config_set_usage);\n-\t}\n-\treturn 0;\n-}\ndiff --git a/builtin.h b/builtin.h\nindex 0b3c9f6..cfe5990 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -53,7 +53,7 @@ extern int cmd_prune_packed(int argc, const char **argv, const char *prefix);\n extern int cmd_push(int argc, const char **argv, const char *prefix);\n extern int cmd_read_tree(int argc, const char **argv, const char *prefix);\n extern int cmd_reflog(int argc, const char **argv, const char *prefix);\n-extern int cmd_repo_config(int argc, const char **argv, const char *prefix);\n+extern int cmd_config(int argc, const char **argv, const char *prefix);\n extern int cmd_rerere(int argc, const char **argv, const char *prefix);\n extern int cmd_rev_list(int argc, const char **argv, const char *prefix);\n extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex 7c7520e..83c69ec 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -145,7 +145,7 @@ __git_remotes ()\n \t\techo ${i#$d/remotes/}\n \tdone\n \t[ \"$ngoff\" ] && shopt -u nullglob\n-\tfor i in $(git --git-dir=\"$d\" repo-config --list); do\n+\tfor i in $(git --git-dir=\"$d\" config --list); do\n \t\tcase \"$i\" in\n \t\tremote.*.url=*)\n \t\t\ti=\"${i#remote.}\"\n@@ -286,7 +286,7 @@ __git_commandlist=\"$(__git_commands 2>/dev/null)\"\n __git_aliases ()\n {\n \tlocal i IFS=$'\\n'\n-\tfor i in $(git --git-dir=\"$(__gitdir)\" repo-config --list); do\n+\tfor i in $(git --git-dir=\"$(__gitdir)\" config --list); do\n \t\tcase \"$i\" in\n \t\talias.*)\n \t\t\ti=\"${i#alias.}\"\n@@ -299,7 +299,7 @@ __git_aliases ()\n __git_aliased_command ()\n {\n \tlocal word cmdline=$(git --git-dir=\"$(__gitdir)\" \\\n-\t\trepo-config --get \"alias.$1\")\n+\t\tconfig --get \"alias.$1\")\n \tfor word in $cmdline; do\n \t\tif [ \"${word##-*}\" ]; then\n \t\t\techo $word\n@@ -629,7 +629,7 @@ _git_rebase ()\n \tCOMPREPLY=($(compgen -W \"$(__git_refs)\" -- \"$cur\"))\n }\n \n-_git_repo_config ()\n+_git_config ()\n {\n \tlocal cur=\"${COMP_WORDS[COMP_CWORD]}\"\n \tlocal prv=\"${COMP_WORDS[COMP_CWORD-1]}\"\n@@ -806,6 +806,7 @@ _git ()\n \tcheckout)    _git_checkout ;;\n \tcherry-pick) _git_cherry_pick ;;\n \tcommit)      _git_commit ;;\n+\tconfig)      _git_config ;;\n \tdiff)        _git_diff ;;\n \tdiff-tree)   _git_diff_tree ;;\n \tfetch)       _git_fetch ;;\n@@ -819,7 +820,7 @@ _git ()\n \tpull)        _git_pull ;;\n \tpush)        _git_push ;;\n \trebase)      _git_rebase ;;\n-\trepo-config) _git_repo_config ;;\n+\trepo-config) _git_config ;;\n \treset)       _git_reset ;;\n \tshow)        _git_show ;;\n \tshow-branch) _git_log ;;\n@@ -856,7 +857,7 @@ complete -o default            -F _git_name_rev git-name-rev\n complete -o default -o nospace -F _git_pull git-pull\n complete -o default -o nospace -F _git_push git-push\n complete -o default            -F _git_rebase git-rebase\n-complete -o default            -F _git_repo_config git-repo-config\n+complete -o default            -F _git_config git-config\n complete -o default            -F _git_reset git-reset\n complete -o default -o nospace -F _git_show git-show\n complete -o default -o nospace -F _git_log git-show-branch\n@@ -879,7 +880,7 @@ complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe\n complete -o default            -F _git_merge_base git-merge-base.exe\n complete -o default            -F _git_name_rev git-name-rev.exe\n complete -o default -o nospace -F _git_push git-push.exe\n-complete -o default            -F _git_repo_config git-repo-config\n+complete -o default            -F _git_config git-config\n complete -o default -o nospace -F _git_show git-show.exe\n complete -o default -o nospace -F _git_log git-show-branch.exe\n complete -o default -o nospace -F _git_log git-whatchanged.exe\ndiff --git a/contrib/emacs/git.el b/contrib/emacs/git.el\nindex d90ba81..24629eb 100644\n--- a/contrib/emacs/git.el\n+++ b/contrib/emacs/git.el\n@@ -222,7 +222,7 @@ and returns the process output as a string.\"\n   \"Return the name to use as GIT_COMMITTER_NAME.\"\n   ; copied from log-edit\n   (or git-committer-name\n-      (git-repo-config \"user.name\")\n+      (git-config \"user.name\")\n       (and (boundp 'add-log-full-name) add-log-full-name)\n       (and (fboundp 'user-full-name) (user-full-name))\n       (and (boundp 'user-full-name) user-full-name)))\n@@ -231,7 +231,7 @@ and returns the process output as a string.\"\n   \"Return the email address to use as GIT_COMMITTER_EMAIL.\"\n   ; copied from log-edit\n   (or git-committer-email\n-      (git-repo-config \"user.email\")\n+      (git-config \"user.email\")\n       (and (boundp 'add-log-mailing-address) add-log-mailing-address)\n       (and (fboundp 'user-mail-address) (user-mail-address))\n       (and (boundp 'user-mail-address) user-mail-address)))\n@@ -298,9 +298,9 @@ and returns the process output as a string.\"\n   (git-get-string-sha1\n    (git-call-process-env-string nil \"rev-parse\" rev)))\n \n-(defun git-repo-config (key)\n+(defun git-config (key)\n   \"Retrieve the value associated to KEY in the git repository config file.\"\n-  (let ((str (git-call-process-env-string nil \"repo-config\" key)))\n+  (let ((str (git-call-process-env-string nil \"config\" key)))\n     (and str (car (split-string str \"\\n\")))))\n \n (defun git-symbolic-ref (ref)\ndiff --git a/contrib/gitview/gitview b/contrib/gitview/gitview\nindex 3b6bdce..521b2fc 100755\n--- a/contrib/gitview/gitview\n+++ b/contrib/gitview/gitview\n@@ -497,7 +497,7 @@ class GitView:\n \t\tfp.close()\n \n \tdef get_encoding(self):\n-\t\tfp = os.popen(\"git repo-config --get i18n.commitencoding\")\n+\t\tfp = os.popen(\"git config --get i18n.commitencoding\")\n \t\tself.encoding=string.strip(fp.readline())\n \t\tfp.close()\n \t\tif (self.encoding == \"\"):\ndiff --git a/contrib/remotes2config.sh b/contrib/remotes2config.sh\nindex b996996..dc09eae 100644\n--- a/contrib/remotes2config.sh\n+++ b/contrib/remotes2config.sh\n@@ -26,8 +26,8 @@ if [ -d \"$GIT_DIR\"/remotes ]; then\n \t\t\t\tmv \"$GIT_DIR\"/remotes \"$GIT_DIR\"/remotes.old\n \t\t\tfi ;;\n \t\t*)\n-\t\t\techo \"git-repo-config $key \"$value\" $regex\"\n-\t\t\tgit-repo-config $key \"$value\" $regex || error=1 ;;\n+\t\t\techo \"git-config $key \"$value\" $regex\"\n+\t\t\tgit-config $key \"$value\" $regex || error=1 ;;\n \t\tesac\n \tdone\n fi\ndiff --git a/git-clone.sh b/git-clone.sh\nindex ced7dfb..1531da5 100755\n--- a/git-clone.sh\n+++ b/git-clone.sh\n@@ -36,7 +36,7 @@ clone_dumb_http () {\n \tclone_tmp=\"$GIT_DIR/clone-tmp\" &&\n \tmkdir -p \"$clone_tmp\" || exit 1\n \tif [ -n \"$GIT_CURL_FTP_NO_EPSV\" -o \\\n-\t\t\"`git-repo-config --bool http.noEPSV`\" = true ]; then\n+\t\t\"`git-config --bool http.noEPSV`\" = true ]; then\n \t\tcurl_extra_args=\"${curl_extra_args} --disable-epsv\"\n \tfi\n \thttp_fetch \"$1/info/refs\" \"$clone_tmp/refs\" ||\n@@ -386,17 +386,17 @@ then\n \t\tgit-update-ref HEAD \"$head_sha1\" &&\n \n \t\t# Upstream URL\n-\t\tgit-repo-config remote.\"$origin\".url \"$repo\" &&\n+\t\tgit-config remote.\"$origin\".url \"$repo\" &&\n \n \t\t# Set up the mappings to track the remote branches.\n-\t\tgit-repo-config remote.\"$origin\".fetch \\\n+\t\tgit-config remote.\"$origin\".fetch \\\n \t\t\t\"+refs/heads/*:$remote_top/*\" '^$' &&\n \t\trm -f \"refs/remotes/$origin/HEAD\"\n \t\tgit-symbolic-ref \"refs/remotes/$origin/HEAD\" \\\n \t\t\t\"refs/remotes/$origin/$head_points_at\" &&\n \n-\t\tgit-repo-config branch.\"$head_points_at\".remote \"$origin\" &&\n-\t\tgit-repo-config branch.\"$head_points_at\".merge \"refs/heads/$head_points_at\"\n+\t\tgit-config branch.\"$head_points_at\".remote \"$origin\" &&\n+\t\tgit-config branch.\"$head_points_at\".merge \"refs/heads/$head_points_at\"\n \tesac\n \n \tcase \"$no_checkout\" in\ndiff --git a/git-commit.sh b/git-commit.sh\nindex d8c236b..85c278a 100755\n--- a/git-commit.sh\n+++ b/git-commit.sh\n@@ -429,7 +429,7 @@ then\n \tfi\n elif test \"$use_commit\" != \"\"\n then\n-\tencoding=$(git repo-config i18n.commitencoding || echo UTF-8)\n+\tencoding=$(git config i18n.commitencoding || echo UTF-8)\n \tgit show -s --pretty=raw --encoding=\"$encoding\" \"$use_commit\" |\n \tsed -e '1,/^$/d' -e 's/^    //'\n elif test -f \"$GIT_DIR/MERGE_MSG\"\n@@ -485,7 +485,7 @@ then\n \t\tq\n \t}\n \t'\n-\tencoding=$(git repo-config i18n.commitencoding || echo UTF-8)\n+\tencoding=$(git config i18n.commitencoding || echo UTF-8)\n \tset_author_env=`git show -s --pretty=raw --encoding=\"$encoding\" \"$use_commit\" |\n \tLANG=C LC_ALL=C sed -ne \"$pick_author_script\"`\n \teval \"$set_author_env\"\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex e18e901..9371788 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -172,11 +172,11 @@ sub req_Root\n        return 0;\n     }\n \n-    my @gitvars = `git-repo-config -l`;\n+    my @gitvars = `git-config -l`;\n     if ($?) {\n-       print \"E problems executing git-repo-config on the server -- this is not a git repository or the PATH is not set correctly.\\n\";\n+       print \"E problems executing git-config on the server -- this is not a git repository or the PATH is not set correctly.\\n\";\n         print \"E \\n\";\n-        print \"error 1 - problem executing git-repo-config\\n\";\n+        print \"error 1 - problem executing git-config\\n\";\n        return 0;\n     }\n     foreach my $line ( @gitvars )\ndiff --git a/git-fetch.sh b/git-fetch.sh\nindex 61c8cf4..c1f6e1e 100755\n--- a/git-fetch.sh\n+++ b/git-fetch.sh\n@@ -321,7 +321,7 @@ fetch_main () {\n \t      curl_extra_args=\"-k\"\n \t  fi\n \t  if [ -n \"$GIT_CURL_FTP_NO_EPSV\" -o \\\n-\t\t\"`git-repo-config --bool http.noEPSV`\" = true ]; then\n+\t\t\"`git-config --bool http.noEPSV`\" = true ]; then\n \t      noepsv_opt=\"--disable-epsv\"\n \t  fi\n \ndiff --git a/git-instaweb.sh b/git-instaweb.sh\nindex 80adc83..cbc7418 100755\n--- a/git-instaweb.sh\n+++ b/git-instaweb.sh\n@@ -15,11 +15,11 @@ case \"$GIT_DIR\" in\n \tfqgitdir=\"$PWD/$GIT_DIR\" ;;\n esac\n \n-local=\"`git repo-config --bool --get instaweb.local`\"\n-httpd=\"`git repo-config --get instaweb.httpd`\"\n-browser=\"`git repo-config --get instaweb.browser`\"\n-port=`git repo-config --get instaweb.port`\n-module_path=\"`git repo-config --get instaweb.modulepath`\"\n+local=\"`git config --bool --get instaweb.local`\"\n+httpd=\"`git config --get instaweb.httpd`\"\n+browser=\"`git config --get instaweb.browser`\"\n+port=`git config --get instaweb.port`\n+module_path=\"`git config --get instaweb.modulepath`\"\n \n conf=$GIT_DIR/gitweb/httpd.conf\n \ndiff --git a/git-ls-remote.sh b/git-ls-remote.sh\nindex dd22783..e6f574b 100755\n--- a/git-ls-remote.sh\n+++ b/git-ls-remote.sh\n@@ -58,7 +58,7 @@ http://* | https://* | ftp://* )\n             curl_extra_args=\"-k\"\n         fi\n \tif [ -n \"$GIT_CURL_FTP_NO_EPSV\" -o \\\n-\t\t\"`git-repo-config --bool http.noEPSV`\" = true ]; then\n+\t\t\"`git-config --bool http.noEPSV`\" = true ]; then\n \t\tcurl_extra_args=\"${curl_extra_args} --disable-epsv\"\n \tfi\n \tcurl -nsf $curl_extra_args --header \"Pragma: no-cache\" \"$peek_repo/info/refs\" ||\ndiff --git a/git-merge.sh b/git-merge.sh\nindex 7b59026..e5d6229 100755\n--- a/git-merge.sh\n+++ b/git-merge.sh\n@@ -233,7 +233,7 @@ case \"$use_strategies\" in\n '')\n \tcase \"$#\" in\n \t1)\n-\t\tvar=\"`git-repo-config --get pull.twohead`\"\n+\t\tvar=\"`git-config --get pull.twohead`\"\n \t\tif test -n \"$var\"\n \t\tthen\n \t\t\tuse_strategies=\"$var\"\n@@ -241,7 +241,7 @@ case \"$use_strategies\" in\n \t\t\tuse_strategies=\"$default_twohead_strategies\"\n \t\tfi ;;\n \t*)\n-\t\tvar=\"`git-repo-config --get pull.octopus`\"\n+\t\tvar=\"`git-config --get pull.octopus`\"\n \t\tif test -n \"$var\"\n \t\tthen\n \t\t\tuse_strategies=\"$var\"\ndiff --git a/git-p4import.py b/git-p4import.py\nindex 5c56cac..60a758b 100644\n--- a/git-p4import.py\n+++ b/git-p4import.py\n@@ -193,13 +193,13 @@ class git_command:\n \n     def get_config(self, variable):\n         try:\n-            return self.git(\"repo-config --get %s\" % variable)[0].rstrip()\n+            return self.git(\"config --get %s\" % variable)[0].rstrip()\n         except:\n             return None\n \n     def set_config(self, variable, value):\n         try:\n-            self.git(\"repo-config %s %s\"%(variable, value) )\n+            self.git(\"config %s %s\"%(variable, value) )\n         except:\n             die(\"Could not set %s to \" % variable, value)\n \ndiff --git a/git-parse-remote.sh b/git-parse-remote.sh\nindex 1122c83..87864fb 100755\n--- a/git-parse-remote.sh\n+++ b/git-parse-remote.sh\n@@ -10,7 +10,7 @@ get_data_source () {\n \t\techo ''\n \t\t;;\n \t*)\n-\t\tif test \"$(git-repo-config --get \"remote.$1.url\")\"\n+\t\tif test \"$(git-config --get \"remote.$1.url\")\"\n \t\tthen\n \t\t\techo config\n \t\telif test -f \"$GIT_DIR/remotes/$1\"\n@@ -32,7 +32,7 @@ get_remote_url () {\n \t\techo \"$1\"\n \t\t;;\n \tconfig)\n-\t\tgit-repo-config --get \"remote.$1.url\"\n+\t\tgit-config --get \"remote.$1.url\"\n \t\t;;\n \tremotes)\n \t\tsed -ne '/^URL: */{\n@@ -50,7 +50,7 @@ get_remote_url () {\n \n get_default_remote () {\n \tcurr_branch=$(git-symbolic-ref -q HEAD | sed -e 's|^refs/heads/||')\n-\torigin=$(git-repo-config --get \"branch.$curr_branch.remote\")\n+\torigin=$(git-config --get \"branch.$curr_branch.remote\")\n \techo ${origin:-origin}\n }\n \n@@ -60,7 +60,7 @@ get_remote_default_refs_for_push () {\n \t'' | branches)\n \t\t;; # no default push mapping, just send matching refs.\n \tconfig)\n-\t\tgit-repo-config --get-all \"remote.$1.push\" ;;\n+\t\tgit-config --get-all \"remote.$1.push\" ;;\n \tremotes)\n \t\tsed -ne '/^Push: */{\n \t\t\ts///p\n@@ -139,7 +139,7 @@ canon_refs_list_for_fetch () {\n \t\tthen\n \t\t\tcurr_branch=$(git-symbolic-ref -q HEAD | \\\n \t\t\t    sed -e 's|^refs/heads/||')\n-\t\t\tmerge_branches=$(git-repo-config \\\n+\t\t\tmerge_branches=$(git-config \\\n \t\t\t    --get-all \"branch.${curr_branch}.merge\")\n \t\tfi\n \t\tif test -z \"$merge_branches\" && test $is_explicit != explicit\n@@ -205,7 +205,7 @@ get_remote_default_refs_for_fetch () {\n \t\techo \"HEAD:\" ;;\n \tconfig)\n \t\tcanon_refs_list_for_fetch -d \"$1\" \\\n-\t\t\t$(git-repo-config --get-all \"remote.$1.fetch\") ;;\n+\t\t\t$(git-config --get-all \"remote.$1.fetch\") ;;\n \tbranches)\n \t\tremote_branch=$(sed -ne '/#/s/.*#//p' \"$GIT_DIR/branches/$1\")\n \t\tcase \"$remote_branch\" in '') remote_branch=master ;; esac\n@@ -284,7 +284,7 @@ get_uploadpack () {\n \tdata_source=$(get_data_source \"$1\")\n \tcase \"$data_source\" in\n \tconfig)\n-\t\tuplp=$(git-repo-config --get \"remote.$1.uploadpack\")\n+\t\tuplp=$(git-config --get \"remote.$1.uploadpack\")\n \t\techo ${uplp:-git-upload-pack}\n \t\t;;\n \t*)\ndiff --git a/git-remote.perl b/git-remote.perl\nindex fc055b6..c813fe1 100755\n--- a/git-remote.perl\n+++ b/git-remote.perl\n@@ -64,7 +64,7 @@ sub list_remote {\n \tmy ($git) = @_;\n \tmy %seen = ();\n \tmy @remotes = eval {\n-\t\t$git->command(qw(repo-config --get-regexp), '^remote\\.');\n+\t\t$git->command(qw(config --get-regexp), '^remote\\.');\n \t};\n \tfor (@remotes) {\n \t\tif (/^remote\\.([^.]*)\\.(\\S*)\\s+(.*)$/) {\n@@ -103,7 +103,7 @@ sub list_branch {\n \tmy ($git) = @_;\n \tmy %seen = ();\n \tmy @branches = eval {\n-\t\t$git->command(qw(repo-config --get-regexp), '^branch\\.');\n+\t\t$git->command(qw(config --get-regexp), '^branch\\.');\n \t};\n \tfor (@branches) {\n \t\tif (/^branch\\.([^.]*)\\.(\\S*)\\s+(.*)$/) {\n@@ -238,8 +238,8 @@ sub add_remote {\n \t\tprint STDERR \"remote $name already exists.\\n\";\n \t\texit(1);\n \t}\n-\t$git->command('repo-config', \"remote.$name.url\", $url);\n-\t$git->command('repo-config', \"remote.$name.fetch\",\n+\t$git->command('config', \"remote.$name.url\", $url);\n+\t$git->command('config', \"remote.$name.fetch\",\n \t\t      \"+refs/heads/*:refs/remotes/$name/*\");\n }\n \ndiff --git a/git-repack.sh b/git-repack.sh\nindex da8e67f..ddfa8b4 100755\n--- a/git-repack.sh\n+++ b/git-repack.sh\n@@ -28,7 +28,7 @@ done\n # Later we will default repack.UseDeltaBaseOffset to true\n default_dbo=false\n \n-case \"`git repo-config --bool repack.usedeltabaseoffset ||\n+case \"`git config --bool repack.usedeltabaseoffset ||\n        echo $default_dbo`\" in\n true)\n \textra=\"$extra --delta-base-offset\" ;;\ndiff --git a/git-revert.sh b/git-revert.sh\nindex bb8f1ca..866d622 100755\n--- a/git-revert.sh\n+++ b/git-revert.sh\n@@ -81,7 +81,7 @@ prev=$(git-rev-parse --verify \"$commit^1\" 2>/dev/null) ||\n git-rev-parse --verify \"$commit^2\" >/dev/null 2>&1 &&\n \tdie \"Cannot run $me a multi-parent commit.\"\n \n-encoding=$(git repo-config i18n.commitencoding || echo UTF-8)\n+encoding=$(git config i18n.commitencoding || echo UTF-8)\n \n # \"commit\" is an existing commit.  We would want to apply\n # the difference it introduces since its first parent \"prev\"\ndiff --git a/git-sh-setup.sh b/git-sh-setup.sh\nindex 6b1c142..b4aa4b2 100755\n--- a/git-sh-setup.sh\n+++ b/git-sh-setup.sh\n@@ -29,7 +29,7 @@ set_reflog_action() {\n }\n \n is_bare_repository () {\n-\tgit-repo-config --bool --get core.bare ||\n+\tgit-config --bool --get core.bare ||\n \tcase \"$GIT_DIR\" in\n \t.git | */.git) echo false ;;\n \t*) echo true ;;\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 83ec03d..68156fc 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -593,7 +593,7 @@ sub multi_init {\n \t\t\t\t      \"$trunk_url ($_trunk)\\n\";\n \t\t\t}\n \t\t\tinit($trunk_url);\n-\t\t\tcommand_noisy('repo-config', 'svn.trunk', $trunk_url);\n+\t\t\tcommand_noisy('config', 'svn.trunk', $trunk_url);\n \t\t}\n \t}\n \t$_prefix = '' unless defined $_prefix;\n@@ -772,22 +772,22 @@ sub log_use_color {\n \treturn 1 if $_color;\n \tmy ($dc, $dcvar);\n \t$dcvar = 'color.diff';\n-\t$dc = `git-repo-config --get $dcvar`;\n+\t$dc = `git-config --get $dcvar`;\n \tif ($dc eq '') {\n \t\t# nothing at all; fallback to \"diff.color\"\n \t\t$dcvar = 'diff.color';\n-\t\t$dc = `git-repo-config --get $dcvar`;\n+\t\t$dc = `git-config --get $dcvar`;\n \t}\n \tchomp($dc);\n \tif ($dc eq 'auto') {\n \t\tmy $pc;\n-\t\t$pc = `git-repo-config --get color.pager`;\n+\t\t$pc = `git-config --get color.pager`;\n \t\tif ($pc eq '') {\n \t\t\t# does not have it -- fallback to pager.color\n-\t\t\t$pc = `git-repo-config --bool --get pager.color`;\n+\t\t\t$pc = `git-config --bool --get pager.color`;\n \t\t}\n \t\telse {\n-\t\t\t$pc = `git-repo-config --bool --get color.pager`;\n+\t\t\t$pc = `git-config --bool --get color.pager`;\n \t\t\tif ($?) {\n \t\t\t\t$pc = 'false';\n \t\t\t}\n@@ -800,7 +800,7 @@ sub log_use_color {\n \t}\n \treturn 0 if $dc eq 'never';\n \treturn 1 if $dc eq 'always';\n-\tchomp($dc = `git-repo-config --bool --get $dcvar`);\n+\tchomp($dc = `git-config --bool --get $dcvar`);\n \treturn ($dc eq 'true');\n }\n \n@@ -919,7 +919,7 @@ sub complete_url_ls_init {\n \twaitpid $pid, 0;\n \tcroak $? if $?;\n \tmy ($n) = ($switch =~ /^--(\\w+)/);\n-\tcommand_noisy('repo-config', \"svn.$n\", $full_url);\n+\tcommand_noisy('config', \"svn.$n\", $full_url);\n }\n \n sub common_prefix {\n@@ -1594,7 +1594,7 @@ sub init_vars {\n \t%tree_map = ();\n }\n \n-# convert GetOpt::Long specs for use by git-repo-config\n+# convert GetOpt::Long specs for use by git-config\n sub read_repo_config {\n \treturn unless -d $GIT_DIR;\n \tmy $opts = shift;\n@@ -1602,7 +1602,7 @@ sub read_repo_config {\n \t\tmy $v = $opts->{$o};\n \t\tmy ($key) = ($o =~ /^([a-z\\-]+)/);\n \t\t$key =~ s/-//g;\n-\t\tmy $arg = 'git-repo-config';\n+\t\tmy $arg = 'git-config';\n \t\t$arg .= ' --int' if ($o =~ /[:=]i$/);\n \t\t$arg .= ' --bool' if ($o !~ /[:=][sfi]$/);\n \t\tif (ref $v eq 'ARRAY') {\ndiff --git a/git.c b/git.c\nindex 530e99f..ec91acd 100644\n--- a/git.c\n+++ b/git.c\n@@ -224,6 +224,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)\n \t\t{ \"check-ref-format\", cmd_check_ref_format },\n \t\t{ \"cherry\", cmd_cherry, RUN_SETUP },\n \t\t{ \"commit-tree\", cmd_commit_tree, RUN_SETUP },\n+\t\t{ \"config\", cmd_config },\n \t\t{ \"count-objects\", cmd_count_objects, RUN_SETUP },\n \t\t{ \"describe\", cmd_describe, RUN_SETUP },\n \t\t{ \"diff\", cmd_diff, RUN_SETUP | USE_PAGER },\n@@ -254,7 +255,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)\n \t\t{ \"push\", cmd_push, RUN_SETUP },\n \t\t{ \"read-tree\", cmd_read_tree, RUN_SETUP },\n \t\t{ \"reflog\", cmd_reflog, RUN_SETUP },\n-\t\t{ \"repo-config\", cmd_repo_config },\n+\t\t{ \"repo-config\", cmd_config },\n \t\t{ \"rerere\", cmd_rerere, RUN_SETUP },\n \t\t{ \"rev-list\", cmd_rev_list, RUN_SETUP },\n \t\t{ \"rev-parse\", cmd_rev_parse, RUN_SETUP },\ndiff --git a/gitk b/gitk\nindex 031c829..31d0aad 100755\n--- a/gitk\n+++ b/gitk\n@@ -6193,7 +6193,7 @@ set wrcomcmd \"git diff-tree --stdin -p --pretty\"\n \n set gitencoding {}\n catch {\n-    set gitencoding [exec git repo-config --get i18n.commitencoding]\n+    set gitencoding [exec git config --get i18n.commitencoding]\n }\n if {$gitencoding == \"\"} {\n     set gitencoding \"utf-8\"\ndiff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\nindex 88af2e6..b606c1d 100755\n--- a/gitweb/gitweb.perl\n+++ b/gitweb/gitweb.perl\n@@ -986,7 +986,7 @@ sub git_get_project_config {\n \t$key =~ s/^gitweb\\.//;\n \treturn if ($key =~ m/\\W/);\n \n-\tmy @x = (git_cmd(), 'repo-config');\n+\tmy @x = (git_cmd(), 'config');\n \tif (defined $type) { push @x, $type; }\n \tpush @x, \"--get\";\n \tpush @x, \"gitweb.$key\";\ndiff --git a/ident.c b/ident.c\nindex 6ad8fed..92d34e0 100644\n--- a/ident.c\n+++ b/ident.c\n@@ -160,8 +160,8 @@ static const char *env_hint =\n \"\\n\"\n \"Run\\n\"\n \"\\n\"\n-\"  git repo-config user.email \\\"you@email.com\\\"\\n\"\n-\"  git repo-config user.name \\\"Your Name\\\"\\n\"\n+\"  git config user.email \\\"you@email.com\\\"\\n\"\n+\"  git config user.name \\\"Your Name\\\"\\n\"\n \"\\n\"\n \"To set the identity in this repository.\\n\"\n \"Add --global to set your account\\'s default\\n\"\ndiff --git a/perl/Git.pm b/perl/Git.pm\nindex c1729ba..5d1ccaa 100644\n--- a/perl/Git.pm\n+++ b/perl/Git.pm\n@@ -482,14 +482,14 @@ sub wc_chdir {\n \n =item config ( VARIABLE )\n \n-Retrieve the configuration C<VARIABLE> in the same manner as C<repo-config>\n+Retrieve the configuration C<VARIABLE> in the same manner as C<config>\n does. In scalar context requires the variable to be set only one time\n (exception is thrown otherwise), in array context returns allows the\n variable to be set multiple times and returns all the values.\n \n Must be called on a repository instance.\n \n-This currently wraps command('repo-config') so it is not so fast.\n+This currently wraps command('config') so it is not so fast.\n \n =cut\n \n@@ -500,9 +500,9 @@ sub config {\n \n \ttry {\n \t\tif (wantarray) {\n-\t\t\treturn $self->command('repo-config', '--get-all', $var);\n+\t\t\treturn $self->command('config', '--get-all', $var);\n \t\t} else {\n-\t\t\treturn $self->command_oneline('repo-config', '--get', $var);\n+\t\t\treturn $self->command_oneline('config', '--get', $var);\n \t\t}\n \t} catch Git::Error::Command with {\n \t\tmy $E = shift;\ndiff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh\nindex 0e4f32d..49b5666 100755\n--- a/t/t1300-repo-config.sh\n+++ b/t/t1300-repo-config.sh\n@@ -3,13 +3,13 @@\n # Copyright (c) 2005 Johannes Schindelin\n #\n \n-test_description='Test git-repo-config in different settings'\n+test_description='Test git-config in different settings'\n \n . ./test-lib.sh\n \n test -f .git/config && rm .git/config\n \n-git-repo-config core.penguin \"little blue\"\n+git-config core.penguin \"little blue\"\n \n cat > expect << EOF\n [core]\n@@ -18,7 +18,7 @@ EOF\n \n test_expect_success 'initial' 'cmp .git/config expect'\n \n-git-repo-config Core.Movie BadPhysics\n+git-config Core.Movie BadPhysics\n \n cat > expect << EOF\n [core]\n@@ -28,7 +28,7 @@ EOF\n \n test_expect_success 'mixed case' 'cmp .git/config expect'\n \n-git-repo-config Cores.WhatEver Second\n+git-config Cores.WhatEver Second\n \n cat > expect << EOF\n [core]\n@@ -40,7 +40,7 @@ EOF\n \n test_expect_success 'similar section' 'cmp .git/config expect'\n \n-git-repo-config CORE.UPPERCASE true\n+git-config CORE.UPPERCASE true\n \n cat > expect << EOF\n [core]\n@@ -54,10 +54,10 @@ EOF\n test_expect_success 'similar section' 'cmp .git/config expect'\n \n test_expect_success 'replace with non-match' \\\n-\t'git-repo-config core.penguin kingpin !blue'\n+\t'git-config core.penguin kingpin !blue'\n \n test_expect_success 'replace with non-match (actually matching)' \\\n-\t'git-repo-config core.penguin \"very blue\" !kingpin'\n+\t'git-config core.penguin \"very blue\" !kingpin'\n \n cat > expect << EOF\n [core]\n@@ -86,7 +86,7 @@ EOF\n cp .git/config .git/config2\n \n test_expect_success 'multiple unset' \\\n-\t'git-repo-config --unset-all beta.haha'\n+\t'git-config --unset-all beta.haha'\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -102,7 +102,7 @@ test_expect_success 'multiple unset is correct' 'cmp .git/config expect'\n mv .git/config2 .git/config\n \n test_expect_success '--replace-all' \\\n-\t'git-repo-config --replace-all beta.haha gamma'\n+\t'git-config --replace-all beta.haha gamma'\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -116,7 +116,7 @@ EOF\n \n test_expect_success 'all replaced' 'cmp .git/config expect'\n \n-git-repo-config beta.haha alpha\n+git-config beta.haha alpha\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -130,7 +130,7 @@ EOF\n \n test_expect_success 'really mean test' 'cmp .git/config expect'\n \n-git-repo-config nextsection.nonewline wow\n+git-config nextsection.nonewline wow\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -145,8 +145,8 @@ EOF\n \n test_expect_success 'really really mean test' 'cmp .git/config expect'\n \n-test_expect_success 'get value' 'test alpha = $(git-repo-config beta.haha)'\n-git-repo-config --unset beta.haha\n+test_expect_success 'get value' 'test alpha = $(git-config beta.haha)'\n+git-config --unset beta.haha\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -160,7 +160,7 @@ EOF\n \n test_expect_success 'unset' 'cmp .git/config expect'\n \n-git-repo-config nextsection.NoNewLine \"wow2 for me\" \"for me$\"\n+git-config nextsection.NoNewLine \"wow2 for me\" \"for me$\"\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -176,18 +176,18 @@ EOF\n test_expect_success 'multivar' 'cmp .git/config expect'\n \n test_expect_success 'non-match' \\\n-\t'git-repo-config --get nextsection.nonewline !for'\n+\t'git-config --get nextsection.nonewline !for'\n \n test_expect_success 'non-match value' \\\n-\t'test wow = $(git-repo-config --get nextsection.nonewline !for)'\n+\t'test wow = $(git-config --get nextsection.nonewline !for)'\n \n test_expect_failure 'ambiguous get' \\\n-\t'git-repo-config --get nextsection.nonewline'\n+\t'git-config --get nextsection.nonewline'\n \n test_expect_success 'get multivar' \\\n-\t'git-repo-config --get-all nextsection.nonewline'\n+\t'git-config --get-all nextsection.nonewline'\n \n-git-repo-config nextsection.nonewline \"wow3\" \"wow$\"\n+git-config nextsection.nonewline \"wow3\" \"wow$\"\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -202,15 +202,15 @@ EOF\n \n test_expect_success 'multivar replace' 'cmp .git/config expect'\n \n-test_expect_failure 'ambiguous value' 'git-repo-config nextsection.nonewline'\n+test_expect_failure 'ambiguous value' 'git-config nextsection.nonewline'\n \n test_expect_failure 'ambiguous unset' \\\n-\t'git-repo-config --unset nextsection.nonewline'\n+\t'git-config --unset nextsection.nonewline'\n \n test_expect_failure 'invalid unset' \\\n-\t'git-repo-config --unset somesection.nonewline'\n+\t'git-config --unset somesection.nonewline'\n \n-git-repo-config --unset nextsection.nonewline \"wow3$\"\n+git-config --unset nextsection.nonewline \"wow3$\"\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -224,12 +224,12 @@ EOF\n \n test_expect_success 'multivar unset' 'cmp .git/config expect'\n \n-test_expect_failure 'invalid key' 'git-repo-config inval.2key blabla'\n+test_expect_failure 'invalid key' 'git-config inval.2key blabla'\n \n-test_expect_success 'correct key' 'git-repo-config 123456.a123 987'\n+test_expect_success 'correct key' 'git-config 123456.a123 987'\n \n test_expect_success 'hierarchical section' \\\n-\t'git-repo-config Version.1.2.3eX.Alpha beta'\n+\t'git-config Version.1.2.3eX.Alpha beta'\n \n cat > expect << EOF\n [beta] ; silly comment # another comment\n@@ -255,7 +255,7 @@ version.1.2.3eX.alpha=beta\n EOF\n \n test_expect_success 'working --list' \\\n-\t'git-repo-config --list > output && cmp output expect'\n+\t'git-config --list > output && cmp output expect'\n \n cat > expect << EOF\n beta.noindent sillyValue\n@@ -263,9 +263,9 @@ nextsection.nonewline wow2 for me\n EOF\n \n test_expect_success '--get-regexp' \\\n-\t'git-repo-config --get-regexp in > output && cmp output expect'\n+\t'git-config --get-regexp in > output && cmp output expect'\n \n-git-repo-config --add nextsection.nonewline \"wow4 for you\"\n+git-config --add nextsection.nonewline \"wow4 for you\"\n \n cat > expect << EOF\n wow2 for me\n@@ -273,7 +273,7 @@ wow4 for you\n EOF\n \n test_expect_success '--add' \\\n-\t'git-repo-config --get-all nextsection.nonewline > output && cmp output expect'\n+\t'git-config --get-all nextsection.nonewline > output && cmp output expect'\n \n cat > .git/config << EOF\n [novalue]\n@@ -281,9 +281,9 @@ cat > .git/config << EOF\n EOF\n \n test_expect_success 'get variable with no value' \\\n-\t'git-repo-config --get novalue.variable ^$'\n+\t'git-config --get novalue.variable ^$'\n \n-git-repo-config > output 2>&1\n+git-config > output 2>&1\n \n test_expect_success 'no arguments, but no crash' \\\n \t\"test $? = 129 && grep usage output\"\n@@ -293,7 +293,7 @@ cat > .git/config << EOF\n \tc = d\n EOF\n \n-git-repo-config a.x y\n+git-config a.x y\n \n cat > expect << EOF\n [a.b]\n@@ -304,8 +304,8 @@ EOF\n \n test_expect_success 'new section is partial match of another' 'cmp .git/config expect'\n \n-git-repo-config b.x y\n-git-repo-config a.b c\n+git-config b.x y\n+git-config a.b c\n \n cat > expect << EOF\n [a.b]\n@@ -328,11 +328,11 @@ cat > expect << EOF\n ein.bahn=strasse\n EOF\n \n-GIT_CONFIG=other-config git-repo-config -l > output\n+GIT_CONFIG=other-config git-config -l > output\n \n test_expect_success 'alternative GIT_CONFIG' 'cmp output expect'\n \n-GIT_CONFIG=other-config git-repo-config anwohner.park ausweis\n+GIT_CONFIG=other-config git-config anwohner.park ausweis\n \n cat > expect << EOF\n [ein]\n@@ -355,7 +355,7 @@ weird\n EOF\n \n test_expect_success \"rename section\" \\\n-\t\"git-repo-config --rename-section branch.eins branch.zwei\"\n+\t\"git-config --rename-section branch.eins branch.zwei\"\n \n cat > expect << EOF\n # Hallo\n@@ -371,12 +371,12 @@ EOF\n test_expect_success \"rename succeeded\" \"diff -u expect .git/config\"\n \n test_expect_failure \"rename non-existing section\" \\\n-\t'git-repo-config --rename-section branch.\"world domination\" branch.drei'\n+\t'git-config --rename-section branch.\"world domination\" branch.drei'\n \n test_expect_success \"rename succeeded\" \"diff -u expect .git/config\"\n \n test_expect_success \"rename another section\" \\\n-\t'git-repo-config --rename-section branch.\"1 234 blabl/a\" branch.drei'\n+\t'git-config --rename-section branch.\"1 234 blabl/a\" branch.drei'\n \n cat > expect << EOF\n # Hallo\n@@ -393,20 +393,20 @@ test_expect_success \"rename succeeded\" \"diff -u expect .git/config\"\n \n test_expect_success numbers '\n \n-\tgit-repo-config kilo.gram 1k &&\n-\tgit-repo-config mega.ton 1m &&\n-\tk=$(git-repo-config --int --get kilo.gram) &&\n+\tgit-config kilo.gram 1k &&\n+\tgit-config mega.ton 1m &&\n+\tk=$(git-config --int --get kilo.gram) &&\n \ttest z1024 = \"z$k\" &&\n-\tm=$(git-repo-config --int --get mega.ton) &&\n+\tm=$(git-config --int --get mega.ton) &&\n \ttest z1048576 = \"z$m\"\n '\n \n rm .git/config\n \n-git-repo-config quote.leading \" test\"\n-git-repo-config quote.ending \"test \"\n-git-repo-config quote.semicolon \"test;test\"\n-git-repo-config quote.hash \"test#test\"\n+git-config quote.leading \" test\"\n+git-config quote.ending \"test \"\n+git-config quote.semicolon \"test;test\"\n+git-config quote.hash \"test#test\"\n \n cat > expect << EOF\n [quote]\n@@ -418,10 +418,10 @@ EOF\n \n test_expect_success 'quoting' 'cmp .git/config expect'\n \n-test_expect_failure 'key with newline' 'git repo-config key.with\\\\\\\n+test_expect_failure 'key with newline' 'git config key.with\\\\\\\n newline 123'\n \n-test_expect_success 'value with newline' 'git repo-config key.sub value.with\\\\\\\n+test_expect_success 'value with newline' 'git config key.sub value.with\\\\\\\n newline'\n \n cat > .git/config <<\\EOF\n@@ -440,7 +440,7 @@ section.noncont=not continued\n section.quotecont=cont;inued\n EOF\n \n-git repo-config --list > result\n+git config --list > result\n \n test_expect_success 'value continued on next line' 'cmp result expect'\n \ndiff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh\nindex e48e2b7..d0aba2c 100755\n--- a/t/t1400-update-ref.sh\n+++ b/t/t1400-update-ref.sh\n@@ -93,8 +93,8 @@ rm -rf .git/$m .git/logs expect\n \n test_expect_success \\\n \t'enable core.logAllRefUpdates' \\\n-\t'git-repo-config core.logAllRefUpdates true &&\n-\t test true = $(git-repo-config --bool --get core.logAllRefUpdates)'\n+\t'git-config core.logAllRefUpdates true &&\n+\t test true = $(git-config --bool --get core.logAllRefUpdates)'\n \n test_expect_success \\\n \t\"create $m (logged by config)\" \\\ndiff --git a/t/t1410-reflog.sh b/t/t1410-reflog.sh\nindex 8e8d526..47d1247 100755\n--- a/t/t1410-reflog.sh\n+++ b/t/t1410-reflog.sh\n@@ -71,7 +71,7 @@ test_expect_success setup '\n \tcheck_fsck &&\n \n \tchmod +x C &&\n-\t( test \"`git repo-config --bool core.filemode`\" != false ||\n+\t( test \"`git config --bool core.filemode`\" != false ||\n \t  echo executable >>C ) &&\n \tgit add C &&\n \ttest_tick && git commit -m dragon &&\ndiff --git a/t/t3200-branch.sh b/t/t3200-branch.sh\nindex bb80e42..5565c27 100755\n--- a/t/t3200-branch.sh\n+++ b/t/t3200-branch.sh\n@@ -94,7 +94,7 @@ test_expect_failure \\\n          git-branch r &&\n          git-branch -m q r/q'\n \n-git-repo-config branch.s/s.dummy Hello\n+git-config branch.s/s.dummy Hello\n \n test_expect_success \\\n     'git branch -m s/s s should work when s/t is deleted' \\\n@@ -107,8 +107,8 @@ test_expect_success \\\n         test -f .git/logs/refs/heads/s'\n \n test_expect_success 'config information was renamed, too' \\\n-\t\"test $(git-repo-config branch.s.dummy) = Hello &&\n-\t ! git-repo-config branch.s/s/dummy\"\n+\t\"test $(git-config branch.s.dummy) = Hello &&\n+\t ! git-config branch.s/s/dummy\"\n \n test_expect_failure \\\n     'git-branch -m u v should fail when the reflog for u is a symlink' \\\ndiff --git a/t/t3700-add.sh b/t/t3700-add.sh\nindex e98786d..caaab26 100755\n--- a/t/t3700-add.sh\n+++ b/t/t3700-add.sh\n@@ -21,7 +21,7 @@ test_expect_success \\\n \n test_expect_success \\\n \t'git-add: Test that executable bit is not used if core.filemode=0' \\\n-\t'git repo-config core.filemode 0 &&\n+\t'git config core.filemode 0 &&\n \t echo foo >xfoo1 &&\n \t chmod 755 xfoo1 &&\n \t git-add xfoo1 &&\n@@ -32,7 +32,7 @@ test_expect_success \\\n \n test_expect_success \\\n \t'git-update-index --add: Test that executable bit is not used...' \\\n-\t'git repo-config core.filemode 0 &&\n+\t'git config core.filemode 0 &&\n \t echo foo >xfoo2 &&\n \t chmod 755 xfoo2 &&\n \t git-update-index --add xfoo2 &&\n@@ -43,7 +43,7 @@ test_expect_success \\\n \n test_expect_success \\\n \t'git-update-index --add: Test that executable bit is not used...' \\\n-\t'git repo-config core.filemode 0 &&\n+\t'git config core.filemode 0 &&\n \t ln -s xfoo2 xfoo3 &&\n \t git-update-index --add xfoo3 &&\n \t case \"`git-ls-files --stage xfoo3`\" in\ndiff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh\nindex 6714b0d..e54fe0f 100755\n--- a/t/t3900-i18n-commit.sh\n+++ b/t/t3900-i18n-commit.sh\n@@ -29,7 +29,7 @@ test_expect_success 'no encoding header for base case' '\n for H in ISO-8859-1 EUCJP ISO-2022-JP\n do\n \ttest_expect_success \"$H setup\" '\n-\t\tgit-repo-config i18n.commitencoding $H &&\n+\t\tgit-config i18n.commitencoding $H &&\n \t\tgit-checkout -b $H C0 &&\n \t\techo $H >F &&\n \t\tgit-commit -a -F ../t3900/$H.txt\n@@ -44,16 +44,16 @@ do\n \t'\n done\n \n-test_expect_success 'repo-config to remove customization' '\n-\tgit-repo-config --unset-all i18n.commitencoding &&\n-\tif Z=$(git-repo-config --get-all i18n.commitencoding)\n+test_expect_success 'config to remove customization' '\n+\tgit-config --unset-all i18n.commitencoding &&\n+\tif Z=$(git-config --get-all i18n.commitencoding)\n \tthen\n \t\techo Oops, should have failed.\n \t\tfalse\n \telse\n \t\ttest z = \"z$Z\"\n \tfi &&\n-\tgit-repo-config i18n.commitencoding utf-8\n+\tgit-config i18n.commitencoding utf-8\n '\n \n test_expect_success 'ISO-8859-1 should be shown in UTF-8 now' '\n@@ -67,9 +67,9 @@ do\n \t'\n done\n \n-test_expect_success 'repo-config to add customization' '\n-\tgit-repo-config --unset-all i18n.commitencoding &&\n-\tif Z=$(git-repo-config --get-all i18n.commitencoding)\n+test_expect_success 'config to add customization' '\n+\tgit-config --unset-all i18n.commitencoding &&\n+\tif Z=$(git-config --get-all i18n.commitencoding)\n \tthen\n \t\techo Oops, should have failed.\n \t\tfalse\n@@ -81,13 +81,13 @@ test_expect_success 'repo-config to add customization' '\n for H in ISO-8859-1 EUCJP ISO-2022-JP\n do\n \ttest_expect_success \"$H should be shown in itself now\" '\n-\t\tgit-repo-config i18n.commitencoding '$H' &&\n+\t\tgit-config i18n.commitencoding '$H' &&\n \t\tcompare_with '$H' ../t3900/'$H'.txt\n \t'\n done\n \n-test_expect_success 'repo-config to tweak customization' '\n-\tgit-repo-config i18n.logoutputencoding utf-8\n+test_expect_success 'config to tweak customization' '\n+\tgit-config i18n.logoutputencoding utf-8\n '\n \n test_expect_success 'ISO-8859-1 should be shown in UTF-8 now' '\n@@ -103,7 +103,7 @@ done\n \n for J in EUCJP ISO-2022-JP\n do\n-\tgit-repo-config i18n.logoutputencoding $J\n+\tgit-config i18n.logoutputencoding $J\n \tfor H in EUCJP ISO-2022-JP\n \tdo\n \t\ttest_expect_success \"$H should be shown in $J now\" '\ndiff --git a/t/t3901-i18n-patch.sh b/t/t3901-i18n-patch.sh\nindex eda0e2d..a881797 100755\n--- a/t/t3901-i18n-patch.sh\n+++ b/t/t3901-i18n-patch.sh\n@@ -31,7 +31,7 @@ check_encoding () {\n }\n \n test_expect_success setup '\n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n \n \t# use UTF-8 in author and committer name to match the\n \t# i18n.commitencoding settings\n@@ -55,7 +55,7 @@ test_expect_success setup '\n \tgit commit -s -m \"Second on side\" &&\n \n \t# the second one on the side branch is ISO-8859-1\n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n \t# use author and committer name in ISO-8859-1 to match it.\n \t. ../t3901-8859-1.txt &&\n \ttest_tick &&\n@@ -64,11 +64,11 @@ test_expect_success setup '\n \tgit commit -s -m \"Third on side\" &&\n \n \t# Back to default\n-\tgit-repo-config i18n.commitencoding UTF-8\n+\tgit-config i18n.commitencoding UTF-8\n '\n \n test_expect_success 'format-patch output (ISO-8859-1)' '\n-\tgit-repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.logoutputencoding ISO-8859-1 &&\n \n \tgit format-patch --stdout master..HEAD^ >out-l1 &&\n \tgit format-patch --stdout HEAD^ >out-l2 &&\n@@ -79,7 +79,7 @@ test_expect_success 'format-patch output (ISO-8859-1)' '\n '\n \n test_expect_success 'format-patch output (UTF-8)' '\n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \n \tgit format-patch --stdout master..HEAD^ >out-u1 &&\n \tgit format-patch --stdout HEAD^ >out-u2 &&\n@@ -91,13 +91,13 @@ test_expect_success 'format-patch output (UTF-8)' '\n \n test_expect_success 'rebase (U/U)' '\n \t# We want the result of rebase in UTF-8\n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n \n \t# The test is about logoutputencoding not affecting the\n \t# final outcome -- it is used internally to generate the\n \t# patch and the log.\n \n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \n \t# The result will be committed by GIT_COMMITTER_NAME --\n \t# we want UTF-8 encoded name.\n@@ -109,8 +109,8 @@ test_expect_success 'rebase (U/U)' '\n '\n \n test_expect_success 'rebase (U/L)' '\n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n-\tgit repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding ISO-8859-1 &&\n \t. ../t3901-utf8.txt &&\n \n \tgit reset --hard side &&\n@@ -121,8 +121,8 @@ test_expect_success 'rebase (U/L)' '\n \n test_expect_success 'rebase (L/L)' '\n \t# In this test we want ISO-8859-1 encoded commits as the result\n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n-\tgit repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n+\tgit config i18n.logoutputencoding ISO-8859-1 &&\n \t. ../t3901-8859-1.txt &&\n \n \tgit reset --hard side &&\n@@ -134,8 +134,8 @@ test_expect_success 'rebase (L/L)' '\n test_expect_success 'rebase (L/U)' '\n \t# This is pathological -- use UTF-8 as intermediate form\n \t# to get ISO-8859-1 results.\n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \t. ../t3901-8859-1.txt &&\n \n \tgit reset --hard side &&\n@@ -147,8 +147,8 @@ test_expect_success 'rebase (L/U)' '\n test_expect_success 'cherry-pick(U/U)' '\n \t# Both the commitencoding and logoutputencoding is set to UTF-8.\n \n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \t. ../t3901-utf8.txt &&\n \n \tgit reset --hard master &&\n@@ -162,8 +162,8 @@ test_expect_success 'cherry-pick(U/U)' '\n test_expect_success 'cherry-pick(L/L)' '\n \t# Both the commitencoding and logoutputencoding is set to ISO-8859-1\n \n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n-\tgit repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n+\tgit config i18n.logoutputencoding ISO-8859-1 &&\n \t. ../t3901-8859-1.txt &&\n \n \tgit reset --hard master &&\n@@ -177,8 +177,8 @@ test_expect_success 'cherry-pick(L/L)' '\n test_expect_success 'cherry-pick(U/L)' '\n \t# Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1\n \n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n-\tgit repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding ISO-8859-1 &&\n \t. ../t3901-utf8.txt &&\n \n \tgit reset --hard master &&\n@@ -193,8 +193,8 @@ test_expect_success 'cherry-pick(L/U)' '\n \t# Again, the commitencoding is set to ISO-8859-1 but\n \t# logoutputencoding is set to UTF-8.\n \n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \t. ../t3901-8859-1.txt &&\n \n \tgit reset --hard master &&\n@@ -206,8 +206,8 @@ test_expect_success 'cherry-pick(L/U)' '\n '\n \n test_expect_success 'rebase --merge (U/U)' '\n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \t. ../t3901-utf8.txt &&\n \n \tgit reset --hard side &&\n@@ -217,8 +217,8 @@ test_expect_success 'rebase --merge (U/U)' '\n '\n \n test_expect_success 'rebase --merge (U/L)' '\n-\tgit-repo-config i18n.commitencoding UTF-8 &&\n-\tgit repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding UTF-8 &&\n+\tgit config i18n.logoutputencoding ISO-8859-1 &&\n \t. ../t3901-utf8.txt &&\n \n \tgit reset --hard side &&\n@@ -229,8 +229,8 @@ test_expect_success 'rebase --merge (U/L)' '\n \n test_expect_success 'rebase --merge (L/L)' '\n \t# In this test we want ISO-8859-1 encoded commits as the result\n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n-\tgit repo-config i18n.logoutputencoding ISO-8859-1 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n+\tgit config i18n.logoutputencoding ISO-8859-1 &&\n \t. ../t3901-8859-1.txt &&\n \n \tgit reset --hard side &&\n@@ -242,8 +242,8 @@ test_expect_success 'rebase --merge (L/L)' '\n test_expect_success 'rebase --merge (L/U)' '\n \t# This is pathological -- use UTF-8 as intermediate form\n \t# to get ISO-8859-1 results.\n-\tgit-repo-config i18n.commitencoding ISO-8859-1 &&\n-\tgit repo-config i18n.logoutputencoding UTF-8 &&\n+\tgit-config i18n.commitencoding ISO-8859-1 &&\n+\tgit config i18n.logoutputencoding UTF-8 &&\n \t. ../t3901-8859-1.txt &&\n \n \tgit reset --hard side &&\ndiff --git a/t/t4000-diff-format.sh b/t/t4000-diff-format.sh\nindex 67b9681..9c58d77 100755\n--- a/t/t4000-diff-format.sh\n+++ b/t/t4000-diff-format.sh\n@@ -28,7 +28,7 @@ test_expect_success \\\n     'git-diff-files -p >current'\n \n # that's as far as it comes\n-if [ \"$(git repo-config --get core.filemode)\" = false ]\n+if [ \"$(git config --get core.filemode)\" = false ]\n then\n \tsay 'filemode disabled on the filesystem'\n \ttest_done\ndiff --git a/t/t4006-diff-mode.sh b/t/t4006-diff-mode.sh\nindex 8ad69d1..ca342f4 100755\n--- a/t/t4006-diff-mode.sh\n+++ b/t/t4006-diff-mode.sh\n@@ -15,7 +15,7 @@ test_expect_success \\\n      tree=`git-write-tree` &&\n      echo $tree'\n \n-if [ \"$(git repo-config --get core.filemode)\" = false ]\n+if [ \"$(git config --get core.filemode)\" = false ]\n then\n \tsay 'filemode disabled on the filesystem, using update-index --chmod=+x'\n \ttest_expect_success \\\ndiff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh\nindex ed37141..3d85cea 100755\n--- a/t/t4013-diff-various.sh\n+++ b/t/t4013-diff-various.sh\n@@ -73,7 +73,7 @@ test_expect_success setup '\n \tfor i in 1 2; do echo $i; done >>dir/sub &&\n \tgit update-index file0 dir/sub &&\n \n-\tgit repo-config log.showroot false &&\n+\tgit config log.showroot false &&\n \tgit commit --amend &&\n \tgit show-branch\n '\ndiff --git a/t/t4102-apply-rename.sh b/t/t4102-apply-rename.sh\nindex 22da6a0..b4662b0 100755\n--- a/t/t4102-apply-rename.sh\n+++ b/t/t4102-apply-rename.sh\n@@ -31,7 +31,7 @@ test_expect_success setup \\\n test_expect_success apply \\\n     'git-apply --index --stat --summary --apply test-patch'\n \n-if [ \"$(git repo-config --get core.filemode)\" = false ]\n+if [ \"$(git config --get core.filemode)\" = false ]\n then\n \tsay 'filemode disabled on the filesystem'\n else\ndiff --git a/t/t5301-sliding-window.sh b/t/t5301-sliding-window.sh\nindex 5a7232a..a6dbb04 100755\n--- a/t/t5301-sliding-window.sh\n+++ b/t/t5301-sliding-window.sh\n@@ -30,19 +30,19 @@ test_expect_success \\\n \n test_expect_success \\\n     'verify-pack -v, packedGitWindowSize == 1 page' \\\n-    'git-repo-config core.packedGitWindowSize 512 &&\n+    'git-config core.packedGitWindowSize 512 &&\n      git-verify-pack -v \"$pack1\"'\n \n test_expect_success \\\n     'verify-pack -v, packedGit{WindowSize,Limit} == 1 page' \\\n-    'git-repo-config core.packedGitWindowSize 512 &&\n-     git-repo-config core.packedGitLimit 512 &&\n+    'git-config core.packedGitWindowSize 512 &&\n+     git-config core.packedGitLimit 512 &&\n      git-verify-pack -v \"$pack1\"'\n \n test_expect_success \\\n     'repack -a -d, packedGit{WindowSize,Limit} == 1 page' \\\n-    'git-repo-config core.packedGitWindowSize 512 &&\n-     git-repo-config core.packedGitLimit 512 &&\n+    'git-config core.packedGitWindowSize 512 &&\n+     git-config core.packedGitLimit 512 &&\n      commit2=`git-commit-tree $tree -p $commit1 </dev/null` &&\n      git-update-ref HEAD $commit2 &&\n      git-repack -a -d &&\n@@ -53,8 +53,8 @@ test_expect_success \\\n \n test_expect_success \\\n     'verify-pack -v, defaults' \\\n-    'git-repo-config --unset core.packedGitWindowSize &&\n-     git-repo-config --unset core.packedGitLimit &&\n+    'git-config --unset core.packedGitWindowSize &&\n+     git-config --unset core.packedGitLimit &&\n      git-verify-pack -v \"$pack2\"'\n \n test_done\ndiff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh\nindex 2c15191..7d93d0d 100755\n--- a/t/t5400-send-pack.sh\n+++ b/t/t5400-send-pack.sh\n@@ -106,7 +106,7 @@ export HOME ;# this way we force the victim/.git/config to be used.\n test_expect_success \\\n         'pushing with --force should be denied with denyNonFastforwards' '\n \tcd victim &&\n-\tgit-repo-config receive.denyNonFastforwards true &&\n+\tgit-config receive.denyNonFastforwards true &&\n \tcd .. &&\n \tgit-update-ref refs/heads/master master^ &&\n \tgit-send-pack --force ./victim/.git/ master &&\ndiff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh\nindex 058cce0..e35d60f 100755\n--- a/t/t5500-fetch-pack.sh\n+++ b/t/t5500-fetch-pack.sh\n@@ -98,7 +98,7 @@ pull_to_client () {\n \tmkdir client &&\n \tcd client &&\n \tgit-init 2>> log2.txt &&\n-\tgit repo-config transfer.unpacklimit 0\n+\tgit config transfer.unpacklimit 0\n )\n \n add A1\ndiff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh\nindex 3ce9446..50c6485 100755\n--- a/t/t5510-fetch.sh\n+++ b/t/t5510-fetch.sh\n@@ -22,14 +22,14 @@ test_expect_success \"clone and setup child repos\" '\n \tcd .. &&\n \tgit clone . two &&\n \tcd two &&\n-\tgit repo-config branch.master.remote one &&\n-\tgit repo-config remote.one.url ../one/.git/ &&\n-\tgit repo-config remote.one.fetch refs/heads/master:refs/heads/one &&\n+\tgit config branch.master.remote one &&\n+\tgit config remote.one.url ../one/.git/ &&\n+\tgit config remote.one.fetch refs/heads/master:refs/heads/one &&\n \tcd .. &&\n \tgit clone . three &&\n \tcd three &&\n-\tgit repo-config branch.master.remote two &&\n-\tgit repo-config branch.master.merge refs/heads/one &&\n+\tgit config branch.master.remote two &&\n+\tgit config branch.master.merge refs/heads/one &&\n \tmkdir -p .git/remotes &&\n \t{\n \t\techo \"URL: ../two/.git/\"\ndiff --git a/t/t6200-fmt-merge-msg.sh b/t/t6200-fmt-merge-msg.sh\nindex 63e49f3..ea14023 100755\n--- a/t/t6200-fmt-merge-msg.sh\n+++ b/t/t6200-fmt-merge-msg.sh\n@@ -108,7 +108,7 @@ EOF\n \n test_expect_success 'merge-msg test #3' '\n \n-\tgit repo-config merge.summary true &&\n+\tgit config merge.summary true &&\n \n \tgit checkout master &&\n \tsetdate &&\n@@ -138,7 +138,7 @@ EOF\n \n test_expect_success 'merge-msg test #4' '\n \n-\tgit repo-config merge.summary true &&\n+\tgit config merge.summary true &&\n \n \tgit checkout master &&\n \tsetdate &&\n@@ -150,7 +150,7 @@ test_expect_success 'merge-msg test #4' '\n \n test_expect_success 'merge-msg test #5' '\n \n-\tgit repo-config merge.summary yes &&\n+\tgit config merge.summary yes &&\n \n \tgit checkout master &&\n \tsetdate &&\n-- \n1.5.0.rc2.g5355\n"},{"id":"32895","messageId":"Pine.LNX.4.64.0701272153400.3021@xanadu.home","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701271745000.25027@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Nicolas Pitre","fromEmail":"nico@cam.org","sentAt":"2007-01-28T02:55:10Z","receivedAt":"2007-01-28T02:55:10Z","isPatch":true,"sender":{"key":"nico@fluxnic.net","avatar":"https://avatars.githubusercontent.com/u/702790?v=4"},"body":"On Sat, 27 Jan 2007, Linus Torvalds wrote:\n\n> Many people thought \"git init-db\" was confusing, and now we call it just \n> \"git init\".\n> \n> Can I vote for doing that for \"git repo-config\" too? Is there something \n> wrong with just calling it \"git config\"?\n\nI really think this is an excellent suggestion.\n\nIn fact I wonder why I didn't suggest it myself in the first place.  ;-)\n\n\nNicolas\n"},{"id":"32903","messageId":"7vk5z7h9y5.fsf@assigned-by-dhcp.cox.net","threadId":"6556","inReplyTo":"20070128024009.GB6545@socrates.priv","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-28T07:44:34Z","receivedAt":"2007-01-28T07:44:34Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Please, do not break people's scripts that still use\nrepo-config.\n"},{"id":"32905","messageId":"epho1l$iv7$1@sea.gmane.org","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701271745000.25027@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2007-01-28T08:50:06Z","receivedAt":"2007-01-28T08:50:06Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Linus Torvalds wrote:\n\n> What would also mean that we'd have the man-page with a simple\n> \n>         man git-config\n> \n> which makes tons of sense if it documents both the config file *and* the \n> \"git config\" program.\n\nActually it should be git-config(5) for format and git-config(1) for\nprogram ;-P\n-- \nJakub Narebski\nWarsaw, Poland\nShadeHawk on #git\n"},{"id":"32906","messageId":"epho62$iv7$2@sea.gmane.org","threadId":"6556","inReplyTo":"7vodojhpos.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2007-01-28T08:52:27Z","receivedAt":"2007-01-28T08:52:27Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Junio C Hamano wrote:\n\n> Linus Torvalds <torvalds@linux-foundation.org> writes:\n> \n>> What would also mean that we'd have the man-page with a simple\n>>\n>>      man git-config\n>>\n>> which makes tons of sense if it documents both the config file *and* the \n>> \"git config\" program.\n>>\n>> Or is that too sneaky?\n> \n> I like that.\n> \n> If the solution can help us deprecate and eventually remove\n> git-var that would be ultra-nice.\n\nWhat about env part of git-var output:\n\n  $ git var -l\n  alias.less=-p cat-file -p\n  core.repositoryformatversion=0\n  core.filemode=true\n  [...]\n  GIT_COMMITTER_IDENT=Jakub Narebski <jnareb@gmail.com> 1169974258 +0100\n  GIT_AUTHOR_IDENT=Jakub Narebski <jnareb@gmail.com> 1169974258 +0100\n\n-- \nJakub Narebski\nWarsaw, Poland\nShadeHawk on #git\n"},{"id":"32932","messageId":"7vlkjmdcdf.fsf@assigned-by-dhcp.cox.net","threadId":"6556","inReplyTo":"7vk5z7h9y5.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-28T22:18:04Z","receivedAt":"2007-01-28T22:18:04Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <junkio@cox.net> writes:\n\n> Please, do not break people's scripts that still use\n> repo-config.\n\nSorry for being terse.  What I would prefer is no change to C\nfiles except what is minimally needed to adding 'git-config' as\nan alias to 'git-repo-config', plus s/repo-config/config/g in\nthe Documentation.\n\nFor Porcelains and test scripts shipped with git, replace\n'repo-config' to 'config' only for actual strings used as\ncommand names to be invoked, to play it safe (renaming a\nvariable 'repo_config' to 'config' needs to be done and verified\ncarefully as there may already be an existing variable 'config',\nfor example).\n"},{"id":"32937","messageId":"20070128233445.GD12125@fieldses.org","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701271745000.25027@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"J. Bruce Fields","fromEmail":"bfields@fieldses.org","sentAt":"2007-01-28T23:34:45Z","receivedAt":"2007-01-28T23:34:45Z","isPatch":true,"sender":{"key":"bfields@citi.umich.edu","avatar":null},"body":"On Sat, Jan 27, 2007 at 05:47:49PM -0800, Linus Torvalds wrote:\n> \n> \n> On Sun, 28 Jan 2007, Matthias Lederhofer wrote:\n> > \n> > Good point, otoh the git-repo-config manual page is actually the one\n> > documenting .git/config :).\n> \n> Btw, one thing I don't like about \"git-repo-config\" is the name.\n> \n> Many people thought \"git init-db\" was confusing, and now we call it just \n> \"git init\".\n> \n> Can I vote for doing that for \"git repo-config\" too? Is there something \n> wrong with just calling it \"git config\"?\n\nWhile we're at it, is there any need for the \"objects\" in\ngit-fsck-objects?\n\n--b.\n"},{"id":"32938","messageId":"Pine.LNX.4.64.0701281549070.3611@woody.linux-foundation.org","threadId":"6556","inReplyTo":"20070128233445.GD12125@fieldses.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2007-01-28T23:49:31Z","receivedAt":"2007-01-28T23:49:31Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Sun, 28 Jan 2007, J. Bruce Fields wrote:\n> \n> While we're at it, is there any need for the \"objects\" in\n> git-fsck-objects?\n\nNot really. We should probably just add that alias too.\n\n\t\tLinus\n"},{"id":"32940","messageId":"7vsldubqof.fsf@assigned-by-dhcp.cox.net","threadId":"6556","inReplyTo":"Pine.LNX.4.64.0701281549070.3611@woody.linux-foundation.org","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-29T00:52:00Z","receivedAt":"2007-01-29T00:52:00Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linus Torvalds <torvalds@linux-foundation.org> writes:\n\n> On Sun, 28 Jan 2007, J. Bruce Fields wrote:\n>> \n>> While we're at it, is there any need for the \"objects\" in\n>> git-fsck-objects?\n>\n> Not really. We should probably just add that alias too.\n\nDone.\n"},{"id":"32946","messageId":"20070129063902.GK12125@fieldses.org","threadId":"6556","inReplyTo":"20070128002246.GA10179@moooo.ath.cx","subject":"Re: [PATCH] user-manual: set user.name and user.email with repo-config","fromName":"J. Bruce Fields","fromEmail":"bfields@fieldses.org","sentAt":"2007-01-29T06:39:02Z","receivedAt":"2007-01-29T06:39:02Z","isPatch":true,"sender":{"key":"bfields@citi.umich.edu","avatar":null},"body":"On Sun, Jan 28, 2007 at 01:22:46AM +0100, Matthias Lederhofer wrote:\n> ---\n> There are some other places where direct editing of .git/config is\n> suggested.  I'd rather tell the user to use repo-config and add a note\n> that repo-config saves the configuration to .git/config (or\n> ~/.gitconfig with --global) which can be edited by hand too.\n> cat .git/config to show the remote configuration can be replaced by\n> git-repo-config -l | grep '^remote\\.'\n> ---\n\nBased on the followup I think what makes sense is to continue with some\nmixture of the two approaches--mainly editing the configuration file\ndirectly, but providing frequent references to the\ngit-repo-config/git-config manpage so people know where to find the\ndetails.\n\nI've added a few more references to the manpage, along with a few other\nupdates, including an initial import of Linus's discussion of dangling\nobjects, and brief dicussions of reflogs, fsck, and pruning:\n\n\tgit://linux-nfs.org/~bfields/git.git master\n\thttp://www.fieldses.org/~bfields/git-user-manual.html\n\n--b.\n"},{"id":"32962","messageId":"slrners5pm.3l6.mdw@metalzone.distorted.org.uk","threadId":"6556","inReplyTo":"7vsldubqof.fsf@assigned-by-dhcp.cox.net","subject":"[PATCH] Make fsck and fsck-objects be builtins.","fromName":"Mark Wooding","fromEmail":"mdw@distorted.org.uk","sentAt":"2007-01-29T15:48:06Z","receivedAt":"2007-01-29T15:48:06Z","isPatch":true,"sender":{"key":"mdw@distorted.org.uk","avatar":null},"body":"The earlier change df391b192 to rename fsck-objects to fsck broke\nfsck-objects.  This should fix it again.\n\nSigned-off-by: Mark Wooding <mdw@distorted.org.uk>\n---\n Makefile                 |    1 +\n fsck.c => builtin-fsck.c |    3 +--\n builtin.h                |    1 +\n git.c                    |    2 ++\n 4 files changed, 5 insertions(+), 2 deletions(-)\n rename fsck.c => builtin-fsck.c (100%)\n\nWithout this, I get \n\n[metalzone ~/src/git]git fsck-objects\nfatal: cannot handle fsck-objects internally\n\nwhich isn't really very helpful.  I thought about hacking the makefile\nto manufacture a hardlink from git-fsck-objects, but this just seemed so\nmuch easier.  And we are slowly accumulating builtins, right? ;-)\n\ndiff --git a/Makefile b/Makefile\nindex 1552b2a..91bd665 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -284,6 +284,7 @@ BUILTIN_OBJS = \\\n \tbuiltin-diff-tree.o \\\n \tbuiltin-fmt-merge-msg.o \\\n \tbuiltin-for-each-ref.o \\\n+\tbuiltin-fsck.o \\\n \tbuiltin-grep.o \\\n \tbuiltin-init-db.o \\\n \tbuiltin-log.o \\\ndiff --git a/fsck.c b/builtin-fsck.c\nsimilarity index 100%\nrename from fsck.c\nrename to builtin-fsck.c\nindex 558f0a6..fec1cbd 100644\n--- a/fsck.c\n+++ b/builtin-fsck.c\n@@ -571,12 +571,11 @@ static int fsck_cache_tree(struct cache_tree *it)\n \treturn err;\n }\n \n-int main(int argc, char **argv)\n+int cmd_fsck(int argc, char **argv, const char *prefix)\n {\n \tint i, heads;\n \n \ttrack_object_refs = 1;\n-\tsetup_git_directory();\n \n \tfor (i = 1; i < argc; i++) {\n \t\tconst char *arg = argv[i];\ndiff --git a/builtin.h b/builtin.h\nindex cfe5990..dd0e352 100644\n--- a/builtin.h\n+++ b/builtin.h\n@@ -34,6 +34,7 @@ extern int cmd_diff_tree(int argc, const char **argv, const char *prefix);\n extern int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix);\n extern int cmd_for_each_ref(int argc, const char **argv, const char *prefix);\n extern int cmd_format_patch(int argc, const char **argv, const char *prefix);\n+extern int cmd_fsck(int argc, const char **argv, const char *prefix);\n extern int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix);\n extern int cmd_grep(int argc, const char **argv, const char *prefix);\n extern int cmd_help(int argc, const char **argv, const char *prefix);\ndiff --git a/git.c b/git.c\nindex d21e5e5..fb03a54 100644\n--- a/git.c\n+++ b/git.c\n@@ -235,6 +235,8 @@ static void handle_internal_command(int argc, const char **argv, char **envp)\n \t\t{ \"fmt-merge-msg\", cmd_fmt_merge_msg, RUN_SETUP },\n \t\t{ \"for-each-ref\", cmd_for_each_ref, RUN_SETUP },\n \t\t{ \"format-patch\", cmd_format_patch, RUN_SETUP },\n+\t\t{ \"fsck\", cmd_fsck, RUN_SETUP },\n+\t\t{ \"fsck-objects\", cmd_fsck, RUN_SETUP },\n \t\t{ \"get-tar-commit-id\", cmd_get_tar_commit_id },\n \t\t{ \"grep\", cmd_grep, RUN_SETUP },\n \t\t{ \"help\", cmd_help },\n-- \n1.5.0.rc2.75.gdbaa0-dirty\n\n-- [mdw]\n"},{"id":"32966","messageId":"7v4pq991n7.fsf@assigned-by-dhcp.cox.net","threadId":"6556","inReplyTo":"slrners5pm.3l6.mdw@metalzone.distorted.org.uk","subject":"Re: [PATCH] Make fsck and fsck-objects be builtins.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2007-01-29T17:35:40Z","receivedAt":"2007-01-29T17:35:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Sorry, and thanks.\n"}]}