因工作需要,将在局域网内部实现软件版本控制,管理诸多软件源代码。
综合考虑,决定将版本控制服务器gitblit搭建在windows7平台下,然后在各个客户机(麒麟linux系统)上使用Qt+git的方式,提交源代码。
大致流程如下:
- 在windows7上搭建java环境
- 在windows7上部署gitblit
- 将gitblit添加至计算机的启动服务中,实现开机自动启动
- 在linux系统中,安装部署git
- 在Qt中使用git
gitblit及git的方法)
一、简单介绍gitblit和git的关系
(一)为什么要软件版本控制
什么是代码托管?或者说为什么要代码托管,可以假设几个场景。
- 程序的代码始终处于一个更新迭代的过程中,但是这个更新迭代不一定是完美的,所以有时候需要将代码返回到曾经的一个版本,即回滚。
- 同一段初始的代码,可能由此衍生出众多的衍生版本,版本众多,需要梳理清楚。
- 同一个软件,可能需要群策群力,大家共同来完善他,每个人都可以在这段软件中贡献自己的智慧。
在以上场景中,都需要用到一个代码版本控制软件。
(二)怎么实现软件版本控制
软件版本控制,需要有一个远端代码仓库,即服务器端,以及本地代码仓库,客户端。
在互联网上的远端代码仓库,最知名的,当然是github,除此之外,在国内常用的,还有码云等等,在这些平台上,能实现代码托管。
而最有名的本地代码版本控制系统,当然是git。
还是情景假设,如下步骤
- 当你写完一段代码,你首先要将这段代码,保存到本地仓库,这个过程就是commit。
- 保存到本地仓库后,你觉得这段代码值得与大家分享了,或者放在本地不踏实,怕丢,就需要上传到远端仓库,上传的过程,就是push。
- 过了很久,你想看看远端仓库,这个代码的最新状态,是否有别人提交了新的修改了,你首先需要做的,就是把远端最新的版本下载到本地,就是fetch。
- 你看了看最新的代码,感觉好像颇有参考价值,决定将其和自己本地的代码融合到一块,就是merge。
- 有时候你对别人的代码比较自信,觉得没必要分两步走,也耐不住这个性子,想要下载了代码之后,直接合并,一步到位,这个过程就是pull。
- 过了一阵子,你发觉这个版本不想要了,想回退到某个版本,于是,你首先得查看,你提交了哪些版本,即git log。找到了你想要的那个版本,于是git reset,回退。
理解了这个过程,就能大概知道了版本控制的作用了。
二、在32位windows7部署gitblit
(一)部署java环境
gitblit的运行依赖于java环境,因此首先需要部署java环境。
我用来假设版本控制服务器的操作系统是32位的windows7,于是我使用的也是相应的jdk版本。
我使用的是免安装版本的,需要自行将java写入操作系统的环境变量中。
- “计算机” -> “属性” -> “高级系统设置” -> “环境变量” 中的“系统变量”。
- 添加JAVA_HOME,指向你的java文件夹的目录。比如
C:\Program Files\Java\jdk1.8.0
- 添加CLASSPATH,这么写
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
- 在原来的一项,path中,添加
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
添加完成后,测试一下,打开电脑的cmd命令行,输入java -version
,如果显示了你的java版本号,则说明环境变量添加成功了。
(二)配置gitblit
gitblit的部署,同样是免安装版的,将其放在某个你觉得稳妥的位置。
- 找一个你觉得稳妥的位置,新建一个文件夹,命名成你喜欢的名字,如“gitblitRep”,后面作为软件仓库使用。
- 打开文件夹下的“data”文件夹,找到“defaults.properties”,修改其中内容。
- 修改“git.repositoriesFolder = F:\gitblitRep”后面那是路径,是你自己新建的文件夹,即软件仓库。
- 修改一个绑定的ip,你在局域网中搭建服务器,当然不是为了自己本地使用,因此你需要修改“server.httpBindInterface = 127.0.0.1”为“server.httpBindInterface = XX.XX.XX.XX”,你的某个网卡的IP,多网卡的话,更需要指定那块网卡的IP。
- 你当然还可以修改更多东西,比如“server.httpPort”或者“server.httpsPort”,这是别人网页访问gitblit时输入的地址后面带的端口号。都有默认值,可以不修改。http的默认值为8442。
到此,配置修改完毕,运行就可以使用了。双击文件根目录下的“gitblit.cmd”,出现一个命令框,别关,命令框关了就停止运行了。在浏览器中输入“XX.XX.XX.XX:8442”,就能访问版本控制网页了。
(三)将gitblit注册为计算机的服务项自启动
在文件夹的根目录下,有一个“installService.cmd”,右键“编辑”,需要根据你的系统的具体情况修改一些参数。
@REM arch = x86, amd64, or ia32
SET ARCH=x86 #如果是32位操作系统,则填写x86,如果是64位操作系统,则填写amd64
SET CD=F:\gitblit-1.9.1 #根据你的gitblit的实际位置填写
**注意!**运行这个cmd文件,不能直接双击运行,而是要在管理员模式下启动cmd,然后切换到这个文件目录下,运行该cmd文件。比如在cmd命令行中,依次输入,
f:
cd gitblit-1.9.1
start installService.cmd
或许你可以直接双击运行“installService.cmd”,可以先试试,看看计算机的“服务”中,有没有新增一条“gitbilit”,如果有,则达到目的了。
至此,开机就能自启动gitblit了。
另外,gitblit默认的用户名是admin,密码为admin。
三、在麒麟linux系统安装git
这个其实操作没什么难点,繁琐的是如果你像我这样离线安装,就需要自行解决一些依赖问题,这就有些棘手了。
git依赖于perl和git-man,因此,需要先安装这两个库,才能正常安装git。
另外,麒麟linux使用的是deb安装包,与ubuntu的deb貌似通用,我安装的几个deb包,都是通过ubuntu下载,然后安装的。按照如下顺序安装deb包吧(笔者已经下载整理好了,文末将提供下载链接)
sudo dpkg -i liberror-perl_0.17-1.2_all.deb
sudo dpkg -i git-man_2.7.4-0ubuntu1.10_all.deb
sudo dpkg -i git_2.7.4-0ubuntu1.10_arm64.deb
如此安装的git的默认目录为/usr/bin/git
。记下这个目录,如果你的电脑不是这个目录,可以用这条linux命令找一下他在哪
sudo find / -name git
一般就是包含usr和bin的一条路径。
四、在Qt使用git
为了方便在Qt使用git,可以直接在Qt进行提交,需要将git使用ssh的传输方式,ssh是加密传输的方式,需要在本机电脑生成公钥。在linux终端中,依次输入以下命令,注意看我添加的注释。
(一)使用ssh的配置
#随便取一个你喜欢的用户名,比如superman
git config --global user.name "username"
#随便取一个你喜欢的邮箱,不需要真实存在,比如superman@mail.com,记录下来
git config --global user.email "useremail"
#使用刚刚你输入的邮箱名,回车后,一路回车,不用输入任何东西。
ssh-keygen -t rsa -C "useremail"
到此,就生成你的公钥了,需要将你的公钥填写到gitblit网站中。首先找到你的公钥在哪。
#默认的目录
cd ~/.ssh
#你可以看到有三个文件
ls
#打开其中的id_rsa.pub,将其中的内容复制出来(可以直接用鼠标选中,右键复制)
vim id_rsa.pub
下面将公钥写入gitblit
- 打开浏览器,输入访问地址"XX.XX.XX.XX:8442"。
- 输入用户名admin,密码admin。
- 在右上角头像位置,点击,出现下拉框,选中“用户中心”。
- 页面中点击“SSH Keys”,出现一个添加ssh公钥的输入框,粘贴进去,然后添加即可。
(二)创建版本库
1、gitblit创建版本库
- 打开浏览器,输入访问地址"XX.XX.XX.XX:8442"。
- 输入用户名admin,密码admin。
- 在右上角头像位置,点击,出现下拉框,选中“创建版本库”。
- 在出现的页面中,输入一个版本库的名字,名字自取,点击“创建”
- 在“概况”中,看到“版本库地址”,复制其中的ssh开头的地址。记下这个地址,是后面在本地提交软件代码时,输入的远端仓库的地址。
2、在本地创建仓库
我是在现有的代码中,创建一个代码仓库的,并且想要实现在Qt中直接提交代码的功能。
- 打开Qt,打开想要版本控制的软件代码。
- 在Qt的上边沿菜单栏中,选择“工具” -> “选项” -> “版本控制” -> “Git”,其中有一栏“附加在系统PATH之前”,在后输入git的目录,比如
/usr/bin/git
。然后“OK”,“APPLY”。 - 还是Qt的菜单栏中,“工具” -> “Git” -> “创建仓库”,选中你的代码所在的文件夹,确定,这时候,回在这个文件夹下,生成一个“.git”的文件夹,应该是隐藏的。
- 在linux的终端打开到这个文件夹所在的目录,然后输入如下命令
git init
,初始化项目。 git remote add origin "刚刚复制的ssh的地址"
git add .
,将代码提交到缓存区。git commit -m '随便写点什么,引号内就是描数内容,类似备注'
git push -u origin master
,上传到远端代码仓库。git pull --rebase origin master
,从远端仓库,下拉至本地。git config --global push.default simple
。
至此,第一次提交和下拉,就完成了,后续就可以再Qt中,直接使用commit,pull和push等功能了。
另外,再Qt中使用这些功能时,还会提示一些信息,这只是提示信息,根据信息,做好选择,然后在终端输入相应的命令即可。
五、结语及下载链接
至此,整个过程就介绍完了,至于git的具体使用方法,日后再行介绍。
最后是传送门,git和gitblit及他们的依赖库的下载链接。
git2.7.4及相关依赖库(麒麟linux可用)
gitblit-1.9.1及32位jdk