如何将git服务器提供给其他人使用
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
0条评论