版本控制

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一

版本控制最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换

集中式版本控制工具

(1)集中化的版本控制系统诸如CVS、SVN(Subversion)、VSS……等,都有一个单一的集中管理的服务器,保存所有文件的修订版本, 而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新

(2)多年以来,这已成为版本控制系统的标准做法, 每个人都可以在一定程度上看到项目中的其他人正在做些什么,管理员可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,远比在各个客户端上维护本地数据库来得轻松容易

(3)缺点是中央服务器的单点故障,如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

分布式版本控制工具

(1)分布式版本控制工具如Git、Mercurial、Bazaar、Darcs…… 这种,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。

(2)这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复,因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

Git简介

(1)Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

(2)几个容易混淆的概念

概念简介
Git开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
GitHubGitHub是世界上最大的代码托管平台,超5千万开发者正在使用。
Gitee开源中国推出的基于Git的代码托管服务,中文名:码云 ,原名 Git@OSC ,目前已经托管超过 600 万的项目。
GitLabGitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务

(3)代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

1
2
3
4
5
代码托管中心 = 远程库

局域网下的代码托管中心GitLab(本地搭建的)

互联网下的代码托管中心GitHub(外国网站)、Gitee码云(国内网站)

(4)Git 工作机制

Git 常用命令

常用命令

命令作用
git config –global user.name 用户名设置用户签名
git config –global user.email 邮箱设置用户签名
git init初始化本地库,生成.git文件夹
git add 文件名添加到暂存区
git add -A、git add -all把工作区的所有修改添加到暂存区
git commit -m “描述信息” 文件名提交到本地库(默认是master主分支)
git status查看本地库状态
git diff查看修改的内容,已经使用git add之后,不能再查看修改的内容
git log查看版本详细信息,git提交的日志信息
git reflog查看历史记录,记录每一次git的命令(可用于回滚后忘记最新版的id时找回) HEAD 在git中指代当前版本 HEAD^指上一个,HEAD^^同理
git reset –hard 版本号id版本穿梭
git checkout 文件名撤销文件的修改到最近一次git commit或者git add
git reset –hard 版本号id把工作区内容恢复到指定版本
git reset HEAD 文件名把暂存区的内容清除
git rm 文件名删除文件,删除之后还需要提交(git commit)
git mv 文件名 新文件名移动文件到新的路径,如果新的文件名发生改变,则可以理解为重命名

远程仓库命令

命令作用
git remote查看远程库信息,默认显示origin
git remote -v查看更详细的远程库信息,包括push 和fetch 地址
git remote add origin 仓库地址关联一个github远程仓库
git pull 远程库地址或别名 远程分支名将远程仓库对于分支最新内容拉取下来, 拉取后与当前本地分支直接合并
git push -u 远程库地址或别名 master分支关联远程仓库第一次提交的时候添加上-u参数, 用于把本地以前的commit_log推送到远程库
git push 远程库地址或别名 master以后的推送就不需要-u参数
git remote rm 远程库地址或别名 git remote remove 远程库地址或别名移除远程库
git remote add 远程库地址或别名 “Git仓库的ssh格式地址”添加远程库
git clone 远程库地址克隆一个已有的远程仓库。address是远程库地址【请忽略<>】

分支管理命令

命令作用
git branch查看当前仓库拥有的分支,以及当前在哪一个分支,分支名前有*表示当前所在分支
git branch -v查看分支
git branch 分支名创建分支
git checkout -b 分支名创建一个新的分支并切换到这个新的分支
git checkout 分支名切换到指定分支
git merge 分支名合并分支,把指定的分支合并到当前分支上
git branch -d 分支名删除指定分支
git branch -D 分支名强制删除指定分支
git remote -v查看当前所有远程地址别名
git remote add 别名远程地址起别名
git remote add 远程库地址或别名 “Git仓库的ssh格式地址”添加远程库
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git stash保存当前分支工作现场,可以执行多次
git stash list查看当前分支保存的工作现场列表

其它命令

命令作用
git log –graph显示分支合并图
git merge –no-ff显示分支合并图,关闭Fast-forward 合并(快速模式),强制禁用快速合并模式进行合并指定分支到当前分支
git stash apply [stash_id]恢复现场,方括号内是可选参数(指定恢复)
git stash pop [stash_id]恢复现场,并删除
git stash drop [stash_id]删除现场

团队协作

团队内协作

如果没有建立合作,别人无法修改自己代码,想要别人修改,需要先建立合作,然后别人可以下载远程库代码,修改过后还可以上传,自己的远程库代码就会被更新

跨团队协作