常见版本管理工具
SVN
集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN.无法进行提交或备份文件。
Git
分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git。当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库。
Git与SVN的区别
1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,cVS等,最核心的区别。
2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似svn,cvs等的文件夹里。
3、GIT分支和SvN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
4、GIT没有一个全局的版本号,而svN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
git config --global user.name lewen
git config --global user.email [email protected]
GIT的四个区域
Workspace:工作区
Index/Stage/Cached:暂存区
Repository:本地仓库
Remote:远程仓库
Git命令就是用于将文件改动切换到不同的空间来记录
GIT的四种状态
git rm -f filename #删除工作区和暂存区的文件 (use --cached to keep the file, or -f to force removal)? git diff file #比较本地vs暂存区 git diff --cached file #暂存区vs本地版本库 git log --oneline # 一行显示 --decorate # 具体操作? git log -p #显示详细信息 git log -1 #显示1条 commit 相当于做快照 注意 git status 操作提示 从暂存区恢复到本地工作区 git checkout -- file # 撤销工作区更改 从版本库恢复[覆盖]到暂存区(暂存区错误add交) git reset HEAD file 从版本库回退到版本[某一次commit版本] git reset --hard f34j34 回退后,回退点之后的git log 日志看不到 git reflog 查看所有commit的日志
分支概念
Git的分支,从本质上来讲仅仅是指向提交对象的可变指针。在这一点上与SvN是有着本质的区别。SVN的分支实际上就是一个目录。
Git的默认分支名字是master。在多次提交操作之后,你其实已经有一个指向最后那个提交对象的master分支。它会在每次的提交操作中自动向前移动。
git 分支
git branch #查看分支
git checkout dev #切换分支
git merge dev # 合并分支
如果修改了同一个文件,合并时会冲突,需要确定修改内容
在master 修改冲突的文件,add 提交,commit -->合并完成
git brach -d dev 删除分支
标签使用
前面回滚使用的是一串字符串,又长又难记。 git tag v1.0 #一当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。 git tag #→查看当前所有的标签 git show vl.0 #一查看当前1.0版本的详细信息 git tag v1.2 -m "version 1.2 release is test" # 创建带有说明的标签,-a 指定commit id 标签名字(不加是当前打标签),-m 指定说明文字 git tag -d vl.0 #我们为同一个提交版本设置了两次标签,删除之前的v1.0 [[email protected] git data]# git reset --hard 0bdf2e7 # --hard 快速回滚 --soft HEAD is now at Obdf2e7 modified README file [[email protected] git datal# git reset --hard V1.0 HEAD is now at a66370a add oldboy dir
github
Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观
的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。
1、注册用户
2、配置ssh-key
3、创建项目
4、克隆项目到本地
5、推送修改到远程
echo "#git">> README.md git init git add README.md git commit -m "first commit" git remote add origin [email protected]:lewen/git.git git push -u origin master git remote add origin [email protected]:lewen/git.git git push -u origin master ssh-keygen -t rsa 将公钥添加到 一个公钥在github只能绑定一次 将远程的拉下来,合并后,再 push git fetch 将远程的更新到本地 git merge origin/master 合并远程的到本地master 先拉,再合并,再推
gitlab
Gitlab Shell。
Gitlab Shell有两个作用:为Gitlab处理Git命令、修改authorizedkeys列表。
当通过SSH访问Gitlab Server时,Gitlab Shell会:限制执行预定义好的Git命令(git push,git pull,gitannex)
调用Gitlab Rails API检查权限执行pre-receive钩子(在GitLab企业版中叫做Git钩子)执行你请求的动作处理GitLab的post-receive动作。处理自定义的post-receive动作
当通过http(s)访问Gitlab Server时,工作流程取决于你是从Git仓库拉取(pul)代码还是向git仓库推送(push)代码。
如果你是从Git 仓库拉取(pull代码,Gitlab Rails应用会全权负责处理用户鉴权和执行Git命令的工作;
如果你是向Git 仓库推送(push)代码,Gitlab Rails 应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由Gitlab Shell进行处理:
调用GitabRails ApI检查权限。执行pre-receive钩子(在Gitlab企业版中叫做Git钩子)。执行你请求的动作处理GitLab的post-receive动作
处理自定义的post-receive动作
/usr/local/src/
gitlab-ctl reconfigure # 只要修改/etc/gitlab/gitlab.rb 就需要重新配置
gitlab-ctl tail
restart [option]
status
GITLAB备份管理
#配置文件中加入 gitlab rails[‘backup path‘]=‘/data/backup/gitlab‘ gitlab rails[‘backup keep time‘]=604800 # 以秒计算 ? #如果自定义备份目录需要赋予git权限 mkdir/data/backup/gitlab chown -R git.git /data/backup/gitlab /usr/bin/gitlab-rake gitlab:backup:create #执行备份 ? #定时任务Crontab中加入 0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
?
GITLAB数据恢复
#停止数据写入服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab-rake gitlab:backup:restore BACKUP=1512811475_2017_12_09_10.2.2 gitlab-ctl restart 把先关服务 rpm -uvp xxxxxx.rpm 升级gitlab 最好不要升级。真要升级采用数据导入的
原文地址:https://www.cnblogs.com/wenyule/p/10014206.html