zoukankan      html  css  js  c++  java
  • Git 与 GitHub

    Git

    这个年代,不会点Git真不行啦,少年别问问什么,在公司你就知道了~

    Git是一个协同开发的工具,主要作用是进行版本控制,而且还能自动检测代码是否发生变化.

    一. 安装

    下载地址:https://www.git-scm.com

    二 .进入 git bash

    wins:

    (1)进入要进行管理的文件夹,空白处右键,弹出框就会有

    (2)安装后,电脑桌面也会有个的图标

    三.开始使用-git常用命令

    一.基本使用

    记住:如果要管理哪里文件,就进入哪个文件夹

    1. git init     初始化git仓库

    git仓库存放文件夹是 .git文件夹里,如果你的电脑上没有,应该是文件夹隐藏了,勾选“隐藏的项目"就可以看见了

    之后所有的版本都会放到 .git 文件夹里。

    2.git status    查看当前的状态(红色,绿色, 白色)

    下面红色的文件,表示还没有被管理起来的文件

    3. 选个文件进行管理:git add flask_ctx/ 

    4.然后在git status查看管理状态

    5. git add ./    把包括根目录在内的所有文件都管理起来

    所有变绿的文件都表示已经准备好了,接受管理

    6.克隆所有变绿的文件保存起来,这些文件就会变成白色的了

    6-1  git config --global user.mail "victorm315@163.com"

    6-2  git config --global user.mail "victorm315@163.com"

     

    6-3 git commit -m  ”第一次把所有的文件都保存起来“         

    备注:”引号里的内容一定是要详细写的,防止将来你看不懂,千万别乱写,给自己挖坑“

     6-4 再git status,下面就没有需要提交的文件了

     

    7.此时,你的文件已经被真正管理起来了,之后你的文件不管发生什么风吹草动,都会被git检测到

    7-1 如果你再pycharm里add了文件,pycharm 就会自动提示你是否增加文件到git

    7-2 也可以通过 git status 检测,发生变化的文件就会被标红,而且再pycharm的目录树里也是红色的

    .idea 是pycharm自动生成的,不是我们的代码,可以忽略他

    7-3 继续执行: git add .   和  git commit -m  提交

    8.  git log  查看提交日志,可以看到共提交了几次

     

    9.  git reset --hard 要回滚到的版本号       回滚到某一个版本

     

    9-2 再 git log 可以查看提交日志,下图已经显示只有第一次提交的内容了

    查看文件:不需要的代码已经没有了

    10. git reflog      查看历史提交记录

    11 git  reset --hard 需要恢复的id        恢复刚才删掉的代码

    已经被删掉的代码就又回来了

    问题场景:

    新功能A已经开发了一半,但是线上出现bug了,需要回到上被版本紧急修复,那这里存在一个问题,新功能A怎么能暂时存在某个地,等修复完线上bug后再接着开发新功能A呢?

     二.Git之stash(方案一:一般是自己用的,公司不用)

    stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

    看完之后,对应stash命令,要抓住关键词:临时 + 临时存储的“某个地方”

    1. git stash :将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态

    2. bug修复后,git add .  + git commit -m “bug修复” 提交

    3. 拿回新功能A的代码,继续开发

    git stash pop将第一个记录从“某个地方”重新拿到工作区(可能有冲突),如果出现冲突,需要手动自行解决

    如果手动修改冲突代码:

      1. Pycharm里会提示那部分代码冲突了,将你需要的代码保留,其他不需要的删除掉

      2 .idea/workspace.xml 相应的冲突的地方也需要修改

    冲突解决完成后,继续开发,再重复提交版本管理等。

    git stash list :查看“某个地方”存储的所有记录

    git stash clear:清空“某个地方”

    git stash apply 编号:将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 

     git stash drop 编号:删除指定编号的记录

     三. git 之 branch(公司项目中,一般都用branch)

    branch:称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。

    branch相关常用命令:

    • git branch 分支名称             创建分支
    • git checkout 分支名称          切换分支
    • git branch -b 分支名称    是上面两条命令的合并,即创建又切换
    • git branch -m 分支名称        创建并切换到指定分支
    • git branch                            查看所有分支
    • git branch -d 分支名称         删除分支
    • git merge 分支名称              将指定分支合并到当前分支

    演示:

    1. 先从master主干上拉一个branch分支出来进行新需求的开发:

    git branch dev:从master主干上创建分支,分支名字是dev

    git checkout dev:切换到到dev分支

    ls: 查看当前目录下有哪些文件

    touch 文件名: 在dev分支上创建文件

    2. 记住:如果要切换其他分支或者主干,一定要先提交一下在分支上的代码

    git add . 

    git commit -m "dev分支"

    3. 切回master主干,看一下是否提交到了master上

    git checkout master : 切换回master

     

     4. 再拉一个bug分支,修复bug

    5. bug分支与master合并

    5-1. 合并前要先提交bug分支的代码

    5-2. 再切回到master主干(合并到哪个分支,就要切换到哪个分支):   git checkout master

    5-3. 合并bug分支到master: git merge 被合并的分支名称   ---- 合并的时候可能会产生冲突,产生冲突就要手动去合并了

    5-4. 根据规定,决定要不要删除分支:git branch -d 要删除的分支名称

    所以线上出现bug了怎么办?(面)

    创建一个bug分支,在bug分支上修复,修复完成后,再合并到master。

    6.再切换到dev分支,继续开发

    6-1 开发完成,提交

    6-2 切换到master

    6-3 合并到master,此时会出现一个vim界面,可以进行编辑,比如写一些注释行说明,

    6-3-1 按 键盘 “i ” 键,进入vim编辑模式

    6-3-2 编辑完成后,先按 esc, 再按 :   , 然后按wq:报错并退出

    6-4 然后可以看log : git log

    其实按照这个图可以一直玩下去

     四. git 之 rebase

    rebase的作用(面):

    1. 用于合并,同merge

    2. 并且将提交记录合并到一条主线上,能让提交记录更加整洁

    3. git rebase 也会产生冲突,同样需要手动合并解决冲突

    4. 解决冲突后,需要执行  git rebase --skip

    所以,那该用merge还是rebase进行合并呢?

    视情况而定:如果要保留每次提交记录,就用merge,如果不需要刻意用rebase

    四.git之远程仓库 github

     github:国外的平台,目前开源的代码,或者优秀的程序都放在这个平台上。也是全球最大的程序员的交流平台

     GitHub,一个基于Git实现的代码托管的平台,可以将内容以及版本记录在远程也保存一份,这样就不用U盘咯(类似于云盘)。

    PS: 类似GitHub的产品还有许多,如:GitLab、Bitbucket、码云(码云可以给开几个私有账号,别人看见)等。

    很多公司处于安全和保密考虑,也会搭建自己的代码管理仓库:gitlab

    github的使用

    以码云为例,其他如gitbug都是一样的,操作命令也相同;只是gitbug在国外,操作比较慢。

    使用git仓库的前提条件是要先注册个账号哦。

    A 客户端的操作

    1. 在github里创建项目

      新建项目,然后会获得一份简易的入门指导如下图:

    2. 进行全部配置,就是说明谁来提交代码,下面的配置在最开始已经配置过了

    git config --global user.name "马明辰"
    git config --global user.email "victorm315@163.com"

     3. 在git bash 添加远程添加:意思是将代码推送到后面的地址:https://gitee.com/victorm315/StudyGitHub.git

    origin 是 https://gitee.com/victorm315/StudyGitHub.git的别名,以后就可以用origin来代替 https地址了。

     

    4. 把当前commit的所有代码push到上面的地址

    解释:把master 分支push到origin代表的地址里去

     

    push的时候会出现码云的用户名校验,正确输入即可

    然后刷新,就可以看到提交的代码了。这是master分支的代码。

    5.dev分支的也推送到远程仓库进行托管 

    记住:要push那个分支,就要先切换到该分支

     

    2. B客户端获取代码

     1 如果是第一次拉,你的文件夹是空的,可以通过克隆的方式获取代码

    被克隆的代码准备放在那里,要先进入该目录

    命令: git clone https://gitee.com/victorm315/StudyGitHub.git

     2 进入目录,可以看到,克隆下来的代码是master的,是把所有代码完全copy下来了,而我们要开发是要在dev分支上操作的。

    3 拉取dev,可以按照下面的方式拉取了

    4 就可以开始在dev上继续开发代码了

    比如修改了g.log文件

    5 把刚才提交到本地.git文件夹的代码还需要push到远程仓库才能真正实现dev代码的托管

    A 客户端:

    至此,远程仓库已经是最新代码,但是A客户端本地还不是最新代码,那又如何在A客户端获取远程仓库最新的代码呢?

    同B客户端一样,也要先进入需要操作的代码目录,然后拉取最新的代码,命令同B客户端一样的

    然后就可以在A客户端 dev 分支接着开发项目了。

    C 客户端

    在C客户端还可以有另外一种方式获取源代码

    1. 先创建个空目录,起个名字进行初始化 git init

    2. 注册到远程仓库: git remote add origin 地址

    3. 拉取master分支

    (1~3 就跟克隆其实一样的)

     

    4. 接着创建dev分支,继续写代码,add, commit, push

    长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行

    【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】or 【git rebase origin/分支】,

    并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

    五. git 之开发规范

    在公司怎么进行协同开发的呢?(面)

      一般是为每个人创建一个分支进行开发

    公司是否做代码的review?谁来做?怎么做的?

      代码review一定要做的;一遍是直接leader做的review,或者老大与相关成员一起做review的;review的时候会再创建一个review的分支

    公司一般是怎么合并代码的?

      一般是每个小功能完成后,当天就会合并一次,防止后期代码合并时出现大量的代码冲突。

    在git上如何协同开发?

      -- 通过合作者的方式

      -- 通过创建组织,邀请成员的方式

      -- fork方式

    fork的主要流程:

      用户A fork别人B的代码:

        1. 对于你想fork的代码,点击 fork, 相当于是把别人的项目copy到了你的账户目录里。

        2. 对于相关的代码进行修改,然后点击执行 New pull request

        3. Create pull request,编辑相关信息,提交给源代码的owner了

      B用户:

        1. 收到消息,点击 Merge pull request ,就能看到A提交的信息

        2. 点击Confirm Merge,在用户B的源代码里就能看到用户A提交的代码信息了

    六. Git 之 .gitignore文件

    项目中经常有一些文件如数据库文件、开发工具如pycharm生成的.idea文件等,都是不能上传到github或者想忽略.idea,怎么做呢?

    可以通过 .gitignore 文件进行忽略

    1. 首先创建 .gitignore文件

    命令:touch .gitignore

    2. 在.gitignore文件里写上需要忽略掉的文件名

    3. git add .  和 git commit -m "提交日志"

    4. .gitignore文件里能写什么内容?

      1)以斜杠“/”开头表示目录;  如:.idea/
    
      2)以星号“*”通配多个字符;
    
      3)以问号“?”通配单个字符
    
      4)以方括号“[]”包含单个字符的匹配列表;
    
      5)以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

      A  具体怎么写,github里也给你想到了,可以参考哪些文件需要ignore,然后选择Python.gitignore,就有Python官方的gitignore文档。

      https://github.com/github/gitignore/blob/master/Python.gitignore

     

      B  在你创建项目的时候,也是可以选择配置.gitignore的

    七. git 之 tag

     git tag用于控制 v1, v2 的版本。

    1. 创建本地Tag

    -a:表示创建一个含附注类型的标签,含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;

    还有一种标签类型是轻量级标签,轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。

    -m:指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果没有给出该选项,Git 会启动文本编辑软件供你输入标签说明。

    2. 查看本地tag

    3. 查看本地tag,模糊匹配

    4. 删除本地tag

    5.  切换tag

     

    6. 查看

     

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/victorm/p/9502072.html
Copyright © 2011-2022 走看看