git实战
https://git-scm.com/book/zh/v2
1.简介
-
git是一个分布式版本控制的软件
-
-
版本控制
-
文件发展状态
-
①文件拷贝
-
②本地版本控制
-
③集中式的版本控制 -->代表软件 svn
-
④分布式版本控制
-
-
-
软件 : 安装在电脑上的工具
-
2.git安装
linux/mac使用命令行安装即可,window到git官网下载即可.
git安装 :https://git-scm.com/book/zh/v2
-
在 Linux 上安装
如果你想在 Linux 上用二进制安装程序来安装 Git,可以使用发行版包含的基础软件包管理工具来安装。 如果以 Fedora 上为例,你可以使用 yum:
$ sudo yum install git
如果你在基于 Debian 的发行版上,请尝试用 apt-get:
$ sudo apt-get install git
要了解更多选择,Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 http://git-scm.com/download/linux。
-
在 Mac 上安装
在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。 如果没有安装过命令行开发者工具,将会提示你安装。
如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 OSX Git 安装程序可以在 Git 官方网站下载,网址为 http://git-scm.com/download/mac。
Figure 7. Git OS X 安装程序.
你也可以将它作为 GitHub for Mac 的一部分来安装。 它们的图形化 Git 工具有一个安装命令行工具的选项。 你可以从 GitHub for Mac 网站下载该工具,网址为 http://mac.github.com。
-
在 Windows 上安装
在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 http://git-scm.com/download/win,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/。
另一个简单的方法是安装 GitHub for Windows。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 http://windows.github.com。
-
从源代码安装
有人觉得从源码安装 Git 更实用,因为你能得到最新的版本。 二进制安装程序倾向于有一些滞后,当然近几年 Git 已经成熟,这个差异不再显著。
如果你想从源码安装 Git,需要安装 Git 依赖的库:curl、zlib、openssl、expat,还有 libiconv。 如果你的系统上有 yum (如 Fedora)或者 apt-get(如基于 Debian 的系统),可以使用以下命令之一来安装最小化的依赖包来编译和安装 Git 的二进制版:
$ sudo yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel $ sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
为了能够添加更多格式的文档(如 doc, html, info),你需要安装以下的依赖包:
$ sudo yum install asciidoc xmlto docbook2x $ sudo apt-get install asciidoc xmlto docbook2x
当你安装好所有的必要依赖,你可以继续从几个地方来取得最新发布版本的 tar 包。 你可以从 Kernel.org 网站获取,网址为 https://www.kernel.org/pub/software/scm/git,或从 GitHub 网站上的镜像来获得,网址为 https://github.com/git/git/releases。 通常在 GitHub 上的是最新版本,但 kernel.org 上包含有文件下载签名,如果你想验证下载正确性的话会用到。
接着,编译并安装:
$ tar -zxf git-2.0.0.tar.gz $ cd git-2.0.0 $ make configure $ ./configure --prefix=/usr $ make all doc info $ sudo make install install-doc install-html install-info
完成后,你可以使用 Git 来获取 Git 的升级:
$ git clone git://git.kernel.org/pub/scm/git/git.git
3.git 三大区域
3.1.工作区
-
正在操作的文件夹,写代码.
-
已管理区
-
新增/修改 -->红色 : 自动检测 ---->git add . 提交到暂存区 绿色 ---->git commit ,提交到版本库
3.2.暂存区
-
缓存的地方
3.3.版本库
4.个人单独开发
4.1 git管理文件夹的步骤
1.进入管理的目录 2.git init 初始化,让git管理当前文件夹 3.git status 检测当前目录下文件的状态 4.三种状态的变化 1.红色: 新增/修改的文件 --> git add 文件名 / git add . 2.绿色 : git已经管理起来的 --> git commit -m "版本描述" 3.生成版本 5.个人信息配置 :用户名 邮箱 git config --global user.email "1821333144@qq.com" git config --global user.name "DengJack" 6.生成版本 git commit -m "版本描述" 7.查看版本记录 git log 只能看该版本之前的版本 git reflog 看所有的版本,之后的版本也能拿到,可以任意回滚了. 8.版本回滚 git reset --hard 版本号(前3位就可以了)
4.2分支
4.2.1线上代码出现bug紧急修复
#出现bug: 1. 创建debug分支 git branch bug 2. 切换到debug分支,修改bug git checkout bug # 然后修改bug 3. 修改完成后提交,切换到master,合并debug的分支 git add . 提交修复bug后 git commit -m "修复完bug" 此时bug分支修复完成,master还没有修复 git checkout master 切换回master分支 git merge bug 合并bug分支 4. 切换到dev分支,开发分支. 合并master/debug分支 5. 删除debug的分支 git branch -d bug 删除bug分支
4.2.2总结
git branch 查看当前分支 git branch dev 创建dev分支,当前还是master分支 git checkout dev(分支名) 切换到dev分支 # 分支之间互不干扰 git merge 要合并的分支 注意: 切换分支在合并 可能会产生冲突(手动解决冲突) git branch -d 分支 删除分支
4.3工作流
主干线分支master ,线上分支,正在
开发分支 dev
修复bug的分支 debug
4.4 代码托管github/码云/gitlab
1.注册github账号 2.创建仓库 仓库名 --> 推荐项目名 描述 公有or私有仓库类型 3--> README .gitignore license许可证 得到远程仓库 https://xxxxxx 3.本地代码推送 echo "# " >> README.md git init git add README.md git commit -m "第一次提交" git remote add origin https://xxxxx # 给远程仓库起别名origin/xxx/second.... git push -u origin master git push -u origin dev 把本地推送到远程dev分支 4.本地拉取代码 方法1 : git clone https://xxxxx #把代码拉取回来(把所有分支都拉取回来了),但不显示. git checkout dev #切换到dev分支 开始在家开发 #开发流程 在公司时 git branch dev 开发 git add . git commit -m "xxx" git push origin dev 下班回家 更新最新的dev git pull origin dev 获取到最新的代码了 在家开发了新的 git add . git commit -m "在家开发了" git push origin dev 睡觉 第二天,到公司去了 git pull origin dev 等同 git fetch origin dev git merge dev
又继续开发了.
4.5 git rebase(变基)
-
使git记录变得简洁~
-
第一种:多个提交记录整合成一个记录
git rebase -i 老版本号 将当前版本的提交记录 合并到 老板本提交记录 git rebase -i HEAD~3 将当前开始,找最近的3条记录合并. 1.把pick改成s,只保留一个pick 2.合并往后,整合版本描述
注意: 合并记录是,不要合并已经push到仓库的记录.
-
第二种:类似合并的功能,把dev的提交记录合并到master分支上.
git checkout dev git rebase master 类似合并 git checkout master git merge dev #记录图形展示 git log --graph --pretty-format:"%h %s"
-
第三种:忘记推送,导致合并冲突
git pull xxx = git fetch = git merge ,会产生分叉的 不执行它了 # ==>直接执行 git fetch origin dev git rebase origin/dev -->不会有分叉
rebase 冲突处理
1.产生冲突 2.解决冲突 3.git add . 4.git rebase --continue 继续rebase
-
4.6 beyond compare软件来快速解决冲突
-
第一步 :安装beyond compare
-
第二步 :在git中配置
git config --local merge.tool bc3 git config --local meretool.path "/usr/local/bin/bccom" git config --local mergeool.keepBackup false --local 指该配置只在当前生效
-
第三步 :合并产生冲突后,解决冲突
git mergetool 自动打开,自动打开冲突文件.
5.多人协同开发
5.1多人工作流(gitflow)
线上 master relense 临时分支 -->做测试使用.写文档.修复bug(可能会忽略) 组长 dev , 把master的代码拉下来.不做开发,只做代码检查(review). 小弟A 斗地主分支 ,完成了,申请合并到dev分支 . 合并过程中,代码view. code_review(可能会忽略) 小弟B 炸进花分支 每个人有自己的分支 线上代码出bug 创建bug分支
5.2项目开始
1.创建master,创建项目 和 版本 mkdir dbhot touch app.py 开发中 git init git add . git commit -m "第一次提交" 2.创建多人协作仓库 方法1: 创建仓库 进入仓库-->settings-->collaborators(合作者)-->输入其他人的git用户名-->其他人会接受到邮件,同意后,成为协作者. 方法2: (公司做法) 创建组织(一个组织可以有n个仓库),公司有多个项目,放到组织中 在组织内创建仓库 dbhot 3.git remote add origin https://仓库地址 git push origin master 设置版本 : v1 v1.1 v2.3.2 git log git tag -a v1 -m "第一版" 在本地给这次提交加上了一个版本 git push origin --tags 推送到远程仓库
5.3.邀请小弟,小弟开发
1.小弟注册账号,获取其用户名 2.邀请成员进组织 member/owner ,小弟会接受收到邮件,同意加入组织.组织成员成为2. 3.组织内可以有很多的项目,默认权限只有read 4.进入项目,设置权限settings-->合作者,再把小弟邀请进来.小弟加入组织,也加入了这个项目,对该项目由write的权限了. ### 小弟开发 #### 5.mkdir brother cd brother/ git clone https://xxxxxxx 项目仓库 cd 项目目录(cd dbhot) git checkout dev # 切换到开发分支 git checkout -b ddz # 自己新建一个分支 开发中 ... ... ... git add . git commit -m "ddz斗地主
5.4申请代码review
通过 pull request/merge request实现 1.配置(loader来做) 项目settings > Branches 给分支添加规则 ,给 dev分支添加规则,合并前review 2.小弟发起申请pull request 把ddz 分支 合并到dev分支,写描述信息 3.loader会受到一个pull request申请. add your review 查看所有新代码 merge pull request 可以让你进行合并,已经review confirm merge 确定合并,完成合并. 功能开发完了,ddz分支,可以删除了.
5.5测试&上线
# 测试团队&loader来做 1.在dev分支下, git checkout -b release # release测试分支 在release测试 2.申请pull request. release --> master 3.代码view , 同意合并 4.在dev下,把release分支合并,release分支删除. git branch -d release 5. git checkout master git pull origin master # 拉取最新master版本 6.创建版本tag git tag -a v2 -m "第二版,斗地主功能" git push origin --tags 7.运维人员就可以下载代码做上线了 git clone -b v2 地址
6.给开源项目贡献代码
-
fork源代码 --->将别人的代码fork到自己的远程仓库里去
-
在自己仓库修改代码从自己的远程仓库git clone https://github.com/DengJackNo1/tornado.git
-
在电脑本地修改bug
-
git add git commit -m "修复bug/贡献代码" git push origin master ,提交到自己的仓库 .
-
给源代码的作者提交 修复bug 的申请(create new pull request)
之后作者会检查,这个bug怎么样.即可.
7.git的配置文件
-
1.项目配置文件: 项目/.git/config
git config --local user.name "dyx" git config --local user.email "xxx@com"
-
2.全局配置文件 : 当前用户目录/.git/config
git config --global user.name "xxxx"
-
3.系统配置文件: /etc/.git/config 注意 : 需要有root权限
git config --system user.name "xxx"
-
4.应用场景
git config --local merge.tool bc3 git config --local meretool.path "/usr/local/bin/bccom" git config --local mergeool.keepBackup false git remote add origin 地址 #默认添加到本地配置文件(--local)
-
5.window的配置文件
全局配置文件通常在【C:\Users\Administrator\.gitconfig】
8.免密码登陆
-
第一种.url体现
原来的地址 : https://github.com/DengJackNo1/web_framework.git 修改的地址: https://用户名:密码@github.com/DengJackNo1/web_framework.git git remote add origin https://用户名:密码@github.com/DengJackNo1/web_framework.git git push origin master
-
第二种.ssh实现(公钥私钥)
1.生成公钥和私钥 #默认放在 ~/.ssh 目录下, id_rsa.pub -->公钥 id_rsa -->私钥 ssh-keygen(git终端) 2.拷贝公钥的内容,设置到github中. 右上角 用户->sttings-->SSH and GPG keys-->SSH keys -->new SSH key-->粘贴公钥的内容 3.在git本地中配置ssh地址 git remote add origin shh地址 4.以后使用 git push origin master
-
第三种.git自动管理凭证
在项目所在目录 git bash git config credential.helper store 建议只对当前仓库 有效 or git config --global credential.helper store 在输入一次密码后,自动保存.
9. git忽略文件 .gitignore
让git不再管理当前目录的某些文件 #####.gitignore文件###### a.py b.py # 忽略 a.py b.py文件 .gitignore # 忽略 gitignore.py文件 *.py # 忽略 py格式的文件 files/ # 忽略fiels文件夹下所有文件 #取反 !a.py # a.py文件除外,git需要管理 *.py[c|a|d] # 正则 , pyc pya pyd 后缀忽略. ########################
更多参考 : https://github.com/github/gitignore
10. 任务管理
-
issues
-
wiki 项目wiki ,项目的所有文档都写在wiki内(项目描述)
11.大总结
git init git add . git add filanme git commit -m "xxx" git status git config --global user.email "1821333144@qq.com" git config --global user.name "DengJack" git log git reflog git reset --hard 添加远程连接(别名) git remote add origin 地址 推送代码 git push origin dev 下载代码 git clone 地址 (所有的分支) 拉取代码 git pull origin dev 等价于 git fetch origin dev git merge origin/dev 保持代码提交整洁(变基) git rebase 分支 # -->保持代码提交简洁 ,和 merge 差不多 . 记录图形展示 git log --graph --pretty=format:"%h %s" 创建并切换到分支 git checkout -b dev