主要测试了各方式clone的情况:
1. 安装gitlab,配置ip:port。
常规步骤:
yum install -y curl policycoreutils-python openssh-server wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm vim /etc/gitlab/gitlab.rb #修改nginx['listen_addresses']、nginx['listen_port']、external_url 3项 gitlab-ctl restart gitlab-ctl reconfigure
然后在gitlab网页端注册账号
2. gitlab注册的账号和linux账号关系,git账号
linux账号和gitlab内账号没有关系。安装完gitlab之后,linux系统会创建一个叫git的账号,之后对project的上传下拉操作都是通过git账号完成。
3. 注册ssh key之后,以及使用ssh clone的过程。访问受linux sshd内ssh认证配置的影响。
在gitlab上注册了ssh key之后,背后实际上gitlab会把注册的key写入git账号的~/.ssh/authorized_keys文件。这样,每次git clone/push/pull操作时,都是先ssh到linux的git账号,再进行后续操作。
因为git的ssh方式会通过sshd服务,所以在linux上修改了sshd配置会影响git的使用。比如修改了ssh端口,则git也需要配置响应端口(很多时候会修改ssh的默认端口,从22改为一个大数字)。
一般情况下,git ssh认证有公钥私钥就可以正常操作。但有的情况下,linux端会开双重认证 AuthenticationMethods publickey,password。这个时候再git clone git@****.git 的时候,会需要输入git账号自身的密码(可以想象成先登录到linux的git账号)。如果想要顺利进行,一般要通过root账号修改下git账号的密码,再通过验证。
4. git ssh clone和http clone的区别。为什么ssh clone不可以,http clone却可以?
git ssh 和 git http是两个相互独立的方式。git ssh通过ssh连接,受linuxsshd配置(git账户)影响;git http直接通过ip:port进行连接,不需要linux账户的信息,只需要在gitlab上注册的账号的用户名和密码。
所以,有时候git ssh不成功时,通过ssh clone可以成功。
5. git http clone 用户密码。全局配置文件~/.gitconfig内的[User].name项的作用。
git http每次都要输账号密码,可以通过 git config credential.helper 相关命令存储账号密码。
此外,在全局配置文件~/.gitconfig内也会有一个
[user] name = testmm email = ***
User项。这里的user.name和gitlab账号也是相互独立的。user.name代表的是在你提交commit时,显示的名字。比如,执行git lg:
[ttt1@local transfer]$ git lg * 67ccd87 - (HEAD, origin/master, origin/HEAD, master) test123 (3 hours ago) <testmm>
这里显示是testmm提交的修改,这不是gitlab内账号的名字,只是本地做的一个全局配置内的名字。
但是在gitlab网页上看到的修改者还是以gitlab内的账号名字出现的。这是个不一样的地方。