版本控制与代码托管

Published: by Creative Commons Licence

版本控制与代码托管

市面上比较有名的Git服务提供商,大概就是GitHub,BitBucket,GitLab,以及国内的Coding.net和码云

现有的服务商,对于免费的套餐都有一定的限制,比如GitHub只允许建立免费的开源repository,不允许建立私有的仓库。BitBucket允许建立无限制的私有项目,不过对于项目中参与的开发人员是有人数限制的。

自己搭建私有的Git服务

12 款各种编程语言实现的 Git 代码托管系统
GUI Clients

Git客户端:

  • GitKraken安装后占用230M空间,占用的内存很大600M,需要进行登录。
  • Cycligent Git Tool: 不错,支持Git Flow。但是占用磁盘空间173M;需要进行登录。
  • SourceTree,这个软件不错;但是不支持Linux。
  • SmartGit,使用非商业版时,会将你的相关信息附加在每次提交中;您的非商业许可证将与您配置的Git身份(在.gitconfig或.git / config中)绑定,并转移到syntevo.com进行注册。 安装时的非商业版本的选项是最后一个:Non-commercial use only。
  • gitg: 进行文件对比和查看日志就够了。其它的Linux下还是直接使用命令
  • linux下git-cola还行: sudo apt install git-cola

可在Linux中下载Wine,以使用相关软件。

Git

也可直接使用Git搭建服务(命令行形式)。但是门槛高。

Pro Git 第2版

git服务器搭建 使用git + gitolite3方式

GitHub

添加多个GITHUB帐号的SSH KEY切换

GitLab

GitLab.com offers free unlimited (private) repositories(无限制的私有库) and unlimited collaborators(合作者).

使用GitLab搭建私有的代码托管服务。如今提供了GitLab CE Omnibus package安装包可方便快捷的安装。

说到github的克隆实现,最出名的莫过于gitlab。这是一个ROR的实现,应该是目前市面上最成熟的一个github克隆项目,功能也是最丰富的。它在原来最基础的git库管理、权限管理、用户管理的基础上又加入了诸如code review、ci等极大方便开发者的功能。 Gitlab是一个用Ruby on Rails开发的开源项目管理程序,可以通过WEB界面进行访问公开的或者私人项目。

GitLab搭建以及配置
GitLab 中文文档(源码安装和Omnibus GitLab安装说明)
在自己的服务器上部署 GitLab 社区版
GitLab中文网站

不支持Windows系统:GitLab is developed for Unix operating systems. GitLab does not run on Windows and we have no plans of supporting it in the near future. Please consider using a virtual machine to run GitLab. 不支持OS X、Fedora、Gentoo、Arch Linux、FreeBSD

安装时的注意事项:

  • 国内用户可使用镜像下载安装,见Gitlab Community Edition 镜像使用帮助
  • GitLab默认使用Postfix作为邮件系统,在安装过程中,如果我们需要系统往外网邮箱发送邮件,记得在配置的时候,选择”Internet Site”。
  • 如果使用自定义的域名,需要在/etc/gitlab/gitlab.rb中修改并配置external_url选项。保存之后,用 sudo gitlab-ctl reconfigure 命令使之生效。

GitLab由以下服务构成:

  • nginx:静态Web服务器 GitLab 内置Nginx (默认监听80端口)
  • gitlab-shell:用于处理Git命令和修改authorized keys列表
  • gitlab-workhorse:轻量级的反向代理服务器
  • logrotate:日志文件管理工具
  • DataBase:数据库 官方推荐 postgresql,但也可以是MySql
  • redis:缓存数据库
  • sidekiq:用于在后台执行队列任务(异步执行)
  • unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。
[root@centos7 ~]# rpm -i gitlab-ce-8.16.4-ce.0.el7.x86_64.rpm 

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


gitlab: Thank you for installing GitLab!
gitlab: To configure and start GitLab, RUN THE FOLLOWING COMMAND:

sudo gitlab-ctl reconfigure

gitlab: GitLab should be reachable at http://localhost
gitlab: Otherwise configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
gitlab: And running reconfigure again.
gitlab: 
gitlab: For a comprehensive list of configuration options please see the Omnibus GitLab readme
gitlab: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
gitlab: 

gitlab: GitLab now ships with a newer version of PostgreSQL (9.6.1), and will be used
gitlab: as the default in the next major release. To upgrade, RUN THE FOLLOWING COMMANDS:

sudo gitlab-ctl pg-upgrade

gitlab: For more details, please see:
gitlab: https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server
gitlab: 
It looks like GitLab has not been configured yet; skipping the upgrade script.

安装好gitlab后,

通过http服务进行访问,http默认端口为80,注意避免端口冲突(Nginx,Apache,Tomcat) 可参考Omnibus GitLab documentation中的Nginx配置,配置Nginx的监听端口;在/etc/gitlab/gitlab.rb文件中修改 external_url "http://localhost:8081"更改之后重新配置gitlab。 然后在防火墙中打开8081端口。更改之后重新加载firewalld。

sudo firewall-cmd --permanent --add-port=8081/tcp        
sudo systemctl reload firewalld
sudo gitlab-ctl reconfigure

运行sudo gitlab-ctl reconfigure对GitLab进行重配置以启动GitLab。

由于使用root用户执行上面的命令,出现如下信息:

/opt/gitlab/×××   /var/opt/gitlab/×××)
    - change mode from '' to '0755'
    - change owner from '' to 'root'
    - change group from '' to 'root'

然后在浏览器中进入。

用户名和密码: The default account's username is root. Provide the password you created earlier and login. After login you can change the username if you wish.

Name: Administrator –> Fan Dean
用户名:root –> Fan
更改后的密码:fangitlab

或者选择登录其默认
用户名:root
默认密码:5iveL!fe

后续使用教程见:GitLab 中文文档,并关注以下两个文档。
GitLab Community Edition documentation
Omnibus GitLab documentation

Gitlab的使用
GitLab basics
GitLab使用介绍
GitLab基础使用教程

添加远程仓库

git仓库之间的代码传输协议主要使用ssh协议。ssh与git是两个不同的程序,不同的用途。

SSH Key导入:(生成秘钥所使用的邮箱是否需要和本地git设置的邮箱相同?)
(本地git中的用户名和邮箱会随同提交日志被公开到GitHub上,而非生成ssh key时使用的邮箱)

Working with non-default SSH key pair paths,见SSH系列文章

安装GitLab后的操作步骤(已配置好了ssh服务):

  • 在GitLab上新建项目(新建时可以选择从GitHub中导入)
  • SSH Key生成与导入(见SSH系列文章)
  • 上传本地git库到GitLab
  • 或Clone GitLab库到本地

主要参考:Gitlab的使用

SSH为非标准port时的解决办法: git remote add with other SSH port

ssh使用标准的port时:

$ git remote add origin git@localhost:TestGroup/Test.git

ssh使用非标的2200端口时的方法:

使用http;输入该仓库用户的GitLab的用户名和密码

$ git remote add origin http://127.0.0.1:8081/TestGroup/Test.git
################## 实际操作 ################

# 原因是使用git协议有问题,而使用http则可以(那么ssh key还有用吗?)

[fan 01:05:30]~/backup$ git remote add origin http://127.0.0.1:8081/TestGroup/Test.git
[fan 01:08:25]~/backup$ git push -u origin master
Username for 'http://127.0.0.1:8081': Fan
Password for 'http://Fan@127.0.0.1:8081': 
对象计数中: 131, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (129/129), 完成.
写入对象中: 100% (131/131), 1.26 MiB | 0 bytes/s, 完成.
Total 131 (delta 15), reused 0 (delta 0)
remote: Resolving deltas: 100% (15/15), done.

To http://127.0.0.1:8081/TestGroup/Test.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

remote rejected错误原因

另可参考:修改了SSH默认端口之后,如何配置git?

临时记录:

/var/opt/gitlab/git-data/repositories

git_data_dirs({"default" => "/var/opt/gitlab/git-data"})


/var/opt/gitlab/git-data/repositories/TestGroup/Test.git

git remote add origin ssh://root@127.0.0.1:2200 /var/opt/gitlab/git-data/repositories/TestGroup/Test.git

GitBucket

这个项目是日本的同行使用scala开发的一个github克隆。所以,抛开编程方面,对于java系的程序员还是比较友好的,部署也只需要把war包往tomcat之类的容器里一扔就ok。