zoukankan      html  css  js  c++  java
  • git实战

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

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

    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)

      之后作者会检查,这个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:UsersAdministrator.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

     

  • 相关阅读:
    由Photoshop高反差保留算法原理联想到的一些图像增强算法。
    一种具有细节保留功能的磨皮算法。
    图像抠图算法学习
    一年去雾算法研究的总结。
    关于《半反去雾算法》一文的四宗罪。
    自己编码使用去色、曲线、色阶算法实现照片怀旧特效。
    基于中值滤波或双边滤波方式的图像去雾效果的研讨。
    24位真彩色图像转换为16位高彩色图像的实现方法及效果改进
    对比度保留之彩色图像去色算法---基础算法也可以上档次。
    Tone Mapping算法系列一:基于Fast Bilateral Filtering 算法的 High-Dynamic Range(HDR) 图像显示技术。
  • 原文地址:https://www.cnblogs.com/lilinyuan5474/p/11792738.html
Copyright © 2011-2022 走看看