问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将git服务器提供给其他人使用

发布网友 发布时间:2022-04-21 20:12

我来回答

1个回答

热心网友 时间:2022-04-11 11:41

1. 架设Git服务器
我们以Ubuntu为例。首先,在git服务器上创建一个名为 'git' 的用户,并为其创建一个.ssh 目录。并将其权限设置为仅git用户有读写权限
$ sudo adser git
$ su git
$ cd
$ mkdir .ssh
$ chmod 700 .ssh

接下来,把开发者的 SSH 公钥添加到这个用户的 authorized_keys 文件中。假设你通过电邮收到了几个公钥并存到了临时文件里。重复一下,公钥大致看起来是这个样子:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair

只要把它们逐个追加到 authorized_keys 文件尾部即可,同时将authorized_keys设置为仅git用户有读写权限。
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

现在可以用 --bare 选项运行 git init 来建立一个裸仓库,这会初始化一个不包含工作目录的仓库。
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git --bare init

这时,Join,Josie 或者 Jessica 就可以把它加为远程仓库,推送一个分支,从而把第一个版本的项目文件上传到仓库里了。值得注意的是,每次添加一个新项目都需要通过 shell 登入主机并创建一个裸仓库目录。我们不妨以 gitserver 作为 git 用户及项目仓库所在的主机名。如果在网络内部运行该主机,并在 DNS 中设定 gitserver 指向该主机,那么以下这些命令都是可用的:
# 在 John 的电脑上
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master

这样,其他人的克隆和推送也一样变得很简单:
$ git clone git@gitserver:/opt/git/project.git
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

用这个方法可以很快捷地为少数几个开发者架设一个可读写的 Git 服务。
作为一个额外的防范措施,你可以用 Git 自带的 git-shell 工具* git 用户的活动范围。只要把它设为 git 用户登入的 shell,那么该用户就无法使用普通的 bash 或者 csh 什么的 shell 程序。编辑/etc/passwd 文件:
$ sudo vim /etc/passwd

在文件末尾,你应该能找到类似这样的行:
git:x:1000:1000::/home/git:/bin/sh

把 bin/sh 改为 /usr/bin/git-shell (或者用 which git-shell 查看它的实际安装路径)。该行修改后的样子如下:
git:x:1000:1000::/home/git:/usr/bin/git-shell

现在 git 用户只能用 SSH 连接来推送和获取 Git 仓库,而不能直接使用主机 shell。尝试普通 SSH 登录的话,会看到下面这样的拒绝信息:
$ ssh git@gitserver
fatal: What do you think I am? A shell?
Connection to gitserver closed.

这里提供的方法,组内所有成员对project都有读写权限,也就是说每个分支都可以push代码,如果需要更加细致的权限控制,请使用Gitosis或者Gitolite。
2. 搭建Gitweb
安装gitweb之后就可以通过网站访问我们的项目了。就像http://git.kernel.org一样显示了
首先需要安装Gitweb,如果没有安装apache,那么直接安装Gitweb,也会将apache2安装的。
$ sudo apt-get install gitweb apache2

安装完成之后,我们只需要修改一下配置文件,将/etc/gitweb.conf文件中的$projectroot修改为放工程文件的目录。
$ vim /etc/gitweb.conf
# path to git projects (<project>.git)
$projectroot = "/opt/git";

至此gitweb就可以使用了,现在可以通过http://[git_server_IP]/gitweb访问了。
3. Push之后发送邮件通知
当组内成员push代码到服务器上之后,会自动发送邮件通知组内所有人员,该次push的具体内容是什么。具体配置方法:
一般在安装Git的时候发送邮件的脚本/usr/share/git-core/contrib/hooks/post-receive-email已经存在了,首先要修改所有者和执行权限,并且安装sendmail。
$ sudo chown git:git post-receive-email
$ sudo chmod 755 post-receive-email
$ sudo apt-get install sendmail

然后到切换到工程目录下的hooks中,添加 post-receive软链接指向 /usr/share/git-core/contrib/hooks/ post-receive-email。
$ cd /opt/git/project.git/hooks
$ ln -s /usr/share/git-core/contrib/hooks/post-receive-email post-receive

最后修改工程目录中的config文件即可。mailinglist是邮件列表, envelopesender是发件人的邮箱,
$ vim /opt/git/project.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = true

[hooks]
mailinglist = "example@gmail.com, example2@gmail.com" # 收件人列表
envelopesender = project.git@example.com # 送件人地址
emailprefix = "[Project commit] " # 邮件标题前缀
showrev = "git show -C %s; echo" # 不只显示有变化的文件,同时也显示改变的内容

为了使邮件显示的更清楚,还要修改一下工程目录当中的description文件,在description文件中,默认第一行是项目名称,所以要在第一行填入该项目的名称,这个在邮件中会有显示。
$ vim /opt/git/project.git/description
Project_A
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
一点一横梁梯子靠住墙大口张着嘴,小口往里藏(打一字) 一点一横长楼梯达屋梁大口合小口小口在中央一 幽默故事:打俏皮 一点一横杠 一梯垮过墙 大口吃小口 小口没腹肠猜繁体字? 猫咪黄疸肝炎晚期症状站不起来了 2015年10月中央5台天下足球时间是不是改了 华为watchgtrunner怎么连接手机-华为watchgtrunner连接手机方式 华为手表新款WatchGT2如何连接手机(使用华为手表GT2与手机连接)_百度... 哔哩哔哩如何取消连续包月会员 B站大会员自动续费取消 哔哩哔哩取消连续包月-哔哩哔哩取消自动续费教程 函数极限是什么呀!有公式吗 wpsppt中如何制作创意折线型目录样式? 如何合并Git 代码库中牛人的代码到自己的库 函数极限的运用法则 wps 里面怎么画曲线,任意的曲线 如何安装git并配置到intellij 函数极限的运算法则的证明 如何在intellij 的终端 使用git命令 PPT里的线条怎么设置成为垂直的,用鼠标调很难垂直 高数中关于函数极限的法则 怎么用wps ppt做出来线条动画 求函数极限的正确步骤 github怎么读? wps 中ppt里的这个图是怎么画出来的?? 函数极限的四则运算法则是什么? 怎么通过git把代码上传到github上 胸部B是多少厘米 怎么用wpsppt做出来这样的线条, 如何修改git已经提交的信息及合并多次提交 函数极限的运算法则 ppt中的横线怎么划得,如图横线!wps版 函数极限运算 家庭教师里的gitto图 函数极限的定义性质和求极限的方法 函数极限的运算与变换 i don&#39;t handle protocol git clone https&#39;怎么解决 函数极限的运算 git rebase i怎么返回 函数极限运算法则可以直接适用于数列吗? 该如何让git书写的注释立即追加上去? 函数的极限运算 怎么使用git 安装应用python2 函数极限的运算,这个总结对吗?有没有错的? 医学中igit是什么意思(这几个字母是大写)? 函数极限的运算和导数的运算有什么不同? gitic是什么意思 函数极限的定义 Git fetch和git pull的区别 函数的极限的定义 刺猬的人工饲养