git实战


git实战

https://git-scm.com/book/zh/v2

1.简介

  • git是一个分布式版本控制的软件

    • 分布式

    • 版本控制

      • 文件发展状态

        • ①文件拷贝

        • ②本地版本控制

        • ④分布式版本控制

    • 软件 : 安装在电脑上的工具

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.工作区

  1. 正在操作的文件夹,写代码.

  2. 已管理区

  3. 新增/修改 -->红色 : 自动检测 ---->git add . 提交到暂存区 绿色 ---->git commit ,提交到版本库

3.2.暂存区

  1. 缓存的地方

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.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.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.给开源项目贡献代码

  1. fork源代码 --->将别人的代码fork到自己的远程仓库里去

  2. 在自己仓库修改代码从自己的远程仓库git clone https://github.com/DengJackNo1/tornado.git

  3. 在电脑本地修改bug

  4. git add git commit -m "修复bug/贡献代码" git push origin master ,提交到自己的仓库 .

  5. 给源代码的作者提交 修复bug 的申请(create new pull request)

  6. 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

     

Git