• 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. 查看

     

  • 相关阅读:
    js+servlet实现百度搜索栏下拉框的实现
    python time模块
    dajngo基础
    MySQL解决时区问题:datadrip com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    数据库连接池
    超星学习通绕开鼠标监控的方法
    centos7 安装python3
    docker命令
    爬虫一
    学习python的第九天笔记
  • 原文地址:https://www.cnblogs.com/victorm/p/9502072.html
Copyright © 2020-2023  润新知