环境配置
操作系统相关
cygwin
git中可以加入忽略文件权限的配置,具体如下:
git config core.filemode false // 当前版本库 git config --global core.fileMode false // 所有版本库 git config --system core.fileMode false // 所有版本库
这样就设置了忽略文件权限。查看下配置:
cat .git/config // 查看当前git的配置文件
修正中文输出为八进制转义符的错误:
git config --global core.quotepath false
基础配置
彩色显示
git config --global color.ui true
自动转换换行
如果合作人有在win下开发,让他打开以下开关实现:
-
提交时,自动把
<CR><LF>
转为<LF>
; -
签出时,自动把
<LF>
转为<CR><LF>
:
git config --global core.autocrlf true
只在提交时把<CR><LF>
转为<LF>
:
git config --global core.autocrlf input
当然也会有整个团队都是win环境的团队,那就不用转了:
git config --global core.autocrlf false
空格警告
当代码尾部有空格时发出警告:
apply.whitespace=warn
推送方式
git push时只推送当前分支:
git config --global push.default "current"
用户配置
git config --global user.name "Jade Shan" git config --global user.email aaa@bbb.com
Openssh 禁用 ssh-rsa
由于openssh 8.8p1版本开始,客户端默认禁用了ssh-rsa,而我们的gitlab目前只支持ssh-rsa,所以只能在本地开启ssh-rsa的支持,
通过ssh -v git@git.dev.sh.ctripcorp.com
可以看出客户端已经升为了9.0版本,所以需要在本地添加配置,
手动在.ssh/config
文件里(没有的话手动创建,文件路径为 D:用户/user/.ssh/ )加上如下内容:
Host git.dev.sh.ctripcorp.com PubKeyAcceptedKeyTypes=+ssh-rsa
密钥配置
第二账号的密钥
首先cd到~/.ssh
(为你工作账号的邮箱地址) 生成新的SSH key:id_rsa_second
cd ~/.ssh ssh-keygen -t rsa -C 'second@mail.com' -f id_rsa_second
~/.ssh/config
文件中配置私钥对应的服务器:
Host gitlab.xxx.com ##可以随意命名,链接时使用这个名字 HostName gitlab.xxx.com User git Port 22 IdentityFile ~/.ssh/id_rsa_second
commit前设置账号
注意:git根据配置文件的user.email
来获取git帐号显示author信息,所以对于多帐号
用户一定要记得在提交前将当前仓库的user.email
改为相应的email(second@mail.com)
git config user.name "my name" git config user.email aaa@bbb.com
每次commit操作都会记录作者,如果其中有一次提交的作者没有权限, 那么以后push操作会被拦截:
$ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 437 bytes | 72.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: GitLab: Author 'foo@bb.com' is not a member of team To git.my-company.com:myname/myname.gitlab.io.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git.my-company.com:myname/myname.gitlab.io.git'
这时候光修改用户的email是没有用的, 因为前一次提交时已经把错误的邮件地址写入commit信息里了, 还要再修改掉前一次提交的作者信息:
git config user.email aaa@bbb.com git commit --amend --reset-author
然后才能提交。
多个账号的匹配
$HOME/.gitconfig
中的片段:
[includeIf "gitdir:~/priv_scm/"] path = ~/priv_scm/.gitconfig [includeIf "gitdir:~/work_scm/"] path = ~/work_scm/.gitconfig
includeIf.condition.path
变量,是include
配置指令的一部分,允许你有条件地设置自定义配置。
同时,自定义配置的路径也可以作为指令的一部分来设置。这个指令支持三个关键字:
gitdir
、gitdir/I
和onbranch
。
简单解释一下gitdir
。在includeIf
指令中使用gitdir
关键字会对模式进行条件检查。
根据规则,如果当前工作目录与gitdir
中指定的目录模式相匹配,那么它就会从给定的路径中选取配置。
我将在配置片段上应用这个规则来展示它是如何被应用的。
例子中可以看到一个简单的模式:~/
,它与gitdir
关键字一起使用。
这个模式会被存储在$HOME
环境变量中的值所替代。
单独的.gitconfig
文件,其中包含与你的user.name
和user.email
相关的设置。
然而,它们也可以包含存储在$HOME
的全局.gitconfig
中,
它可以保存两个环境通用的所有自定义项。