一、协议
git可以使用四种不同的协议传输资料:本地协议(Local)、HTTP协议、SSH协议、以及Git协议。
(1)本地协议
本地协议的远程版本库就是同一主机的另一个目录。
(2)HTTP协议
HTTP协议有两种,智能HTTP协议和哑HTTP协议。
智能HTTP协议:即支持像 git:// 协议一样设置匿名服务, 也可以像 SSH 协议一样提供传输时的授权和加密。
哑HTTP协议:哑 HTTP 协议里 web 服务器仅把裸版本库当作普通文件来对待,提供文件服务。
(3)SSH协议
架设Git服务器时常用SSH协议作为传输协议。
(4)git协议
git协议监听一份特定的端口(9418),访问无需任何授权。Git协议时Git使用的网络传输协议里最快的。
二、搭建远程仓库(github、gitee)
以连接到gitee为例
(1)新注册创建gitee账号(gitee官网地址:Gitee官网地址)
(2)新建仓库
(3)仓库添加成功
(4)克隆成功! (5)远端推送
(6)推送成功
(7)问题解决
问题:在远端推送过程中,会出现需要手动输入用户名和密码的情况。
解决:设置ssh
①、进入主页,选择SSH公钥
②、在自己的主机上生成密钥
③、将*.pub的内容粘贴到gitee上。
④、配置免密成功
三、搭建远程仓库(服务器上)
(1)服务器端(即远程仓库)
①、安装git
参考git安装与版本升级 注:尽量升级到较高版本,因为会在后续的过程中出现不可以连接海龟(TortoiseGit)等情况。
②、创建用户及用户组
注:新建一个用户要用passwd设置他的密码。默认没有密码。
③、初始化一个仓库
④、 配置免密登录
注:这里配置的免密是在git用户下,所以如果想要全局免密。在~/.ssh/authorized_keys中粘贴密钥就可以啦。
(2)客户端(即存放代码的机器)
可以是windows也可以是Linux。本例使用windows
git安装包下载地址:Git官方下载
打开安装包直接next就可。
具体选项详解参考:Git客户端安装过程中选项详解
生成密钥:
密钥位置存在:
将公钥复制到服务器端
初始化一个仓库
从远端克隆一个仓库,出现错误,解决方案见(4)
再次克隆
结果:
此时就可以推向远程仓库啦!
(3)利用图形化界面海龟(TortoiseGit只支持windows系统)
下载地址:海龟安装包的下载地址
①、安装海龟以及其语言包
②、新建库或者在原库中设置
一般来说在安装初期海龟就会是中文,但这其中也可以设置。
右键选择海龟--》设置
1、设置海龟的语言
2、设置记住密码
在打开的文件中 设置
3、密钥转换
4、搭建远程连接
实验:
推送成功!
(4)搭建过程中遇到的问题
①、创建新用户时
错误提示: Creating mailbox file: File exists
解决:删除/var/spool/mail/
和 /home
下的已存在的用户名的文件和文件夹
②、删除用户组时
错误提示:groupdel: cannot remove the primary group of user 'lxh1'
解决:该用户组还有其他用户。1、删除该用户组中的用户
2、将该用户剔除该用户组
③、克隆仓库时
错误提示:
bash: git-upload-pack: command not found
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
解决:
代码服务器git安装路径是/usr/local/git,不是默认路径,根据提示,在git服务器上, 建立链接文件:
⑤、将本地内容推向远程仓库时
错误提示:
bash: git-receive-pack: command not found
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
解决:
⑥、将本地内容推向远程仓库时
错误提示:
解决:
这是由于git默认拒绝了push操作。
在远程服务器主机执行如下命令:
git config receive.denyCurrentBranch ignore
或者在.git/config中添加如下代码:
[receive]
denyCurrentBranch = ignore
⑦、利用海龟将本地内容推向远程仓库时
错误提示:
error: failed to push some refs to '47.103.24.126:/home/gitrepo'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again.
解决:
git pull root@IP:/home/gitrepo master --allow-unrelated-histories //把远程仓库和本地同步,消除差异