一、版本控制
1. 版本控制
用于管理多人协同开发项目的技术。
2. 版本控制软件/系统
用来记录文件变化,便于查询特定版本修订情况的系统。
3. 版本控制分类
- 本地版本控制:使用软件记录文件不同版本。
【优点】提高工作效率,降低手工管理的出错率。 【缺点】单机运行,不支持多人协作开发;若版本数据库故障所有历史更新记录丢失。 - 集中版本控制(例如SVN):基于【客户端-服务器】的运行模式,服务器保存文件所有更新记录,客户端只保留最新的文件版本。
【优点】联网运行,支持多人协作开发。 【缺点】不支持离线提交版本更新;中心服务器崩溃所有人无法正常工作;若版本数据库故障所有历史更新记录丢失。 - 分布式版本控制(例如Git):基于【客户端-服务器】的运行模式,服务器保存文件所有更新记录,客户端是服务器的完整备份。
【优点】联网运行,支持多人协作开发;断网后支持离线本地提交版本更新;若服务器故障,可使用任何一个客户端的备份进行恢复。 【缺点】以空间换时间,占用磁盘空间大。
二、Git基本组成
1. Git特性
- 直接记录快照,而非差异比较。版本切换快,占用磁盘空间大。
- 近乎所有操作都是本地执行。联网后将本地修改记录同步到云端服务器。
2. Git四个区域
- 工作区(Workspace):存放项目代码的区域。
- 暂存区(Stage):暂时存放已修改的文件的区域,保存即将提交的文件列表信息。
- 本地仓库(History/Repository):存放提交的所有版本的数据。其中HEAD指向最新版本。
- 远程仓库(Remote):托管代码的服务器,理解为一台远程数据交换的电脑。
3. Git三种状态
- 已修改(modified)
- 已暂存(staged)
- 已提交(committed)
4. Git工作流程
1)在工作区中添加、修改文件; 2)将需要进行版本管理的文件放入暂存区; 3)将暂存区的文件提交到Git仓库。
三、Git基本命令
1. 配置用户信息
Git需要记录谁对项目进行了操作。配置信息被写入全局配置文件.gitconfig中,配置一次即可永久生效。
git config --global user.name "Your-username"
git config --global user.email "Your-email"
git config --list --global
git config user.name
git config user.email
2. 查看帮助信息
git help config
git config -h
3. 建立Git仓库
- 将未进行版本控制的本地目录转换为Git仓库
在指定位置执行,即可在此目录位置创建一个.git隐藏目录,.git隐藏目录即当前项目的Gi t仓库,里面包含了初始的Git仓库必要组成部分。
git init
git clone url
4. 查看工作区文件状态
git status
git status -s
git status --short
?? untracked
M modified
A added
D deleted
R renamed
C copied
U updated but unmerged
其中,符号红色表示未暂存;绿色表示已暂存。
5. 文件操作
git add index.html
git add .
- 提交文件【当工作区文件提交后,文件处于unmodified状态】
git commit -m "新建了index.html"
git commit -a -m "新建了index.html"
- 撤销对文件的修改,用Git仓库中保存的文件覆盖当前工作区指定文件【不常用】
git checkout -- index.html
git reset HEAD
git rm -f index.html
git rm --cashed index.html
- 忽略文件【不希望出现在未跟踪文件列表的文件,通过创建.gitignore配置文件设置】
*.a
!lib.a
build/
/TODO
doc/**/*.pdf
git log
git reflog
git log -2
git log --pretty=oneline
git log --pretty=format:"%h | %an | %ar | %s"
git reset --hard <CommitID>
四、Git远程仓库操作(以github为例)
1. 开源许可协议
为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议。 5种常见的开源许可协议:
2. 开源项目托管平台
用于免费存放开源项目源代码的网站。
- Github:全球最牛的开源项目托管平台。
- Gitlab:对代码私有性支持较好,企业用户较多。
- Gitee:码云,国产的开源项目托管平台。访问速度快、纯中文界面、使用友好。
3. 提交到远程仓库
- HTTP:零配置,但每次访问都需要输入用户名和密码。
git remote add origin 仓库的http-url
git push -u origin master
- SSH:需要配置SSH Key,配置一次之后都不需要用户名和密码。【实际开发时常用】
SSH Key:实现本地仓库和Github之间免登录的加密数据传输。由两部分组成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh -T git@github.com
git remote add origin 仓库的ssh-url
git push -u origin master
4. 克隆远程仓库
git clone url
五、Git分支
1. Git分支
多人协作开发时,为了防止相互干扰,提高协同开发的体验,每个开发者都基于分支进行项目开发。
2. 分支分类
- 主分支master:在初始化本地Git仓库时默认创建主分支,用来保存和记录整个项目已完成的功能代码。因此,不允许程序员直接在主分支上修改代码。
- 功能分支:专门用来开发新功能的分支,临时从主分支分叉出去,开发完成后再合并到主分支上。
3. 分支操作
git branch
git branch login
git checkout -b login
git checkout login
- 合并分支【存在冲突的分支合并需要手动解决冲突后再提交合并】
git merge login
git branch -d login
1)将本地分支推送到远程仓库
git push -u orgin login:in
git push -u orgin login
git pull
2)查看远程仓库所有分支
git remote show origin
3)跟踪分支,将远程仓库分支下载到本地仓库
git checkout -b login orgin/in
4)将远程仓库代码更新到本地对应分支
git pull
5)删除远程仓库指定分支
git push origin --delete in
|