Git 安装及使用

date
Sep 5, 2021
slug
postnreg
status
Published
tags
Git
summary
type
Post

安装类

https://github.com/git/git/tags下载最新的zip包后,解压并开始安装,官方教程地址
这里记录关键点以便参考:
$ yum install gcc autoconf zlib-devel  # 安装依赖
# yum install gcc autoconf zlib-devel asciidoc xmlto  # 若需doc则会多2个依赖
$ make configure  # 生成configure文件
$ ./configure --prefix=/usr/local/git/  # 生成配置信息,指定安装目录
$ make
# make all doc  # 编译全部内容,包括文档
$ make install 
# make install install-doc install-html  # 安装全部内容
为方便使用,安装后配置环境变量才能使用快捷命令git。永久配置环境变量有两种方法,一种是直接编辑/etc/profile,在最后追加
export PATH=$PATH:/usr/local/git/bin
于是在/etc/profile.d下新建脚本git.sh,添加以下内容
💡
根据/etc/profile文件内容可以看到,其会读取/etc/profile.d文件夹下所有的sh内容,使用profile.d方式更利于维护。
# vim /etc/profile.d/git.sh

export GIT_HOME=/usr/local/git
export PATH=$PATH:$GIT_HOME/bin
然后刷新环境变量,测试效果。
$ source /etc/profile

$ echo $GIT_HOME
/usr/local/git

$ git -v
git version 2.40.1

配置类

忽略文件大小写

Git 默认对于文件名大小写是不敏感,即ignorecase true。如果修改了文件名大小写,但是 Git 并没有发现有任何的改动。所以我一般是设为大小写敏感的,难得去git mv
git config core.ignorecase false

忽略文件属性

Git 默认会跟踪文件的权限修改,即filemode true,当使用 chmod 后,被修改权限的文件添加到被修改的状态。但这个不是必须的,因为大部分代码是源代码,适配平台的默认属性即可,免得不必要的 git 变更。
git config core.filemode false

存储认证信息

如果使用SSH连接且未对密钥设置口令,那么会很方便的使用Git。但如果使用HTTP(S)链接,那么默认情况下每次都要输入用户名密码。Git的凭证系统机制如下:
  • 默认所有都不缓存:每一次连接都会询问你的用户名和密码。
  • cache模式:将凭证存放在内存中一段时间,并且在15分钟后从内存中清除。密码永远不会被存储在磁盘中。--timeout <seconds> 参数可以设置后台进程的存活时间,默认是900秒。
  • store模式:将凭证用明文的形式存放在磁盘中,并且永不过期。这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息。这种方式的缺点是你的密码是用明文的方式存放在你的 home 目录下。--file <path> 参数,可以自定义存放密码的文件路径,默认是 ~/.git-credentials 。
  • osxkeychain模式:在Mac下Git会将凭证缓存到你系统用户的钥匙串中。这种方式将凭证存放在磁盘中,并且永不过期,但是是被加密的,这种加密方式与存放 HTTPS 凭证以及 Safari 的自动填写是相同的。
  • manager模式:在Windows下将用户信息加密存储到Windows凭据管理器中,而wincred模式则是明文存储。也可安装一个叫做 “Git Credential Manager for Windows” 的辅助工具,和的osxkeychain十分类似,但是是使用 Windows Credential Store 来控制敏感信息。
git config --global credential.helper cache
git config --global credential.helper "store --file ~/.git-credentials"
Git 支持配置多个辅助工具,其会按顺序查询,并且在找到第一个回答时停止查询。当保存凭证时,Git 会将用户名和密码发送给所有配置列表中的辅助工具,它们会按自己的方式处理用户名和密码。 如果你在闪存上有一个凭证文件,但又希望在该闪存被拔出的情况下使用内存缓存来保存用户名密码,.gitconfig 配置文件如下:
[credential]
    helper = store --file /mnt/thumbdrive/.git-credentials
    helper = cache --timeout 30000

认证类

HTTP 方式被拒

报错下面之一
remote: HTTP Basic: Access denied fatal: Authentication failed for "http://x.y.z/a.git"// 或git Failed to connect to port xxxx: Connection refused
这两种情况大概率是上次使用的帐户密码,跟现用仓库的帐户密码对不上, 所以就提示用户无权限连接, 或者拒绝访问。所以需要将本地保存 git 帐户密码重置。解决办法是挨个执行下面命令,直到不在报错为止。
git config --unset credential.helper # 进入本地仓库,重置本地仓库的帐密信息
git config --global --unset credential.helper # 重置全局的帐密信息
git config --system --unset credential.helper # 可选,大部分情况不用。重置系统的帐密信息
 

分支类

拉取/推送所有分支

在转移仓库时,需先将旧远端仓库的分支全部checkout到本地,然后再推送
notion image
# 将本地分支与远程保持同步
git fetch origin

# 拉取远程分支并同时创建对应的本地分支# 
git checkout -b 本地分支名x origin/远程分支名x

# 拉取所有远端分支
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

# 推送所有分支到远端
git push origin_new --all

参考资料:
 

© 刘德华 2020 - 2025