Git 和 SVN 的区别
git 和 svn 是我们在开发过程中常用的代码版本管理工具,那么它们有什么区别呢?
1. Git 是分布式的,SVN 是集中式的。
SVN 必须有一个服务器版本库在中央服务器,所有的开发代码提交都是和服务器进行交互的,在断网的情况下我们就无法提交版本。
Git 是趋向于分布式的开发,每一个计算器上都要一个本地代码库,和服务器上的一样,所有即使在断网情况下一样可以进行 commit,查看历史版本记录,创建分支等操作。
2. Git 和 SVN 的存储形式不一样
Git 把内容按照元数据形式存储,Git 只关心文件数据的整体变化,更像是把文件做快照,文件没有改变时分支指向这个文件的指针不会改变,文件变化的时候,指针指向新版本。
SVN 是文件形式存储,保存文件前后变化的差异。
3. 版本号不一样
Git 没有全局版本号,采用 40 位长的哈希值作为版本号,你没有先后之分。
SVN 有版本号进行控制,每次操作会生成一个高版本号。
4. 分支不同
SVN 创建分支其实是创建一个新文件夹(目录)拥有实际的文件,相当于 copy 一份源文件,创建分支后,影响全部成员。每个人拥有这个分支,拉分支会比较慢,多分支并行开发较难。
Git 可以在任意 commit 节点开启分支,没有创建新的文件夹,创建一个分支就是多了一个索引文件,记录这个分支的变化,占用很小的内存。可以在一个文件夹下快速的切换不同的分支,每一个分支都是独立的,可以进行任何操作,不会影响其他的操作
5. 管理权限不同
Git 没有严格的管理权限,在 gitlab 中可以在项目目录下进行用户权限分配
SVN 权限管理比较严格,可以按照组,个人对子目录权限进行控制
6. 工作流程比较类似,但是还是有区别
SVN 每次更改文件需要 update,有冲突会打断提交
Git 提交之前需要先 pull。在 push 操作时有冲突先解决冲突,提交过程不会被打断,但是会标记冲突文件。
5
Git 开发流程
一般项目主要包含 master 和 develop 两个分支,
master 为主分支,是部署生产环境的分支,确保 master 分支的稳定,只有当所有的功能测试通过以后才会将代码合并到 master 分支上,进行上线发布。
develop 为开发分支,从 master 分支上建立。在开发过程中保证 develop 分支下的代码是最新的和 bug 已经修复过的。
日常新功能的开发都是在 develop 分支下在创建一个 feature-xxx 的分支进行开发,当功能开发完成,测试没有问题后在 develop 分支下和 feature-xxx 分支合并。
release 分支为预发布分支,冲 develop 分支下建立。feature-xxx 分支开发完成后合并 develop 分支,在 develop 分支下建立一个预发布的分支 realease,部署测试,如果发现 bug 直接由开发者在 realase 分支下修改并提交,测试通过后,合并 release 分支到 master 和 develop 分支下,此时 master 分支用作上线发布。
Git 的常用命令
1. 新建代码库
git init #在当前目录下创建一个代码库
git init [project-name] #新建一个目录并初始化为 Git 代码库
git clone [url] #clone 下载一个项目
2. 配置
git config --list #显示 Git 配置信息
#在提交代码时的用户信息
git config --global user.name "[name]" #全局配置 git 用户名
git config --global user.email "[email]" #全局配置用户邮箱
3. 常用代码提交命令
git add [file1] [file2]... #添加文件到暂存区
git add [dir] 添加指定目录到暂存区
git add . #添加所有的文件到暂存区
git commit -m "[注释信息]" #提交暂存到仓库区
git commit -a #提交工作区自上次 commit 之后的变化直接到仓库区
git branch # 查看当前分支
git branch -a #查看所有的分支
git checkout -b [branch] #创建一个分支
git checkout [branch] #切换分支
git merge [branch] #合并指定分支到当前分支
git log #显示当前分支提交的版本历史
git push -u origin [branch] #上次指定分支到远程仓库
git fetch #从远程仓库拉取代码
git pull #取回远程仓库的变化,并与本地分支合并
参考内容:
https://www.cnblogs.com/baby1…