git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。
其中,http协议可以保存密码。ssh在linux下可以通过安装sshpass,然后将密码每次一参数-p方式通过脚本的方式传递。
http的方式通过以下方式,记住密码:
git config --global credential.helper store
1.本地传输
远程仓库在该协议中就是硬盘上的另一个目录。这常见于团队每一个成员都对一个共享的文件系统(例如 NFS )拥有访问权,抑或比较少见的多人
共用同一台电脑的时候。后者不是很理想,因为你所有的代码仓库实例都储存在同一台电脑里,增加了灾难性数据损失的可能性。 如果你使用一个共
享的文件系统,就可以在一个本地仓库里克隆,推送和获取。要从这样的仓库里克隆或者将其作为远程仓库添加现有工程里,可以用指向该仓库的路
径作为URL。比如,克隆一个本地仓库,可以用如下命令完成: 首先,我们在 我们建立一个作为服务器端的库(虽然是在本地,)然后我们在别的
目录建立一个clone这个小项目,而这个小项目会把/home/git/repos.git 当作远程服务器。
2.SSH 协议
git麻烦在用户管理及管理上,下面上三种解决办法: # 如果需要团队里的每个人都对仓库有写权限,又不能给每个人在服务器上建立账户,那么
提供 SSH 连接就是唯一的选择了。我们假设用来共享仓库的服务器已经安装了 SSH 服务,而且你通过它访问服务器。 # # 有好几个办法可以让团队
的每个人都有访问权。 第一个办法 是给每个人建立一个账户,直截了当但过于繁琐。反复的运行 adduser 并且给所有人设定临时密码可不是好玩的。
# # 第二个办法 是在主机上建立一个 git 账户,让每个需要写权限的人发送一个 SSH 公钥,然后将其加入 git 账户的 ~/.ssh /authorized_keys 文件。
这样一来,所有人都将通过 git 账户访问主机。这丝毫不会影响提交的数据——访问主机用的身份不会影响 commit的记录。 # # 另一个办法 是让 SSH
服务器通过某个 LDAP 服务,或者其他已经设定好的集中授权机制,来进行授权。只要每个人都能获得主机的 shell 访问权,任何可用的 SSH 授权机
制都能达到相同效 # 如果需要团队里的每个人都对仓库有写权限,又不能给每个人在服务器上建立账户,那么提供 SSH 连接就是唯一的选择了。我们
假设用来共享仓库的服务器已经安装了 SSH 服务,而且你通过它访问服务器。
3.git协议
接下来是 Git 协议。这是一个包含在 Git 软件包中的特殊守护进程; 它会监听一个提供类似于 SSH 服务的特定端口(9418),而无需任何授权。
用 Git 协议运营仓库,你需要创建 git-export-daemon-ok 文件——它是协议进程提供仓库服务的必要条件——但除此之外该服务没有什么安全措施。
要么所有人都能克隆 Git 仓库,要么谁也不能(通常做为只读)。 这也意味着该协议通常不能用来进行推送。你可以允许推送操作;然而由于没有授权
机制,一旦允许该操作,网络上任何一个知道项目 URL 的人将都有推送权限。不用说,这是十分罕见的情况。 比如在/home/git 目录下有一个repos.git ,
把想把repos.git 能过git:// 协议访问。
4.http协议
最后还有 HTTP 协议。HTTP 或 HTTPS 协议的优美之处在于架设的简便性。基本上, 只需要把 Git 的纯仓库文件放在 HTTP 的文件根目录下,配
置一个特定的 post-update 挂钩(hook),就搞定了(Git 挂钩的细节见第七章)。从此,每个能访问 Git 仓库所在服务器上的 web 服务的人都可以进
行克隆操作。