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

如何将git服务器提供给其他人使用,第1张

1 架设Git服务器

我们以Ubuntu为例。首先,在git服务器上创建一个名为 'git' 的用户,并为其创建一个ssh 目录。并将其权限设置为仅git用户有读写权限

$ sudo adduser git

$ su git

$ cd

$ mkdir ssh

$ chmod 700 ssh

接下来,把开发者的 SSH 公钥添加到这个用户的 authorized_keys 文件中。假设你通过电邮收到了几个公钥并存到了临时文件里。重复一下,公钥大致看起来是这个样子:

$ cat /tmp/id_rsajohnpub

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_rsajohnpub >> ~/ssh/authorized_keys

$ cat /tmp/id_rsajosiepub >> ~/ssh/authorized_keys

$ cat /tmp/id_rsajessicapub >> ~/ssh/authorized_keys

$ chmod 600 ~/ssh/authorized_keys

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

$ cd /opt/git

$ mkdir projectgit

$ cd projectgit

$ 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/projectgit

$ git push origin master

这样,其他人的克隆和推送也一样变得很简单:

$ git clone git@gitserver:/opt/git/projectgit

$ 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://gitkernelorg一样显示了

首先需要安装Gitweb,如果没有安装apache,那么直接安装Gitweb,也会将apache2安装的。

$ sudo apt-get install gitweb apache2

安装完成之后,我们只需要修改一下配置文件,将/etc/gitwebconf文件中的$projectroot修改为放工程文件的目录。

$ vim /etc/gitwebconf

# 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/projectgit/hooks

$ ln -s /usr/share/git-core/contrib/hooks/post-receive-email post-receive

最后修改工程目录中的config文件即可。mailinglist是邮件列表, envelopesender是发件人的邮箱,

$ vim /opt/git/projectgit/config

[core]

repositoryformatversion = 0

filemode = true

bare = true

[hooks]

mailinglist = "example@gmailcom, example2@gmailcom" # 收件人列表

envelopesender = projectgit@examplecom # 送件人地址

emailprefix = "[Project commit] " # 邮件标题前缀

showrev = "git show -C %s; echo" # 不只显示有变化的文件,同时也显示改变的内容

为了使邮件显示的更清楚,还要修改一下工程目录当中的description文件,在description文件中,默认第一行是项目名称,所以要在第一行填入该项目的名称,这个在邮件中会有显示。

$ vim /opt/git/projectgit/description

Project_A

第一步,下载gitblit

http://gitblitcom/

这里当然是选择linux/osx的版本。下载下来是一个targz的压缩文件,我下载时最新版本是gitblit-171targz

第二步,配置gitblit

创建目录,作为git服务器存储数据的根目录,比如我这里的目录是:

/Users/xxxx/gitserver/gitRepository

解压第一步下载的文件,然后进入data子目录,找到defaultsproperties打开。这里的很多配置项都可以使用缺省,不过一般会把

gitrepositoriesFolder配置下。这里就配置成上面新建的目录gitRepository的路径。

然后找到serverhttpPort,设定http协议的端口号,这个端口号理论上来说可以随便指定,这里我设置成7070。

保存,关闭

启动gitblit服务,这里我只给出手动启动的方式(自动随系统启动还没研究,哈哈),其实手动方式也不麻烦,安装包里做好了可执行的脚本,我们只要在

终端运行就可以了,如下所示:

第三步,测试git服务器

打开浏览器,输入http://localhost:7070/(localhost也可以换成你本机的ip地址),进入gitblit web管理页面:

默认的用户名和密码是admin,强烈建议登陆后修改密码。登陆后创建一个用户,然后在该用户下创建项目目录,这里叫leanrgit

然后用本地的一个git工作目录与之关联,就可以commit,push这些操作了:

先查看remote的名字 git branch -r 假设你的remote是origin,用git remote set_url 更换地址 git remote set-url origin remote_git_address remote_git_address更换成你的新的仓库地址

当资源有限,但是项目同时需要几个人协同开发,我们就需要配置一个简单的局域网内的git服务器,方便协同开发。

首先我们新建远端的git目录,目录名和本地仓库名一致,并且在目录下运行:

git init --bare

一个空的git仓库就建立好了。然后我们需要把本地的仓库和远端的关联起来。具体做法是,在本地git仓库的目录下执行:

git remote add origin ssh://用户名@ip/仓库路径

比如:git remote add origin ssh://android@1921683172/home/android/projects/gitserver/demoproject/。完成后,本地的提交,就可以push到远端啦。比如:

git push origin master

就可以把本地的master推送到远端。协同开发的同事可以通过如下命令获取远端的仓库

git clone ssh://android@1921683172/home/android/projects/gitserver/demoproject/

是不是很简单呢

ps:实际使用过程中发现了一个问题,即本机的ip地址不是静态的。如何解决这个问题呢?可以在每次ip改变以后,重置仓库的origin url:

git remote set-url origin {url}

前言:发现新来小伙伴,对git以及repo命令还不是特别熟悉,因此对git及repo最基本命令做了一下小结:

Repo

repo init -u  ssh://git@gitlabmanifestgit  -b [分支]

repo sync

repo status

repo branch

repo manifest 

repo diff

repo help

查看

1 、查看本地分支

git branch

2 、查看远程分支

git branch -r

3 、查看所有分支

git branch -a

4 、查看状态

git status

5 、查看提交日志

git log

创建

本地创建新的分支

git branch [branch name]

切换到新的分支

git checkout [branch name]

创建 + 切换分支

git checkout -b [branch name]

删除

删除本地分支

git branch -d [branch name]

删除 github 远程分支  

git push origin :[branch name]

推送

将新分支推送到 github

git push origin [branch name]

提交分支数据到远程服务器

git push origin <local_branch_name>:<remote_branch_name>

例如:

git push origin 20120120806:20120120806

远程分支和本地分支需要区分好,所以,在从服务器上拉取特定分支的时候,需要指定远程分支的名字。

git checkout --track origin/20120120806

注意该命令由于带有--track参数,所以要求git164以上!这样git会自动切换到分支。

分支合并 merge

git merge feature/login

git merge  damo_release_201020_feedingRank

tag

git tag 202

git push --tags

1、拉取远端指定的分支(本地不存在)

git fetch

git checkout -b 本地分支名 origin/远程分支名

2、创建本地分支,并推送到远端

(二) 推送本地分支到远程仓库

git push --set-upstream origin 分支名

本地分支推送到远端:

repo forall -c git push ika damo_:damo_

本地分支与远端建立关联跟踪:

repo forall -c git branch --set-upstream-to=module/damo_  damo_

设置本地分支与远程分支的追踪:

git branch --set-upstream-to=origin/远程分支名 本地分支名

基于远端分支创建分支:

1、先fetch 远端的 ila_210120

repo forall -c git fetch ila ila_210120

2、基于远端的ila_210120创建  damo_ila_210120分支

 repo forall -c git checkout -b damo_ila_210120 ila/ila_210120

cherry-pick :(某一个 commit )

git cherry-pick f8857cbb08519b10981b0e2df999363ebfe8b6d3

push 推送到远端

git push ila damo_ila_210120_review

强推:

git push --force ila 201140_newGuide_oneCommit

合成一个 commit 流程 :

1、创建一个新分支:

2、reset到第一个commit:

3、重新commit:

reset 区别:

repo forall -c git reset --hard

repo forall -c git reset --soft f8857cbb08519b10981b0e2df999363ebfe8b6d3

1、 https://wwwcnblogscom/mmykdbc/p/9076063html

2、 https://blogcsdnnet/top_code/article/details/51931916

3、 https://wwwjianshucom/p/bf7b09e234c8

4、 template 模板: https://blogcsdnnet/weixin_38019025/article/details/103951002

Control + C  退出终端执行的任务

6 、电脑目录:

~/

/Users/yuyahui

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何将git服务器提供给其他人使用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情