Jade Dungeon

环境配置

操作系统相关

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配置指令的一部分,允许你有条件地设置自定义配置。 同时,自定义配置的路径也可以作为指令的一部分来设置。这个指令支持三个关键字: gitdirgitdir/Ionbranch

简单解释一下gitdir。在includeIf指令中使用gitdir关键字会对模式进行条件检查。 根据规则,如果当前工作目录与gitdir中指定的目录模式相匹配,那么它就会从给定的路径中选取配置。 我将在配置片段上应用这个规则来展示它是如何被应用的。

例子中可以看到一个简单的模式:~/,它与gitdir关键字一起使用。 这个模式会被存储在$HOME环境变量中的值所替代。

单独的.gitconfig文件,其中包含与你的user.nameuser.email相关的设置。 然而,它们也可以包含存储在$HOME的全局.gitconfig中, 它可以保存两个环境通用的所有自定义项。