总算有机会使用git了,ubuntu 上搭了个 gitlab 服务,为避免后人踩坑,分享下:linux
对于Linux小白来讲,安装 ubuntu 桌面版,比命令行直观。先熟悉后,视状况再安装 ubuntu 服务版。git
安装docker版的gitlab,集成了 redis,posgresql 等依赖组件。redis
docker版的gitlab安装很简单,真的仅一句话,丝绝不折腾:sql
sudo docker run --detach \ --hostname gitlab.linux.com \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab-ce \ --restart always \ --volume /media/administrator/GitLabData/gitlab/config:/etc/gitlab \ --volume /media/administrator/GitLabData/gitlab/logs:/var/log/gitlab \ --volume /media/administrator/GitLabData/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce
我安装的是gitlab 10.1.4 版本
其中域名 gitlab.linux.com 在hosts里解析
administrator 是个人Linux用户名
GitLabData 是我另挂载的一个磁盘,用于存储仓库数据
sudo dockers ps
有 (health) 字样说明服务正式启动了
若是服务未成功运行,执行: sudo docker start gitlab-ce //启动docker sudo docker exec -it gitlab-ce bash //进入docker gitlab-ctl restart //启动gitlab
sudo dockers ps //查看docker服务
exit //退出docker
git学习总结docker
一个文件会有不少版本,一个文件夹也会有多个版本,本地电脑当前文件夹下保存的是最新版本,每次编辑器保存后,文件实时覆盖。
若是要记录一个历史版本,就进行一次commit,git会保留下当前文件的快照,生成一个版本号,做为历史版本,以便查询,比较,还原。ubuntu
咱们当前开发工做的叫develop分支。实际工做中,咱们会遇到历史版本的文件须要修改的状况。
好比已发布的程序发现了bug,须要当即修正,咱们就要获取历史版本,修正bug后当即发布,这就另生成了一个版本分支。
由于修改的基础代码不是最新的develop版本,在最新的develop源码下,这个bug依旧存在,还没有修复。
为了直观,咱们预先创建一个发布分支叫master分支,master分支是develop分支中里程碑版本的集合。
当有发布的程序须要修正bug,就获取master分支的最新版本,修改后提交master分支,同时也应把这部分修改内容提交到develop分支。bash
至此,git做为我的的版本管理工具已经功能完备了。
但,git做为团队协做工具,还须要管理不一样人的不一样版本的文件,以避免文件互相覆盖。服务器
咱们把一个文件共享在团队服务器上,团队成员将此文件各自复制到本地电脑上,同一个文件在不一样的我的电脑上会有多个副本。
若是此文件被不一样的人各自修改,再次上传到服务器上,此文件不该被互相覆盖。
这时git服务端就会在接收文件时,智能判断会不会覆盖别人的修改内容,若是有此可能,会提示文件有冲突,阻止上传。编辑器
上传失败,一般的作法是,再次从服务器上获取最新版本的文件,在本地从新修改合并后,再次尝试推送到服务器上。
git判断你本次修改的文件基础版本跟服务器上该文件最新版本号是否一致,若是一致,才容许上传并覆盖共享的文件。
为了减小此类冲突状况的发生,咱们应不按期地频繁获取服务器上的最新版本,修改后及时推送。
这样团队成员修改本地文件时,就是在修改最新版本的文件,而不是被别人修改过的过时版本的文件。分布式
一次获取文件(pull+rebase)的过程可分离为3个步骤:获取服务端文件(fetch),与本地工做区文件合并(merge),重置本地为最新的版本号(rebase)
另外,git做为一个分布式版本管理工具,还有一个功能,能够支持不一样的团队,建立本身的代码库。
从官方代码库中,能够fork出一个分支到团队git服务器上,做为团队开发的独立代码库,而不会影响到官方的代码库。
须要贡献代码时,向官方发送合并请求,并不是主动推送代码到官方代码库。
官方维护人员收到合并请求后,视状况获取贡献者的代码,再合并到官方代码库。
这个示意图是我的初步理解,非权威仅供参考