什么是版本控制

版本控制(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 addgit checkout --files 使用暂存区的修改覆盖工作目录,用来撤销本地修改

gitlab api更改默认分支 gitlab怎么改名字_版本控制

 

git commit -a 直接把所有文件的修改添加到暂存区然后在执行提交
git checkout HEAD --file 取出最后一次修改,可以用来进行回滚操作

gitlab api更改默认分支 gitlab怎么改名字_服务器_02

 

通常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