一、什么是git?
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git是分布式版本控制软件。
git维基百科上详细介绍了git的资料,包括git的创建、使用以及一些参考资料,已经挺全了,记住一点,最高效的学习方式就是读文档,找官方文档去阅读学习是最快的掌握git的方法。
既然是分布式版本管理,那么和我们平常使用的svn有什么区别?
-
分布式 vs 集中管理 (多份版本库 vs 一份版本库,设想下版本服务器挂了?)
-
无需网络,随时随地进行版本控制,在没有网络的情况下你想回退到某个版本svn基本没戏;
-
分支的新建、合并非常方便、快速,没有任何成本,基本不耗时,svn的版本基本上等同于又复制了一份代码;
stackoverflow 上关于svn和git的区别的讨论,说的很详细,请参考 Why is Git better than Subversion? github 上通过版本库结构、历史、子项目(submudle)的不同来对比两者,请参考 What are the differences between SVN and Git?
集中式版本管理:
分布式版本管理:
为什么要用分布式版本管理?
- 防止线上代码出问题,进行回滚
二、git 安装
Linux:略
Mac:略
Windows:略
检测有没有安装成功?
windows上右键看到Git GUI Here和Git Bash Here。然后点Git Bash Here进入输入git --version就可以看到了。
Mac上:
三、Git实战使用
准备Git环境
准备Git项目
项目:学员管理系统。
第一阶段:一个人单枪匹马开始干
Git管理步骤:
版本控制------>git管理文件夹
- 进入要管理的文件夹
- 初始化(标记,提名)
- 管理
- 生成版本
初始化(标记,提名)命令:
git 初始化 git init
.git隐藏文件就是存储的所有的Git在管理这个文件夹中所有的配置以及版本信息。
管理指定的文件:没被git管理是红色,被git管理是绿色
git status 检测当前文件夹(目录)下面的文件状态
-
- 红色:未被管理的文件
- 绿色:git已经管理起来了
- 生成版本
git add 要管理的文件文件名
git add . 表示将当前文件夹(目录)下的所有文件都进行管理
生成版本:
git commit -m '描述信息'
比如面如信息为第一个版本或者v1。
注意:
如果项目文件进行了修改,我们git需要检测什么文件进行了修改,然后对修改的文件进行管理在进行提交生成版本即可!
查看版本记录:git log
git的三大区域:工作区、暂存区、版本库。
↓init
工作区:正在操作的文件夹,包含已经管理的文件和新的或者修改了的文件。自定检测。
↓add
暂存区:
↓commit
仓库:
第二阶段:在原来项目基础上拓展新功能。
第三阶段:‘突发事件’
回滚:回滚到之前版本
git reset --hard 版本号
从第五次提交回滚到之前可以回滚到四三二一。那么如果再第三次怎么回滚到第五次呢?
git reflog
git reset --hard 版本号
第四阶段:紧急修复旧版本中的bug
分支基础知识:
- 主干线(分支):master
- 分叉分支:
- 合并分支:
查看目前所处的分支:
git branch
创建分支:
git branch 分支名
从主分支切换到分支:
git checkout 分支名
对分支进行管理和提交。
需要紧急修复旧版本bug,回到master主分支,创建修复bug的分支,一系列的代码操作最后管理和提交。
合并分支需要回到master分支。
git checkout master
git branch
git merge 要合并的分支名
把修复bug的分支删掉:
git branch -d 分支名
如何解决分之合并产生的冲突?
1、找到冲突的文件手动修改
2、
git工作流:
Git的协作功能
第五阶段:在家里写的代码到公司用。配合代码托管仓库(giuhup,gitlap,gitee...)
在家里第一次上传代码步骤:
给远程仓库起别名:
git remote add origin https://github.com/zhangrenguo94/-.git
git remote add 别名 远程仓库地址(url)
向远程仓库推送代码:
git push -u origin master
git push -u origin 分支名称
在公司第一次拉代码:
git clone 远程代码仓库地址
注意:
- 把所有的代码都已经拿下来了,切换分支可以直接切换。
- 克隆内部已实现起别名,以后提交直接用origin就可以了
在公司里写代码继续开发新功能,应该在dev分支上写。
第一步:第一步切换到dev分支进行开发
第二步:将master代码合并到dev分支(只需要一次)
第三步:修改代码
第四步:将本地代码推送到托管仓库
git push origin dev
回到家里想继续开发,需要更新:
第一步:切换到dev分支进行开发
第二步:拉代码:
git pull origin dev
第三步:修改代码
第四步:提交代码
注意:
开发完毕要上线,就需要将dev分支合并到master,master分支就可以上线。
切换到master
git chekcout master
dev分支合并到master
git merge dev
推送到远程仓库的master分支
git push origin master
回到dev分支
git checkout dev
将master分支代码合并到dev
git merge master
将dev分支提交到远程dev分支
git push origin dev
第六阶段:在公司写的代码忘记上传,然后回家写了新的功能代码上传。
打开有冲突的文件,自己手动解决。
从线上拉代码,拉dev分支
git pull origin dev
等同于两句:
git fetch origin dev
git merge origin/dev
rebase(变基)使git记录变得简洁。 第一种情况:把多个提交记录整合成一个记录。(如果已经提交到远程代码库了不建议这么合并) git rebase -i 版本号 意味着现在所在的地和这个版本号之间的记录做个合并。 git rebase -i HEAD~数字 比如数字是3,意味着从当前位置开始往前找3条记录然后进行合并。 注意:用git rebase -i HEAD~数字,需要进行操作,变成s。 第二种情况:有分支,dev分支和master分支合并,如果不想要分叉 先切回到dev分支 git checkout dev 然后rebase命令,把dev变成一个基本的干线,把master放进来 git rebase master 在接下来切换到master分支,再把dev分支merge回来 git checkout master git merge dev 第三种情况:忘记将本地代码上传到云端。不产生分叉的方法。 git fetch origin dev git rebase origin/dev 注意事项: git rebase如果产生冲突解决冲突(按照提示) 执行git rebase --continue
beyond compare git和 beyond compare建立联系。 git合并时直接直接调用某个命令启动beyond compare。 第一步安装beyond compare 第二步在git中进行配置 合并工具:bc4是我们给beyond compare起的名字。 git config --local merge.tool bc4 工具的安装路径: git config --local mergetool.path ‘/usr/local/bin/bcomp’ 不用保留备份 git config --local mergetool.keepBackup false 第三步应用beyond compare git mergetool
多人协同开发 !!!
Gitflow工作流:
公司项目用组织 :
公司版本管理用tag:
第一步:创建项目并且打上标签
创建dev分支并且上传到云端
第二步:在组织邀请成员进组织,
第三步:
git有三个配置文件:
当前项目目录下文件--->本地项目配置文件:项目/.git/config
git config --local user.name 'zrg' git config --local user.email 'zrg@163.com'
当前用户所在的目录---->全局配置文件:~/.gitconfig
git config --global user.name 'zrg' git config --global user.email 'zrg@163.com'
系统配置文件:/etc/.gitconfig
注意:需要有root权限。
git config --system user.name 'zrg' git config --system user.email 'zrg@163.com'
配置文件应用场景:略
git免密登录:
- URL中体现
- SSH实现
1、在自己电脑生成公钥和私钥(默认放在 ~/.ssh/
id_rsa.pub
id_rsa)
2、拷贝公钥的内容,并设置到github中
3、在git本地配置ssh地址
4、以后使用就再也不用输密码了。
git push origin master - git自动管理凭证
gitignore忽略文件
应用场景:
- 只管代码,不管数据库
github任务管理相关
- issues
文档以及任务管理
- wiki
项目文档
作者:张仁国