Git仓库的基本配置

简介

本文主要介绍使用Git创建仓库之后所需进行的一些基本配置。如果你的电脑上还没有安装Git,那么可以在其官方网站上了解如何进行安装。在完成安装后,请根据你的操作系统类型来决定如何实现后文将介绍到的操作:如果你使用的是Linux或Unix(包括macOS)操作系统,那么可以通过Shell终端进行有关操作;如果你使用的是Windows系统,那么请在开始菜单中找到并打开一个叫“Git Bash”的终端程序来进行有关操作。

在进入正文之前,你需要先了解:按照影响范围来划分,Git的配置主要可以分为全局配置和本地配置;全局配置的影响范围覆盖当前操作系统用户可以操作的所有仓库;而本地配置的影响范围仅限于一个仓库,且其优先级比全局配置要高(换句话说,当全局配置和本地配置同时存在时,程序会优先从本地配置中读取配置参数值)。以下是实现前述两类配置的命令样式:

# 全局配置:
git config --global <参数名> <参数值>

# 本地配置:
git config --local <参数名> <参数值>

需要注意的是,如果要进行本地配置,必须先将终端的工作目录切换至需要接受配置的仓库所在目录,再运行git config --local命令;而全局配置对终端工作目录则没有要求。为简便起见,后文将介绍的配置均以全局配置的形式实现(对于Git的初学者来说,全局配置应该就能够满足基本需求了)。

接下来开始正式介绍一些基本配置。

用户信息配置

使用Git之前首先需要配置的就是用户信息,包括用户名和邮箱;这是因为每次在Git中提交文件修改时,程序都会读取前述配置,并且将其写入提交信息之中。以下指令展示了如何在Git中配置用户名;当你运行该指令时,请将指令中的zenggyu替换成你自己希望使用的用户名。

git config --global user.name zenggyu

类似地,用户邮箱可以通过以下指令进行设置;当你要运行该指令时,请将[email protected]替换成你自己的邮箱地址。

git config --global user.email [email protected]

文件路径显示配置

默认情况下,有些Git命令(例如git statusgit diff)会将文件路径里的中日韩字符视为特殊字符,并且以字符编码的形式显示(例如:"\347\211\233\351\200\274")。这些编码不便阅读,会造成使用上的不便。为了避免这种情况,你可以进行以下配置,使有关指令直接显示各种字符,而不要显示其编码。

git config --global core.quotepath false

换行符配置

Linux系统以及Unix系统(如macOS)所使用的文本换行符是LF,而Windows系统使用的文本换行符是CRLF;这种差异会为跨平台文件版本控制及协作带来一些问题。为了避免相关问题,我们可以做此约定:保存于版本库中的文本文件统一使用LF作为换行符;而工作区中的文本文件选用的换行符则依操作系统类型而定。

如果你是Linux或Unix(包括macOS)用户,请进行以下配置,避免Git对换行符进行自动转换,进而遵守上述约定:

git config --global core.autocrlf input

如果你是Windows用户,请进行以下配置,使Git在把工作区的文件提交至版本库时自动将文件中的CRLF替换成LF,同时在从版本库中检出文件至工作区时自动将LF转换成CRLF,进而遵守前述约定:

git config --global core.autocrlf true

需要注意的是,Git在对换行符进行自动替换的过程中可能会引入数据损坏;所以,无论你使用的是何种操作系统1,都应该进行以下设置,使Git在替换换行符前先进行测试,以避免某些可能导致数据损坏的情形:

git config --global core.safecrlf true

编辑器配置

在进行某些操作的时候,Git会调用编辑器,供用户输入信息。在某些系统上(例如Windows),默认的编辑器是Vim;但该编辑器功能复杂、比较难用,所以最好使用其他编辑器替代。作为一款轻量级的编辑器,nano用起来比较简单,而且无需额外安装2,因此是理想的替代品。要将nano设置成Git的默认编辑器,请使用以下指令:

git config --global core.editor nano

忽略文件可执行权限变化

有些文件系统(例如Linux的ext4)能够记录文件的可执行权限信息,而另一些文件系统(例如Windows的NTFS)并不记录该信息;当文件从前一类系统移动到后一类系统时,可能发生权限信息的丢失。为了避免Git将这类变化视为文件变更,可以进行以下配置:

git config --global core.filemode false

权限凭证存储

注意:切忌在公用电脑或其他自己无法掌控隐私的设备上进行此项设置!

在向Github或GitLab等远程Git仓库推送或拉取代码时,需要进行权限验证。如果不希望每次操作时都要输入用户和密码等信息,可以在Linux中进行以下配置:

sudo apt install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

进行上述配置后,你只需要在第一次向远程仓库进行代码推送时提供验证信息(用户名、密码等);之后再向同一仓库进行推送时,无需再输入信息。

对Windows或macOS操作系统,请使用Git Credential Manager Core

检查及修改配置

要检查当前的所有全局配置,请使用以下指令:

git config --global --list

如果在检查配置后,发现某些配置有误,可以使用以下指令删除配置(在进行实际操作时需要把以下指令中的<参数名>换成具体的参数名,例如用户名user.name):

git config --global --unset <参数名>

在删除配置参数后,如有需要,可以再使用前面讲到的方法配置新的参数值。

小结

以上就是安装Git之后需要进行的一些基本配置;这些配置在绝大多数情况下都是适用且必要的。本文附录部分还会介绍一些在特殊情况需要用到的配置,供有需要的读者参考。

附录:基于SSH动态端口转发的代理配置

注意:如果你不具有使用远程Git服务(如GitHub、GitLab、Gitea等)及代理的需求,请不要随便进行此项配置,否则可能导致无法正常访问服务!

由于各种原因,有时你可能无法直接访问一台部署了Git服务3的服务器A;但如果你可以通过SSH访问另一台服务器B,且服务器B能够访问服务器A上的Git服务,那么你可以通过基于SSH动态端口转发的代理实现对该Git服务的间接访问。

要在Git中实现上述代理配置,只需要在对应仓库目录中执行以下指令(注:代理配置最好通过本地配置实现,以避免影响那些无需通过代理访问Git服务的仓库)即可:

git config --local http.proxy socks5://127.0.0.1:1081

在完成代理配置后,可以通过以下指令打开SSH连接并实现动态端口转发(该操作同样可以在Shell或Git Bash终端中实现):

ssh -ND 1081 -p <端口> <用户名>@<地址>

上述指令中,<端口><用户名><地址>分别对应服务器B的SSH端口号、用户名和地址,在使用时请替换成实际值。需要注意的是,在之后使用代理的过程中,该SSH连接必须保持开启状态;此要求有两层含义:首先,在通过终端打开连接后,请不要关闭该终端,或在终端中输入其他指令中断已建立的连接(如果要用终端进行其他操作,请打开一个新的终端,并在新终端中进行);其次,如果(由于终端关闭、电脑重启等原因)连接中断了,需要重新开启连接和动态端口转发才能继续使用代理。

在完成以上两步操作之后,打开一个新的终端,就可以进行git pushgit pull等远程操作了(远程仓库地址为服务器A的地址,可以通过git remote add等指令进行配置,此处不赘述)。

最后,再介绍一下在火狐(Firefox)浏览器网络连接设置界面中进行相应代理配置的要点,以便通过浏览器访问Git服务页面:

  • 选择手动代理配置;
  • SOCKS主机地址填127.0.0.1,端口填1081
  • 协议版本选择SOCKS v5。

进行上述设置后,在浏览器中输入服务器A的地址(以及部署于其上的Git服务的端口号),即可通过SSH动态端口转发(注意:这里同样需要确保通过前述方法建立的SSH连接处于开启状态)访问Git服务页面了。

参考文献

关于Git配置的更多详细信息,可以参考其官方文档


  1. 严格来说,如果你是Linux或Unix(包括macOS)用户,并且按照本文的建议将core.autocrlf参数设置为input,那么你可以忽略这个配置;不过,多设置了也有益无害。

  2. Linux和Unix(包括macOS)系统基本上都自带nano编辑器;对Windows系统而言,较新版本的Git for Windows安装程序已经包含了nano编辑器,该编辑器会随Git一并被安装到系统上。

  3. 例如Gitea、GitLab等;想了解如何部署这些服务的读者可以参考另一篇文章:https://blog.zenggyu.com/zh/post/2020-06-24/gitea的部署-备份及恢复/

下一页
上一页
comments powered by Disqus