刚接触Git,为什么git config中已经有这么多配置了?

刚接触Git,为什么git config中已经有这么多配置了?

刚开始使用 git,刚刚下载。设置好后,惊讶地发现有这么多预设git config --list?我以为没有什么是应该预设的。

输出git config --list

core.excludesfile=~/.gitignore
core.legacyheaders=false
core.quotepath=false
mergetool.keepbackup=true
push.default=simple
color.ui=auto
color.interactive=auto
repack.usedeltabaseoffset=true
alias.s=status
alias.a=!git add . && git status
alias.au=!git add -u . && git status
alias.aa=!git add . && git add -u . && git status
alias.c=commit
alias.cm=commit -m
alias.ca=commit --amend
alias.ac=!git add . && git commit
alias.acm=!git add . && git commit -m
alias.l=log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'
alias.ll=log --stat --abbrev-commit
alias.lg=log --color --graph --pretty=format:'%C(bold white)%h%Creset -%C(bold green)%d%Creset %s %C(bold green)(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
alias.llg=log --color --graph --pretty=format:'%C(bold white)%H %d%Creset%n%s%n%+b%C(bold blue)%an <%ae>%Creset %C(bold green)%cr (%ci)' --abbrev-commit
alias.d=diff
alias.master=checkout master
:

答案1

如果你从 SourceForge 而不是官方网站下载(https://git-scm.com/downloads),这可能只是为了方便,正如Biswapriyo所说。

如果您愿意,您可以删除所有这些内容并开始清理。这没有问题。只需.gitconfig使用您最喜欢的编辑器打开文件并删除所有内容或仅删除您不理解的内容。它通常位于~/.gitconfig

但无论如何,那里还是有一些有用的工具。例如,以 开头的所有内容alias都是编写更少代码的捷径。

例如,如果你输入

git lg

这将得到与

git log --color --graph --pretty=format:'%C(bold white)%h%Creset -%C(bold green)%d%Creset %s %C(bold green)(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

这将创建一个彩色图表,其中包含简短的提交消息和一些其他信息。它非常有用。

所以它非常方便,但我认为你需要先熟悉一下。如果你对 git 完全陌生,我建议你暂时不要使用别名,等到你需要的时候再开始使用。因为如果你现在尝试使用它们,信息量会太大。

答案2

您在输出中看到的大部分内容都是别名命令。

拥有它们并没有什么坏处,因为它们只是合法命令的替代品。

例如,alias.cm=commit -m允许您键入命令git cm "some message"并按回车键执行该命令。这与使用全长命令完全相同git commit -m "some message"

显示的输出的另一个示例是,您可以键入git master以检出主分支,而不必键入git checkout master

如果您不使用快捷方式,则不会使用列出的别名命令。如果您担心意外,您可以.gitconfig在您选择的编辑器中打开并删除配置。

如果没有看到完整的输出就很难看出还有什么git config --list

如果你想查看每一个,或者至少对其中有疑问的,你可以在git-config 文档

答案3

git 配置可以存储在多个地方:

  • 系统范围(通常/etc/gitconfig
  • 用户范围(通常~/.gitconfig
  • 并在每个 git 存储库中(在.git/config

当你调用git config它时,它会按照这个顺序考虑以上所有内容(后面的语句覆盖前面的语句),并且它取决于你在文件系统中的位置,因为如果你在 git 存储库中,它的配置将被考虑在内。

当您安装时git,系统范围的配置可能已经填充了您安装的 git“包”维护者认为有用的默认值。您自己的个人配置可能是空的,以前的 git 存储库配置也是如此,除非您更改它们(以及某些默认值,如原点设置等)。

如果你查看 git config 手册页,你会看到以下内容:

   --global
       For writing options: write to global ~/.gitconfig file rather than the repository .git/config, write to $XDG_CONFIG_HOME/git/config file if this file exists and the ~/.gitconfig file doesn't.

       For reading options: read only from global ~/.gitconfig and from $XDG_CONFIG_HOME/git/config rather than from all available files.

       See also the section called "FILES".

   --system
       For writing options: write to system-wide $(prefix)/etc/gitconfig rather than the repository .git/config.

       For reading options: read only from system-wide $(prefix)/etc/gitconfig rather than from all available files.

       See also the section called "FILES".

   --local
       For writing options: write to the repository .git/config file. This is the default behavior.

       For reading options: read only from the repository .git/config rather than from all available files.

       See also the section called "FILES".

“FILES”部分显示:

   If not set explicitly with --file, there are four files where git config will search for configuration options:

   $(prefix)/etc/gitconfig
       System-wide configuration file.

   $XDG_CONFIG_HOME/git/config
       Second user-specific configuration file. If $XDG_CONFIG_HOME is not set or empty, $HOME/.config/git/config will be used. Any single-valued variable set in this file will be overwritten by whatever is in ~/.gitconfig. It is a good idea not to create this file if you sometimes use older versions of Git, as
       support for this file was added fairly recently.

   ~/.gitconfig
       User-specific configuration file. Also called "global" configuration file.

   $GIT_DIR/config
       Repository specific configuration file.

并且:

文件按上述顺序读取,最后找到的值优先于先前读取的值。当获取多个值时,将使用所有文件中某个键的所有值。

相关内容