Git是一个开源的分布式版本控制系统,用于处理各种规模的项目版本管理。它由Linus Torvalds设计,主要用于Linux内核开发。Git的特点包括速度、简单的设计、对非线性开发模式的支持、完全的分布式能力以及高效管理大规模项目的能力。基本概念包括本地仓库、工作区和暂存区。Git的使用场景包括克隆仓库、创建分支、修改代码、合并分支、生成补丁等。Git是一个强大且灵活的工具,适用于各种规模的软件开发项目,使版本控制更加高效和可靠。
在Git中,配置文件用于存储用户特定的设置和行为。Git使用三个级别的配置文件,按优先级从高到低依次为:系统、全局、本地。
1、系统级别配置文件:通常位于/etc/gitconfig,适用于系统上所有用户和项目。可以通过–system选项访问和修改此文件。
yingluo@yingluo-PC MINGW64 ~
##查看系统级别配置文件
$ git config --system --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
##新增
git config --system --add core.autocrlf false
##修改core.autocrlf=true为false core.autocrlf:行尾结束符
##git config --system 需要修改的参数 需要修改的值
$ git config --system core.autocrlf false
error: could not lock config file D:/Program Files/Git/etc/gitconfig: Permission denied ##尴尬说是没权限,那就根据路径手动修改保存即可。
##删除
git config --system --unset core.autocrlf false
2、全局级别配置文件:特定于当前用户,通常位于~/.gitconfig。可以通过–global选项访问和修改此文件。
##查看全局级别配置文件
$ git config --global --list
##新增
$ git config --global --add core.autocrlf false
##git config --global 需要修改的参数 需要修改的值
$ git config --global core.autocrlf false
##删除
git config --global --unset core.autocrlf false
3、本地级别配置文件:特定于当前Git仓库,位于.git/config。这个文件只影响该仓库的操作。
##查看本地级别配置文件
$ git config --local --list
##新增
$ git config --local --add core.autocrlf false
##git config --local 需要修改的参数 需要修改的值
$ git config --local core.autocrlf false
##删除
git config --local --unset core.autocrlf false
1、首先要做的事情就是设置你的名字和邮箱地址:
$ git config --global user.name "user name"
$ git config --global user.email [email protected]
2、core.editor默认情况下,git 会调用你通过环境变量 $VISUAL 或 $EDITOR 设置的文本编辑器, 如果没有设置,默认则会调用 vi 来创建和编辑你的提交以及标签信息。 你可以用 core.editor 选项来修改默认的编辑器:
##设置了此代码后,现在,无论你定义了什么终端编辑器,Git 都会调用 Emacs 编辑信息
$ git config --global core.editor emacs
3、core.autocrlf 是否自动将换行符转换为操作系统标准的换行符(CRLF、LF 或 CR),或者在提交时从文件内容中删除这些换行符
当 core.autocrlf 设置为 true 时,Git 会做以下事情:
1.当检出代码(即从 Git 仓库中取出文件到工作区)时,Git 会将文本文件的换行符转换为当前操作系统的标准换行符。
2.当提交文件时,Git 会自动删除这些文件的换行符,将它们转换为LF(Unix风格)。这种设置的主要目的是确保跨平台的兼容性。因为不同的操作系统使用不同的换行符标准(Windows使用CRLF,而Unix和Linux使用LF),通过自动转换,可以确保在任何平台上都可以正常检出和提交代码。但是,这种设置也有一些潜在的问题。例如,如果你在本地修改了文件并尝试提交,由于自动转换可能会导致你的修改丢失。为了避免这种情况,一些开发者会设置 core.autocrlf 为 false,这样 Git 就不会自动转换换行符。
4、core.fscache 它允许你控制文件系统缓存的行为,它可以缓存文件和目录的元数据,以便在多次访问相同的文件或目录时提高性能
当 core.fscache 设置为 true 时,Git 将使用文件系统缓存来存储文件和目录的元数据。这可以加速对文件和目录的访问,特别是在多次访问相同的文件或目录时。
默认情况下,Git 会自动启用文件系统缓存,但你可以通过设置 core.fscache 为 false 来禁用它。禁用文件系统缓存可能会稍微降低文件操作的速度,但在某些情况下,它可以提供更好的性能。
5、core.whitespace 设置或获取用于检测和报告空白错误的规则
当你设置 core.whitespace 选项时,你可以指定一个或多个规则来检查空白问题。Git 提供了几个预定义的规则,如 trailing-space、space-before-tab、tab-in-indent 等。你可以通过将规则名称作为参数传递给 core.whitespace 来启用这些规则。还可以使用 git diff --check 命令来手动检查当前工作区的空白问题。通过命令设置:
git config core.whitespace trailing-space space-before-tab
trailing-space:这个选项会查找每行结尾的空格,并将其视为错误。
space-before-tab:这个选项会查找每行开头的制表符前的空格字符,并将其视为错误。
tab-in-indent:这个选项会查找行的初始缩进部分中的制表符,并将其视为错误。
6、core.excludesfile:用于指定一个排除文件,其中包含要忽略的文件和目录的规则。这个配置选项允许用户自定义忽略文件和目录的规则,以便更好地管理仓库中的文件
要设置 core.excludesfile,可以使用 git config 命令。例如,要将排除文件设置为 ~/.gitignore,可以运行以下命令:
git config --global core.excludesfile '~/.gitignore'
这将设置一个全局的排除文件,其中包含要忽略的文件和目录的规则。这些规则将应用于所有的仓库。
除了全局设置外,也可以为单个仓库设置 core.excludesfile。例如,要在当前仓库中设置排除文件为 .gitignore 文件,可以运行以下命令:
git config core.excludesfile '.gitignore'
这将设置当前仓库的排除文件为 .gitignore 文件。在这个文件中,可以定义要忽略的文件和目录的规则。
使用 core.excludesfile 可以帮助用户更好地管理仓库中的文件,避免将不需要的文件提交到版本控制中。通过自定义忽略规则,用户可以确保只有重要的文件被跟踪和提交,从而提高代码管理和协作的效率。
7、core.fscache:用于启用或禁用文件系统缓存
如果设置为 true,core.fscache 将启用文件系统缓存。这将使用缓存来存储 Git 对象和数据的副本,以便更快地访问这些对象和数据。启用文件系统缓存可以提高克隆仓库、检出分支和执行其他一些操作的速度。
如果设置为 false,core.fscache 将禁用文件系统缓存。这将禁用缓存机制,并可能导致某些操作的速度变慢。
要启用或禁用文件系统缓存,可以使用以下命令:
git config --global core.fscache true
设置为 true 将启用文件系统缓存,设置为 false 将禁用文件系统缓存。
8、alias:常用的命令创建自定义的简短命令
例如,要将 git status 命令的别名设置为 s,可以运行以下命令:
git config --global alias.s 'status'
这将创建一个全局别名 s,等同于 git status 命令。现在,在终端中输入 git s 将执行 git status 命令。
要查看已设置的别名列表,可以使用以下命令:
git config --list | grep alias
9、color:控制Git是否使用颜色输出,以及颜色的设置方式
1、color.ui: 这个变量控制默认的颜色输出。将其设置为 true 将启用默认的颜色输出,设置为 false 将禁用颜色输出。
git config --global color.ui true
2、color.branch: 这个变量控制分支相关的颜色输出。将其设置为 true 将启用分支相关的颜色输出,设置为 false 将禁用颜色输出。
git config --global color.branch true
3、color.diff: 这个变量控制差异比较时的颜色输出。将其设置为 true 将启用差异比较时的颜色输出,设置为 false 将禁用颜色输出。
git config --global color.diff true
4、color.interactive: 这个变量控制交互式命令的颜色输出。将其设置为 true 将启用交互式命令的颜色输出,设置为 false 将禁用颜色输出。
git config --global color.interactive true
5、color.: 对于其他特定的 Git 命令,例如 color.status、color.grep 等,也可以设置相应的变量来控制它们的颜色输出。
git config --global color.status true
git config --global color.grep true
通过设置这些配置选项,你可以根据自己的偏好来启用或禁用 Git 中的颜色输出。如果你想完全禁用所有颜色输出,只需将 color.ui 设置为 false 即可。如果你想为特定命令启用颜色输出,只需相应地设置该命令的配置选项即可。
10、diff.tool:设置或获取用于显示差异的工具(如 vimdiff、diffuse 等)
默认情况下,Git 使用 diff 命令来显示差异。但是,你可以通过设置 diff.tool 选项来指定其他工具
git config --global diff.tool vimdiff
Vimdiff:
1、打开终端。
2、输入 git config --global diff.tool vimdiff 命令来设置 Vimdiff 为默认的差异查看工具。
3、输入 git difftool 命令来使用 Vimdiff 查看文件之间的差异。
KDiff3:
1、打开终端。
2、输入 git config --global merge.tool kdiff3 命令来设置 KDiff3 为默认的合并工具。
3、在需要进行合并操作时,输入 git mergetool 命令,KDiff3 将自动启动并显示文件之间的差异。
Meld:
1、打开终端。
2、输入 git config --global merge.tool meld 命令来设置 Meld 为默认的合并工具。
3、 在需要进行合并操作时,输入 git mergetool 命令,Meld 将自动启动并显示文件之间的差异。
需要注意的是,为了使用这些工具,需要先安装它们,并将它们的可执行文件路径添加到系统的环境变量中。这样 Git 才能成功启动这些工具。
11、diff.algorithm:设置或获取用于计算差异的算法(如 myers、 patience 等)
默认情况下,Git 使用 myers 算法来计算差异。该算法在大多数情况下都能提供较好的性能和准确性,但有时可能会产生较大的差异输出。
如果你希望使用其他算法来计算差异,可以通过设置 diff.algorithm 选项来实现:
git config --global diff.algorithm patience
Myers 算法:这是 Git 默认的 Diff 算法,由 Eugene W. Myers 在 1986 年发表。Myers 算法通过完全相同的行来实现匹配,但可能会有大量的空行和括号影响结果。
Patience 算法:这是 Myers 算法的改进,通过“少量的独特的行”做锚定,来更合适的标记代码段的移动。
Histogram 算法:这是 Patience 算法的改进,通过“少量的独特的行”做锚定,来更合适的标记代码段的移动。
需要注意的是,算法的选择可能会影响计算差异的速度和输出的差异大小。因此,在选择算法时,需要根据实际情况进行权衡和测试,以找到最适合当前工作流程的算法。
12、merge.tool:设置或获取用于合并的工具(如 vimdiff、kdiff3 等)
当你在进行合并操作时,如果发生冲突,Git 会自动启动指定的工具来帮助你解决冲突。
git config --global merge.tool kdiff3
kdiff3:KDiff3 是一个可视化的合并工具,它支持三种合并方式:自动合并、交互式合并和手动合并。在自动合并方式中,KDiff3 会尝试自动解决冲突,并在解决冲突后自动保存文件。在交互式合并方式中,KDiff3 会显示冲突的文件,并允许你手动选择要保留的代码行。在手动合并方式中,你需要手动编辑冲突文件,并删除冲突标记。
meld:Meld 也是一个可视化的合并工具,它支持两种合并方式:自动合并和手动合并。在自动合并方式中,Meld 会尝试自动解决冲突,并在解决冲突后自动保存文件。在手动合并方式中,Meld 会显示冲突的文件,并允许你手动编辑冲突区域。
vimdiff:Vimdiff 是 Vim 文本编辑器的合并模式。它支持两种合并方式:自动合并和手动合并。在自动合并方式中,Vimdiff 会尝试自动解决冲突,并在解决冲突后自动保存文件。在手动合并方式中,Vimdiff 会显示冲突的文件,并允许你手动编辑冲突区域。
kdiff3、meld 和 vimdiff 都支持自动合并和手动合并两种方式,但具体实现和界面有所不同。你可以根据自己的偏好选择适合你的合并工具。
13、merge.conflictstyle:设置或获取冲突解决中使用的冲突样式(如 diff3、merge 等)
merge:这是默认值,使用标准的冲突分界符(<<<<<<<, =======, >>>>>>>)对冲突内容进行标识。其中,两个文字块分别是本地的修改和他人的修改。
diff3:在这种风格下,冲突文件中会出现三个文字块,分别表示本地更改版本、共同的原始版本和他人的更改版本。在 ======= 标记之前,还会添加 ||||||| 标记和原始文本。