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

 

原文地址:https://www.cnblogs.com/lilinyuan5474/p/11792738.html