Loading

Git&Gitee

Git介绍

Git是分布式版本控制系统,控制的对象是开发的项目代码

  • 下载原装

    https://git-scm.com/downloads

  • git命令学习小游戏

    https://oschina.gitee.io/learn-git-branching/

  • Git的作用

    • 对文件(代码)进行版本管理
    • 完成协同开发 项目,帮助程序员整合代码
      • 帮助开发者合并开发的代码
      • 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
  • git与svn比较

    git分布式管理:每个客户端都能完成版本管理的功能

    image

    svn集中式管理:所有代码都放在服务端,版本管理由服务端完成

    image

    Git:分布式,无网络时也可以提交到本地版本库,待到有网络时再push到服务器.
    svn:非分布式,无网络不可以提交
    

Git衍生三种工具

Git:是一种版本控制系统,是一个命令,是一种工具。空文件夹不会被版本管理

  • GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台
  • GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发
  • Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台

Git工作流程

image

Git的工作流程就是三个区的来回切换:

  • 工作区(文件变红色):操作文件就能变红,比如增加内容等操作
  • 工作区提交到暂存区(文件变绿色):git add . 或文件名
  • 暂存区提交到版本库:git commit -m '注释',注释是必须加的
  • 版本库回退到工作区没有更改的时候:git reset --hard 版本号,版本号版本库有
    1)有红色信息(工作区有内容),就执行 add 
    2)全绿信息(内容全部在暂存区),才执行 commit
    3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
    

    总结:工作区管理的文件发生变化会变色,变为红色,通过命令git add .提交到暂存区变绿,暂存区通过git commit -m '注释'提交到版本库

Git常用命令

使用的时候切到该文件夹的路径下

  • 在仓库目录终端下 - 设置用户

    # 查看当前git下用户名
    git config --global --list
    
    # 全局用户
    >: git config --global user.name '用户名'
    >: git config --global user.email '用户邮箱'
    注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
    
    # 局部用户
    >: git config user.name '用户名'
    -- 用户名
    >: git config user.email '用户邮箱'
    -- 用户邮箱
    
    注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
    注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
    
  • 初始化仓库

    初始化会在当前文件夹下创建出一个.git的隐藏文件夹,git配置,版本信息在里面。比如使用我们创建的gittest文件夹来初始化。

    >: cd 目标目录
    >: git init 文件/文件夹
    
    初始化仓库,会在当前文件夹下创建出一个.git的隐藏文件夹,git配置,版本信息在里面
    
    image
  • 查看状态

    查看文件是处于工作区还是暂存区还是版本库

    • 命令:git status
      image
  • 工作区变化提交到暂存区

    • 命令:git add .
      image
  • 暂存区提交到版本库

    • 命令:git commit -m '注释'
      image
  • 查看版本库的版本信息

    • git log : 查看版本信息,显示详细信息,变化记录的少
    • git reflog :查看版本信息,显示简略信息,变化都会记录
      image
  • 回退到工作区的某个版本

    • 命令:git reset --hard 版本
    • 把暂存区拉回到工作区(绿变红)
      • 命令:git reset HEAD
  • 把工作区变化撤销

    • 命令:git checkout .

Git过滤文件

在仓库路径下(被git管理的文件夹),创建一个 .gitignore 的文件,在文件中写入忽略,文件与文件夹均可以被过滤

  • 文件过滤语法

    """ 过滤文件内容
    文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
    /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
    
    举例:
    a.txt:项目中所有a.txt文件和文件夹都会被过滤
    /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
    /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
    *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
    空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
    """
    
    image
  • 后端项目的.gitignore

    一般这些文件或文件夹需要被过滤掉

    • .idea
    • pycache
    • *.pyc
    • logs/*.log
    • scripts

分支操作

分支操作就是git 可以创建多条分支,创建完以后,在不通分支上提交版本,不同分支的版本相互不影响

image

  • 分支操作常用命令

    命令 说明
    git branch 分支名 创建分支
    git branch 查看分支
    git checkout 分支名 切换分支
    git checkout -b 分支名 创建并切换到分支
    git branch -d 分支名 删除分支
    git branch -a 查看所有分支
    git branch -r 查看远程分支
    git merge 分支名 合并分支
    • 注意:
      • 合并分支的时候是在master主干合并,比如把dev分支合并到master分支,切换到master分支,执行合并dev分支的命令
      • 分支合并可能会出冲突,比如master主干改了代码提交了,dev改了代码提交了,他们改的是同一个代码,合并就会出冲突
  • 实操

    git checkout -b dev
    touch dev.txt
    git add .
    git commit -m 'dev分支增加了dev.txt'
    git checkout master
    git merge dev
    ----------
    git checkout dev
    git add .
    git commit -m 'dev分dev.txt增加了一行'
    git checkout master
    git merge dev
    ------
    

远程仓库-gitee

"""
1)你作为项目仓库初始化人员:
    线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push)

2)你作为项目后期开发人员:(大部分都是公司已经有项目了,你基于这个项目继续开发)
    远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发
"""
  • 创建仓库

    image

    • 把本地代码提交到远程仓库
      创建空仓库,如上图
    • Git 全局设置
      git config --global user.name "用户名"
      git config --global user.email "邮箱"
      
    • 如果没有仓库,创建 git 仓库
      mkdir luffy_api
      cd luffy_api
      git init 
      touch README.md
      git add README.md
      git commit -m "first commit"
      git remote add origin https://gitee.com/li-gitte/luffy_api.git
      git push -u origin "master"
      
    • 如果有仓库了
      cd existing_git_repo
      git remote add origin https://gitee.com/li-gitte/luffy_api.git
      git push -u origin "master"
      
      # git push -u origin master 中-u的意思是,只要执行一遍这个命令,以后执行git push 就等同于git push origin maste,所有-u表示设置一个默认
      
  • remote源操作

    # 1 查看远程仓库
    git remote 
    # 2  添加远程仓库
    git remote add 起一个名字 远程仓库地址
    git remote add origin https://gitee.com/li-gitte/luffy_api.git  
    
    # 3 删除远程仓库
    git remote remove origin
    
    # 4  把本地仓库提交到远程仓库
    git push 远程仓库名字 分支名
    # 第一次:要输入用户名密码,只要输入一次,以后就记录到操作系统上了
    # windows:凭证管理,删除
    git push origin master  
    
    # 5 从远端仓库更新(拉取)代码
    git pull 远程仓库名字 分支名
    git pull origin master 
    
    
    # 常用的命令
    git add .
    git status
    git commit -m '注释'
    git pull origin master
    git push origin master
    
    • 凭据管理:控制面板\用户帐户\凭据管理器

      image
  • SSH 连接远程仓库

    https://gitee.com/help/articles/4181

    • 注意,如果连接方式改变,需要删除原理的远程仓库,再次添加换成新的连接方式
      
      git remote remove origin  # 删除
      git remote add origin git@gitee.com:li-gitte/luffy_api.git # 添加
      git push oringin master    # 提交
      
      ssh-keygen -t rsa  -C "xxx@outlook.com"
      -t:指定生成密钥的类型,默认使用SSH2d的rsa
      -f:指定生成密钥的文件名,默认id_rsa(私钥id_rsa,公钥id_rsa.pub)
      -P:提供旧密码,空表示不需要密码(-P ‘’)
      -N:提供新密码,空表示不需要密码(-N ‘’)
      -b:指定密钥长度(bits),RSA最小要求768位,默认是2048位;DSA密钥必须是1024位(FIPS 1862标准规定)
      -C:提供一个新注释
      -R hostname:从known_hosta(第一次连接时就会在家目录.ssh目录下生产该密钥文件)文件中删除所有属于hostname的密钥
      
  • 协同开发

    一般都是项目的管理员邀请你称为开发者或者观察者···

    image

    """
    1)作为开发者,第一次同步项目>: git clone 项目地址
    2)保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建)
    3)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互
    4)交互顺序:必须 先拉(pull)后提(push)
    5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互
    >: git checkout dev>: git add .
    >: git commit -m '本次提交的信息提示'
    >: git pull origin dev
    >: git push origin dev
    """
    

解决冲突

  • 代码冲突

    我们本地提交代码的时候需要将本地的代码更新到最新,所以需要先git pull ···,然后再git push···

    • 出现冲突
      image
    • 只要我们pull下来就会发现冲突,哪个文件冲突了文件名就会变红
      会把远端冲突的代码合并进来
      <<<<<<< HEAD  # 冲突开始
      ALAN is big    # 这里是我的代码
      =======
      ALAN is tobig    # 这里是远端代码
      >>>>>>> e2d67d7517d66d244f824a32e20d4dd43f4ffc4d # 冲突结束
      
    • 解决冲突
      # 查看代码,如果是同样的功能,选择保留同事的或自己的,如果是不同功能,两个代码都保留,如果真的要删同事的代码,交流抉择删除冲突代码,最终解决冲突
      git add .
      git commit -m '解决冲突'
      git pull origin master
      git push origin master
      
  • 合并分支冲突

    • 比如如果我们在主干master和开发分支dev增加或修改了相同的代码,这样再合并就会冲突
      git branch dev
      # 加入会冲突的代码
      git add .
      git commit -m '主分支加入了一行'
      git checkout dev
      git status
      # 加入会冲突的代码
      git add .
      git commit -m 'dev分支加入了一行'
      git checkout master
      git merge dev
      # 出现下面冲突
      
      <<<<<<< HEAD
      HammerZe is big
      =======
      HammerZe is very big
      >>>>>>> dev
      
    • 解决办法和上面的一样,如果代码功能相同选择性删除另外分支的代码,如果代码功能不相同都保留或优化
      # 手动解决冲突,再提交
      git add .
      git commit -m '分支合并冲突解决'
      
    • 线上分支合并
      • 提交PR
        image
        # 提交pull request---》提交pr---》提个合并分支请求
        
        # 提交pr---》你领导审核---》审核通过同意---》代码合并完成
        
        # 本地某个分支加入了代码,提交到远端
        
        # 在远端新建一个pull Request,选择要合并的两条分支---》提交了领导收到请求
        
        # 看你的代码---》没有问题---》同意---》合并到分支中去,完成线上分支合并
        

变基

https://www.cnblogs.com/liuqingzheng/p/15328319.html

搭建gitlab

https://zhuanlan.zhihu.com/p/413217715

posted @ 2022-10-15 14:40  爱learn  阅读(45)  评论(0编辑  收藏  举报