Git实用指令记录

news2024/11/27 22:24:29

config

  • 用例:对git最先要做的一个操作就是配置用户名和邮箱,否则无法commit
  • 查看所有可以config的条目,非常之多
    $ git config --list
    core.symlinks=false
    core.autocrlf=true
    core.fscache=true
    color.interactive=true
    color.ui=auto
    help.format=html
    diff.astextplain.textconv=astextplain
    rebase.autosquash=true
    filter.lfs.clean=git-lfs clean -- %f
    filter.lfs.smudge=git-lfs smudge -- %f
    filter.lfs.process=git-lfs filter-process
    filter.lfs.required=true
    credential.helper=!"D:/Software/PortableGit/mingw64/libexec/git-core/git-credential-store.exe"
    user.email=auzfhuang@mail.scut.edu.cn
    user.name=DEDSEC_Roger
    credential.helperselector.selected=store
    core.repositoryformatversion=0
    core.filemode=false
    core.bare=false
    core.logallrefupdates=true
    core.symlinks=false
    core.ignorecase=true
    remote.origin.url=https://<token>@github.com/DEDSEC-Roger/Speaker_Recognition.git
    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
    branch.main.remote=origin
    branch.main.merge=refs/heads/main
    
  • 但我们需要配置的并不多,只需要配置user.email和user.name即可,配置完后可以查看一下
    $ git config --global user.name DEDSEC_Roger
    $ git config --global user.email auzfhuang@mail.scut.edu.cn
    $ git config --global --list
    user.email=auzfhuang@mail.scut.edu.cn
    user.name=DEDSEC_Roger
    # credential.helperselector是我之前设置的
    credential.helperselector.selected=store
    

clone

  • 用例:从GitHub,clone某个仓库的某个分支(branch)到当前文件夹
  • 找到main分支,复制HTTPS的网址
    在这里插入图片描述
  • 在本地新建一个文件夹,然后运行
    $ git clone https://github.com/DEDSEC-Roger/Speaker_Recognition.git
    Cloning into 'Speaker_Recognition'...
    remote: Enumerating objects: 271, done.
    remote: Counting objects: 100% (11/11), done.
    remote: Compressing objects: 100% (10/10), done.
    remote: Total 271 (delta 5), reused 3 (delta 1), pack-reused 260
    Receiving objects: 100% (271/271), 32.10 MiB | 1.09 MiB/s, done.
    
    Resolving deltas: 100% (50/50), done.
    
  • 成功下载该仓库该分支的代码到本地了,是放在一个文件夹里面的,这个文件夹里除了.git文件夹,其他都称为工作区(working directory)
  • 注意:clone包含.git文件夹,如果我们已经做了很多修改,那么.git文件夹会非常大,因为保存了以前的commit,可以采用–depth=1来限制只提取最近一次commit,并采用–branch来指定分支
    $ git clone --depth=1 --branch=main https://github.com/DEDSEC-Roger/Speaker_Recognition.git
    正克隆到 'Speaker_Recognition'...
    remote: Enumerating objects: 77, done.
    remote: Counting objects: 100% (77/77), done.
    remote: Compressing objects: 100% (75/75), done.
    remote: Total 77 (delta 0), reused 65 (delta 0), pack-reused 0
    展开对象中: 100% (77/77), 完成.
    

status

  • 用例:监控本地分支(Your branch)、缓存区(暂存区)(stage、index)和工作区有无发生修改
  • 本地分支和缓存区都是隐藏的,在.git文件夹里,不影响工作区
  • 修改文件夹里的Test.py,然后运行
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   Test.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
  • 会告诉你哪些文件被修改了,哪些修改还没有被添加到缓存区

add

  • 用例:将工作区(下文省略)修改的文件,添加到缓存区,添加的是完整路径,因此添加单个文件会创建该文件的整个目录,因此add文件即可,不用担心目录不完整
  • add只会添加工作区发生修改的文件,未修改的文件,即使add,也不会被放到缓存区
  • add添加的语法有很多,如下
    # 当前目录下所有文件
    git add .
    
    # 当前目录下单个文件
    git add filename
    
    # 当前目录下多个文件
    git add filename1 filename2 filename3
    
    # 当前目录下所有.py文件
    # 一个*表示匹配任意数量字符
    # 一个?表示匹配任一(包括无)字符
    # .符号也会被匹配
    git add *.py
    
    # 当前目录下所有.pyc, .pyo, .pyd文件
    # 一个[]表示匹配括号内的任一字符,也可以在括号内加连接符,如[0-9]匹配0至9的数
    git add *.py[cod]
    
    # 当前目录下除.py文件外的所有文件
    # 一个!在前表示反转规则
    git add !*.py
    
    # 整个文件夹,必须是非空文件夹
    git add folder
    
    # folder文件夹下,以及子文件夹下的所有文件
    git add folder/*
    
    # folder文件夹下,以及子文件夹下的所有.py文件
    # 两个*表示匹配任意子文件夹
    git add folder/**/*.py
    
  • 比如说,在Profile文件夹下,粘贴了一个以Delete结尾的文件夹,这个文件夹里有.txt文件,现在回到Speaker_Recognition文件夹,要把.txt文件,添加到缓存区
    $ git add Profile/*Delete/*.txt
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            new file:   Profile/ECAPA_TDNN_GLOB_c512-ASTP-emb192-ArcMargin-LM_Delete/dummy.txt
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   Test.py
    

commit

  • 用例:把缓存区的文件都添加到本地分支
  • commit必须用-m写信息,否则无法commit,如果不写信息就按了回车,会进入vim强行让你写,可以按下esc,然后输入:q,最后按下回车退出
  • commit后status查看状态,会提示说本地分支多了一个commit
    $ git commit -m "add files"
    [main 487222b] add files
     1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 Profile/ECAPA_TDNN_GLOB_c512-ASTP-emb192-ArcMargin-LM_Delete/dummy.txt
    $ git status
    On branch main
    Your branch is ahead of 'origin/main' by 1 commit.
      (use "git push" to publish your local commits)
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   Test.py
    
    no changes added to commit (use "git add" and/or "git commit -a") 
    

restore

  • 用例:进行工作区和缓存区的恢复操作
  • 将工作区已修改的文件恢复到修改之前
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   Test.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    $ git restore .\Test.py
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    nothing to commit, working tree clean
    
  • 将缓存区的文件恢复到工作区,工作区文件不变,相当于撤销add操作
    $ git add .\Test.py
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            modified:   Test.py
    $ git restore --staged .\Test.py
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   Test.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

rm

  • 用例:可用于撤销add,本质上是将指定的文件变成Untracked状态,所谓Untracked状态的文件,就是在clone到本地时,分支中没有的文件。建议用git restore --staged filename代替
  • 操作后会显示delete了该文件,然后我们再把该文件改好,再次add该文件,就能把正确的更新放到缓存区
    git add .\Test.py
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            modified:   Test.py
    $ git rm --cached .\Test.py
    rm 'Test.py'
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            deleted:    Test.py
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            Test.py
    $ git add .\Test.py
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            modified:   Test.py
    

reset

  • 用例:如果后续又commit了一些文件,但是感觉操作错了,可以用reset
    # --soft表示退回本地分支的commit到缓存区
    # HEAD后面跟几个~就是最近的几次commit
    # HEAD后面也可直接跟~数字,比如HEAD~~等价于HEAD~2
    $ git reset --soft HEAD~
    
    # --mixed表示退回本地分支的commit到缓存区,再把缓存区的添加全部去除
    $ git reset --mixed HEAD~
    
    # 慎用!--hard表示退回本地分支的commit到缓存区,再把缓存区的添加去掉
    # 再把工作区的修改也恢复,工作区的恢复是全部恢复
    $ git reset --hard HEAD~
    
  • 如果你没有commit任何东西,不要使用reset,因为这样会回退本地分支,这会导致本地分支与远程分支发生差异Your branch and 'origin/main' have diverged, and have 1 and 2 different commits each, respectively. (use "git pull" to merge the remote branch into yours)
  • 发生差异后,会导致无法push本地分支到远程分支,需要先pull远程分支

remote

  • 用例:查看进行pull和push操作的远程分支的信息,由于GitHub要求token才能push分支,所以还需要进行仓库的地址设定
    # 指定仓库名origin,查看该仓库的信息
    # 直接git remote,查看连接了哪些仓库
    $ git remote show origin
    * remote origin
      Fetch URL: https://github.com/DEDSEC-Roger/Speaker_Recognition.git
      Push  URL: https://github.com/DEDSEC-Roger/Speaker_Recognition.git
      HEAD branch: main
      Remote branch:
        main tracked
      Local branch configured for 'git pull':
        main merges with remote main
      Local ref configured for 'git push':
        main pushes to main (local out of date)
    
  • 先去GitHub申请token,官方教程在此,拿到token后,一定要复制保存到本地
  • 然后设置远程仓库的地址,必须先设置这个带有token的地址,才能在GitHub顺利地push
    $ git remote set-url origin https://<token>@github.com/DEDSEC-Roger/Speaker_Recognition.git
    $ git remote show origin
    * remote origin
      Fetch URL: https://<token>@github.com/DEDSEC-Roger/Speaker_Recognition.git
      Push  URL: https://<token>@github.com/DEDSEC-Roger/Speaker_Recognition.git
      HEAD branch: main
      Remote branch:
        main tracked
      Local branch configured for 'git pull':
        main merges with remote main
      Local ref configured for 'git push':
        main pushes to main (local out of date)
    

pull

  • 用例:拉取远程分支的更新,使本地分支与远程分支同步up to date
    # pull的对象是某个仓库的某个分支,加上仓库名origin和分支名main更严谨一些
    $ git pull origin main
    remote: Enumerating objects: 7, done.
    remote: Counting objects: 100% (7/7), done.
    remote: Compressing objects: 100% (4/4), done.
    remote: Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (5/5), 1.27 KiB | 81.00 KiB/s, done.
    From https://github.com/DEDSEC-Roger/Speaker_Recognition
       b41da3b..3149ba8  main       -> origin/main
    Updating b41da3b..3149ba8
    Fast-forward
     ...CAPA_TDNN_GLOB_c512-ASTP-emb192-ArcMargin-LM.onnx | Bin 24861931 -> 0 bytes
     Resource/origin.jpg                                  | Bin 1852464 -> 0 bytes
     2 files changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 Model/ECAPA_TDNN_GLOB_c512-ASTP-emb192-ArcMargin-LM.onnx
     delete mode 100644 Resource/origin.jpg
    # 此时再查看状态,本地分支的修改还在,而且新增的文件处于Untracked状态
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   Test.py
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            Profile/ECAPA_TDNN_GLOB_c512-ASTP-emb192-ArcMargin-LM_Delete/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

push

  • 用例:将本地分支push到远程分支,更新本地分支的修改到远程分支
  • 要push前,可以git remote show对应仓库,如果仓库连不上,git remote show会失败,等成功了,再push,防止中途出问题
    $ git remote show origin
    * remote origin
      Fetch URL: https://<token>@github.com/DEDSEC-Roger/Speaker_Recognition.git
      Push  URL: https://<token>@github.com/DEDSEC-Roger/Speaker_Recognition.git
      HEAD branch: main
      Remote branch:
        main tracked
      Local branch configured for 'git pull':
        main merges with remote main
      Local ref configured for 'git push':
        main pushes to main (fast-forwardable)
    # push的对象是某个仓库的某个分支,加上仓库名origin和分支名main更严谨一些
    $ git push origin main
    Enumerating objects: 7, done.
    Counting objects: 100% (7/7), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 380 bytes | 380.00 KiB/s, done.
    Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
    remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
    To https://github.com/DEDSEC-Roger/Speaker_Recognition.git
       af33ce1..251eb2b  main -> main
    

.gitignore

  • 用例:指定哪些文件被忽略,只对Untracked状态的文件有用
  • .gitignore不是指令,而是一个文件,在创建GitHub仓库之初,就可以勾选创建.gitignore文件。之后再创建也是可以的,但是创建.gitignore文件前就存在的文件,都处于Tracked状态
  • 不论是在本地分支还是远程分支,不论.gitignore有无指定忽略,Tracked状态的文件发生修改后,都会被git检索出来,参与同步
  • .gitignore文件的语法,和add类似,不再赘述,给出一个小例子
    # Customization
    Audio/**/*.wav
    Model/**/*.onnx
    Profile/**/*.npy
    
    # Byte-compiled / optimized / DLL files
    __pycache__/
    *.py[cod]
    *$py.class
    
    # C extensions
    *.so
    

rm另一用法

使用前请备份要被删除的文件

  • 用例:将全部文件都变成Untracked状态(.gitignore文件创建前的文件也变成Untracked状态了),然后将全部文件add回去,再commit、push,这样能将.gitignore指定忽略的文件从远程分支全部删除,不被忽略的文件保留
  • 这样做就像是在创建GitHub仓库之初,就创建了.gitignore文件,git clone也不会下载Untracked状态的文件
    $ git rm -r --cached .
    rm '.gitignore'
    rm '.vscode/launch.json'
    rm 'Audio.py'
    rm 'Audio/hzf_certain.wav'
    rm 'Audio/hzf_certain_2.wav'
    ...
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            deleted:    .gitignore
            deleted:    .vscode/launch.json
            deleted:    Audio.py
            deleted:    Audio/hzf_certain.wav
            deleted:    Audio/hzf_certain_2.wav
            ...
    $ git add .
    $ git status
    On branch main
    Your branch is up to date with 'origin/main'.
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            modified:   Audio.py
            deleted:    Audio/hzf_certain.wav
            deleted:    Audio/hzf_certain_2.wav
            deleted:    Audio/hzf_certain_3.wav
            deleted:    Audio/hzf_certain_4.wav
            deleted:    Audio/hzf_certain_5.wav
            ...
    $ git commit -m "completely update .gitignore"
    [main fa38978] completely update .gitignore
     62 files changed, 1673 insertions(+), 1673 deletions(-)
     delete mode 100644 Audio/hzf_certain.wav
     delete mode 100644 Audio/hzf_certain_2.wav
     delete mode 100644 Audio/hzf_certain_3.wav
     delete mode 100644 Audio/hzf_certain_4.wav
     delete mode 100644 Audio/hzf_certain_5.wav
     ...
    $ git push origin main
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java多重选择结构,超详细整理,适合新手入门

目录 一、什么是多重选择结构&#xff1f; 二、if 语句的语法 1、什么是嵌套if语句&#xff1f; 2、if 语句循环基本用法&#xff1a; 3、案例&#xff1a; 二、if...else多重选择结构语法 1、什么是if-else语句&#xff1f; 2、if...else 循环基本用法 3、案例&#…

尚硅谷Git课程 | Git(idea版本)笔记

尚硅谷Git课程 | Git(idea版本) 笔记 文章目录尚硅谷Git课程 | Git(idea版本) 笔记工作机制代码托管中心git安装(看视频)Git常用命令设置用户签名初始化本地库查看状态添加暂存区提交本地库查看git历史版本修改文件版本穿梭Git分支操作分支的好处查看分支创建分支切换分支分支合…

安全渗透环境准备(工具下载)

数据来源 01 一些VM虚拟机的安装 攻击机kali&#xff1a; kali官网 渗透测试工具Kali Linux安装与使用 kali汉化 虚拟机网络建议设置成NAT模式&#xff0c;桥接有时不稳定。 靶机OWASP_Broken_Web_Apps&#xff1a; 迅雷下载 网盘下载 安装教程 开机之后需要登录&am…

UE4 使用控件蓝图的动画功能实现UI的淡入淡出

效果&#xff1a;步骤&#xff1a;首先PS一张背景纯黑&#xff0c;边缘有羽化效果的图片&#xff1a;新建一个控件蓝图&#xff0c;创建一个图像和按钮控件&#xff0c;控件的初始位置如下所示&#xff0c;设置图像一开始为完全透明新建两个动画&#xff0c;分别命名为“向左移…

高可用架构:异地多活

前言&#xff1a;多「活」、多「备」是两个相对的概念&#xff0c;设计和实现的难度相差很大&#xff0c;不要搞混了 1.为什么要做多活 在一些极端场景下&#xff0c;有可能所有服务器都出现故障&#xff0c;例如机房断电、机房火灾、地震等这些不卡抗拒因素会导致系统所有服务…

多线程之死锁,哲学家就餐问题的实现

1.死锁是什么 死锁是这样一种情形&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 2.哲学家就餐问题 有五个哲学家&#xff0c;他们的生活方式是交替地进行思考和进餐…

网际协议IP

网际协议IP 文章目录网际协议IP[toc]虚拟互联网IP地址及其表示方法分类IP地址(两级)无分类编址 CIDR网路前缀地址块地址掩码子网划分&#xff08;三级IP地址&#xff09;IP地址和MAC地址地址解析协议ARPIP数据报的格式IP数据报首部的固定部分中的各字段IP数据报首部的可变部分分…

REDIS-雪崩、击穿、穿透

直接发车&#x1f697; 一.雪崩 1.触发原因 A.大量缓存数据在同一时间过期(失效) B.redis故障宕机 上述均导致全部请求去访问数据库&#xff0c;导致DB压力骤增&#xff0c;严重则导致数据库宕机/系统宕机 2.应对策略 不同触发原因&#xff0c;应对策略也不一致 应对A&a…

C# SolidWorks二次开发 API-命令标签页的切换与按钮错乱问题

这是一个网友咨询的问题&#xff0c;说他想控制默认打开文件之后solidworks上方工具栏的当前激活标签页。 之前我们提到过,制作Solidworks的插件也会在上面增加一个标签页&#xff0c;用来放自己开发的命令&#xff0c;经常开发的人肯定会遇到有时候更新版本&#xff0c;或者标…

奥威软件宏昊化工启动BI项目,打造智能制造标杆

近日&#xff0c;中国纺织行业领先企业宏昊化工有限公司成功启动了与奥威签订的BI项目&#xff0c;期望通过BI的建立进一步提升企业数字化经营能力和核心竞争力。 奥威bi数据分析软件 在全球经济形势不明朗&#xff0c;国内外市场竞争加剧叠加疫情反复的情况下&#xff0c;化工…

初学vector

目录 string的收尾 拷贝构造的现代写法&#xff1a; 浅拷贝&#xff1a; 拷贝构造的现代写法&#xff1a; swap函数&#xff1a; 内置类型有拷贝构造和赋值重载吗&#xff1f; 完善拷贝构造的现代写法&#xff1a; 赋值重载的现代写法&#xff1a; 更精简的现代写法&…

1.5配置NBMA和P2MP网络类型

1.3.3实验5:配置NBMA和P2MP网络类型 1. 实验需求 控制OSPF DR的选举修改OSPF的网络类型2. 实验拓扑 配置NBMA和P2MP网络类型实验拓扑如图1-13所示。 图1-13 配置NBMA和P2MP网络类型 3. 实验步骤 帧中继的配置如图1-14和图1-15所示

软件测试——测试用例之场景法

一、场景法的应用场合 场景法主要用于测试软件的业务流程和业务逻辑。场景法是基于软件业务的测试方法。在场景法中测试人员把自己当成最终用户&#xff0c;尽可能真实的模拟用户在使用此软件的操作情景&#xff1a; 重点模拟两类操作&#xff1a; 1&#xff09;模拟用户正确…

仓库拣货标签应用案例

使用场景&#xff1a;富士康成都仓库 解决问题&#xff1a;仓库亮灯拣选&#xff0c; 提高作业效率和物料明晰展示仓库亮灯拣选使用场景&#xff1a;京东仓库 解决问题&#xff1a;播种墙分拣&#xff0c;合单拣货完成后按订单播种播种墙分拣使用场景&#xff1a;和尔泰智能料…

Ubuntu 20中安装SNAP

Ubuntu 20中安装SNAP0 前言1 下载SNAP安装包2 安装SNAP详细步骤0 前言 姊妹篇《Ubuntu 20中安装snaphu》 SNAP是欧空局领导开发的开源的遥感数据处理软件&#xff0c;主要支持欧空局的数据&#xff0c;如sentinel-系列等。SNAP下载官网&#xff1a;https://step.esa.int/main…

算法训练营 day46 动态规划 最后一块石头的重量 II 目标和 一和零

算法训练营 day46 动态规划 最后一块石头的重量 II 目标和 一和零 最后一块石头的重量 II 1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xf…

百度百科创建词条教程合集分享,赶紧收藏起来

每一个企业、品牌、人物、产品想要提升自己的知名度&#xff0c;都要创建一个属于自己的百度百科词条&#xff0c;互联网时代&#xff0c;百度搜索引擎的地位是不可撼动的&#xff0c;每天都有上亿的用户在百度上搜索相关内容&#xff0c;百度百科词条在网络营销中占据着举足轻…

Oracle对象——视图之简单视图与视图约束

文章目录什么是视图为什么会使用视图视图语法案例简单视图的创建更改数据基表&#xff0c;视图数据会变化么&#xff1f;更改视图数据&#xff0c;基表数据会变更么&#xff1f;带检查约束的视图结论创建只读视图&#xff08;MySQL不支持&#xff09;总结什么是视图 视图是一种…

【项目精选】高校固定资产管理系统(论文+视频+源码)

点击下载源码 随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求&#xff0c;利用计算机实现设备及资产的信息化管理已经显得非常重要。 固定资产管理系统是一个单位不可缺少的部分。但一直以来人们使用传统的人工方式管理固定资产的信息&#xff0c;这种…

C++STL剖析(六)—— set和multiset的概念和使用

文章目录&#x1f31f; 前言&#x1f351; 树型结构和哈希结构&#x1f351; 键值对1. set的介绍和使用&#x1f351; set的模板参数列表&#x1f351; set的构造&#x1f351; set的使用&#x1f345; insert&#x1f345; find&#x1f345; erase&#x1f345; swap&#x1…