什么是版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
简单说就是用于管理多人协同开发项目的技术。
集中式与分布式版本控制的区别
- 集中式版本控制只有中心服务器拥有一份完整的代码,而分布式版本控制每个人电脑上就有一份完整的代码。
- 集中式版本控制有安全问题,当中心服务器挂了的时候,所有人就无法工作了。
- 集中式版本控制需要联网才能使用,入股网速较慢那么提交一个文件就慢的要死。而分布式版本控制不需要联网就能工作。
- 分布式版本控制新建分支、合并分支的速度非常快,而集中式版本控制新建一个分支相当于复制一份完整的代码。
Git与SVN的主要区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git简介
Git是免费、开源的
最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper
优点:
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
缺点:
- 模式上比SVN更加复杂。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
中心服务器
中心服务器就是用来交换用户修改代码的,没有中心服务器其实也能工作,但是中心服务器能保持24小时开机状态。这样方便交换修改。GitHub就是一个中心服务器。
工作区与版本库的概念
Git的版本库有一个称为stage的暂存区以及最后的History版本库,History中存有所有分支,使用一个Head指针指向当前分支。新建分支其实就是新建一个指针指向时间线上的最后一个节点,并让head指针指向新分支,这时新分支就是当前分支。
程序员写代码其实就是一个工作区,工作区里面的代码文件经过git add xxx
命令,将xxx文件提交到stage暂存区,暂存区其实就属于版本库了。然后把暂存区中修改过的文件通过git commit
命令,修改过的文件被提交到当前分支,暂存区这时已经被清空。
git reset --files
覆盖暂存区,用来撤销最后一次 git add
git checkout --files
使用暂存区的修改覆盖工作目录,用来撤销本地修改
git commit -a
直接把所有文件的修改添加到暂存区然后在执行提交git checkout HEAD --file
取出最后一次修改,可以用来进行回滚操作
通常master分支是比较稳定的分支,只用来发布新版本;日常开发在dev(开发分支)进行。最终多个人提交合并到master分支。
在一个分支上操作后,如果还没有将修改提交到分支上,此时进行交换分支上,那么另一个分支也能看到新的修改
这是因为分支共用一个工作区的缘故。
当master分支出现一个bug急需修复,但是自己在dev分支上的任务还没做完,可以使用git stash
将dev分支上的修改存储起来。此时当前工作区的所有修改都会被存到栈上,也就是说当前工作区是干净的,没有任何未提交的修改,此时就可以安全的切换到其它分支上了。
.gitignore文件
忽略以下文件:
- 操作系统自动生成的文件
- 编译生成的中间文件比如Java生成的.class文件
- 自己的敏感信息比如存放口令的配置文件
常用的git命令
git init
新建一个仓库,在当前路径下 生成 .git文件git clone /path/repository
克隆本地仓库git clone username@host:/path/to/repository
克隆远程仓库git status
查看工作区下修改的文件git blame $file
文件改变的时间和内容git branch
列出本地所有分支
-git branch -a
查看远程和本地的所有分支git branch -d $branch
删除指定分支
-git branch -r
查看远程所有分支git branch $branch
创建一个名字为$branch的分支git commit -a
提交本地所有改变de 文件git checkout master
切换到master分支git commit -m “提交信息”
提交到历史版本库携带提交信息git push origin master
push修改文件到远程仓库git remote add origin
连接远程仓库git pull
使用远程仓库更新本地存储库git push -u origin master -f
强制一次性将本地分支master推向远程分支origin
更多git详细命令 :
http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf 码云的git基础命令(https://gitee.com/all-about-git)
解决码云出现git@gitee.com: Permission denied (publickey).
1)、重新生成ssh
ssh-keygen -t rsa -C “这里是你的账号”
2)、查看你的 public key
cat ~/.ssh/id_rsa.pub
(以ssh-rsa 开头,以账号的注册邮箱结尾的)
3)、将它添加到码云,添加地址
https://gitee.com/profile/sshkeys
4)、终端输入ssh -T git@gitee.com 完成设置。
参考
- https://github.com/CyC2018/CS-Notes
- 廖雪峰Git教程
- http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf