一文弄懂git原理及相关操作

news2024/12/22 22:20:47

文章目录

  • 前言
  • Git 是什么?
  • Git 与 SVN 的区别
  • Git 快速入门
    • Git 相关网站
    • Git 工作流程
    • Git 工作空间
    • Git 文件状态
  • Git 安装
    • 在 Linux 上安装
    • 在 Mac 上安装
    • 在 Windows 上安装
    • 从源代码安装
  • Git 配置
  • Git 常用命令
    • git init
    • git clone
    • git add
    • git commit
    • git branch
    • git tag
    • 查看信息
    • 远程同步
    • 代码回滚


前言

对于一个刚入行的程序员或者是大学生,我建议大家还是好好的把git学学,因为在现在大部分企业代码的管理工具都是使用Git,其实Git很简单,无非就是一些命令,我们平常多去用它,就能熟能生巧。我觉得你们可以自己去创建Gitee和GitHub账号,把自己的代码托管上去,进行管理。下面就是关于Git的一些总结,觉得有用的建议收藏。

Git 是什么?

  • Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 的区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。
Git 与 SVN 区别点:

  1. Git 是分布式的,SVN不是:这是 Git 和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  2. Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  3. Git 分支和SVN的分支不同:分支在 SVN 中一点不特别,就是版本库中的另外的一个目录。
  4. Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  5. Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git 快速入门

Git 相关网站

  • Git 官网:git-scm.com
  • Git 完整命令手册:git-scm.com/docs
  • Git 命令手册(pdf版):github-git-cheat-sheet.pdf
  • Git 简明指南:git-guide

Git 工作流程

Git 一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

下图展示了 Git 的工作流程:

Git 工作空间

Git 工作空间分为:

  • 工作区(Working Directory):在电脑里能看到的目录。
  • 版本库(Repository):工作区有一个隐藏目录 .git,这个目录不算工作区,而是 Git 的版本库。
  • 暂存区(Stage/Index):一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:


图中左侧为工作区,右侧为版本库。在版本库中标记为 index 的区域是暂存区(stage/index),标记为 master 的是 master 分支所代表的目录树。此时 HEAD 实际是指向 master 分支的一个“游标”,所以图示的命令中出现 HEAD 的地方可以用 master 来替换。图中的 objects 标识的区域为 git 的对象库,实际位于 .git/objects 目录下。

  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树会被更新,同时工作区修改(或新增)的文件内容会被写入到对象库中的一个新的对象中,而该对象的id被记录在暂存区的文件索引中。
  • 当执行提交操作 git commit 时,暂存区的目录树会写到版本库(对象库)中,master 分支会做相应的更新,即 master 最新指向的目录树就是提交时原暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,会被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout .git checkout -- 命令时,会用暂存区全部的文件或指定的文件替换工作区的文件。这个操作很危险,会清楚工作区中未添加到暂存区的改动。
  • 当执行 git checkout HEAD .git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或部分文件替换暂存区和工作区中的文件。这个命令也是极度危险的。因为不但会清楚工作区中未提交的改动,也会清楚暂存区中未提交的改动。

Git 文件状态

Git 有三种状态,你的文件可能处于其中之一:

  • 已提交(committed):表示数据已经安全的保存在本地数据库中。
  • 已修改(modified):表示修改了文件,但还没保存到数据库中。
  • 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

Git 安装

在使用 Git 前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:git-scm.com/downloads

在 Linux 上安装

如果要在 Linux 上用二进制安装程序来安装 Git,可以使用发行版包含的基础软件包管理工具来安装。如果以 Fedora 上为例,可以使用 yum

$ sudo yum install git

如果在基于 Debian 的发行版上,请尝试用 apt-get

$ sudo apt-get install git

Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 git-scm.com/download/linux。

在 Mac 上安装

在 Mac 上安装 Git 有多种方式。最简单的方法是安装 Xcode Command Line Tools。Mavericks 10.9 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。如果没有安装过命令行开发者工具,将会提示你安装。

如果想安装更新的版本,可以使用二进制安装程序。官方维护的 OSX Git 安装程序可以在 Git 官方网站下载,网址为 git-scm.com/download/mac。

也可以将 Git OS X 安装程序作为 GitHub for Mac 的一部分来安装。它们的图形化 Git 工具有一个安装命令行工具的选项。可以从 GitHub for Mac 网站下载该工具,网址为 mac.github.com。

在 Windows 上安装

在 Windows 上安装 Git 也有几种安装方法。官方版本可以在 Git 官方网站下载。打开 git-scm.com/download/win,下载会自动开始。要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 msysgit.github.io。

另一个简单的方法是安装 GitHub for Windows。该安装程序包含图形化和命令行版本的 Git。它也能支持 Powershell,提供了稳定的凭证缓存和健全的 CRLF 设置。可以在 GitHub for Windows 网站下载,网址为 windows.github.com。

从源代码安装

有人觉得从源码安装 Git 更实用,因为可以得到最新的版本。二进制安装程序倾向于有一些滞后,当然近几年 Git 已经成熟,这个差异不再显著。

如果想要从源码安装 Git,需要安装 Git 依赖的库:curlzlibopensslexpat,还有 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 网站获取,网址为 www.kernel.org/pub/software/scm/git,或从 GitHub 网站上的镜像来获得,网址为 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

Git 配置

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

配置文件的存储位置

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Users$USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

查看 git 的版本信息

查看git的版本信息:

git --version

配置用户信息

当Git安装完成后首先要做的事情是配置个人的用户名称和电子邮件地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name 'user_name'
git config --global user.email 'user_email'

具体可参考 Git Configuration

配置文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置:

git config --global core.editor emacs

配置差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

git config --global merge.tool vimdiff

查看配置信息

要检查已有的配置信息,可以使用 git config –list 命令:

git config --list

有时候会看到重复的变量名,这是因为Git从不同的的配置文件中(例如:/etc/gitconfig以及~/.gitconfig)读取相同的变量名。在这种情况下,对每个唯一的变量名,Git使用最后的那个值。

也可以直接查阅某个环境变量的设定,使用如下命令 git config {key}:

git config user.name

也可以直接查看某个配置文件的配置信息:

git config --local  --list
or
git config --global  --list
or
git config --system --list

上面的三个命令分别为:查看当前仓库配置信息、查看当前用户(global)配置信息、查看系统配置信息。

git 配置文件

  1. 系统级文件 $(prefix)/etc/gitconfig,本文即 /usr/etc/gitconfig 文件。
    git config –system 用来指定读写系统级文件。初始不存在,若不存在则无影响。
  2. 用户级文件 ~/.gitconfig
    git config –global 指定只操作用户级文件。初始不存在,若不存在则无影响。
  3. Repository 级文件 .git/config
    git config –local 对写操作,则只写入 Repository 级文件(默认行为);对读操作,则只从 Repository 级文件读。
  4. git config –file config-file 则指定 config-file。

清除认证信息

git config --global --unset credential.helper
or
git config --system --unset credential.helper

上面的命令可以解决 remote: HTTP Basic: Access denied 错误。

保存认证信息

git config --local credential.helper store
or
git config --system credential.helper store

上面的命令可以解决每次提交都要输入用户名和密码的问题。具体可参考 Git Credential Storage

Git 常用命令

git init

git init 的命令格式为:

git init [-q | --quiet] [--bare] [--template=]
      [--separate-git-dir ]
      [--shared[=]] [directory]

第一步:创建一个代码仓库非常简单,首先,选择一个合适的地方,创建一个空目录:

mkdir repository
cd repository
pwd

mkdir命令用于创建目录,cd命令用于进入目录,pwd命令用于显示当前目录。
第二步,通过git init命令把这个目录变成Git可以管理的仓库或者通过git init <directory>命令直接指定一个目录作为Gi仓库:

git init

Git瞬间就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

git clone

git clone 的命令格式为:

git clone [--template=]
      [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
      [-o ] [-b ] [-u ] [--reference ]
      [--dissociate] [--separate-git-dir ]
      [--depth ] [--[no-]single-branch]
      [--recurse-submodules] [--[no-]shallow-submodules]
      [--jobs ] [--]  []

克隆到当前目录,可以使用以下命令格式:

git clone 

参数说明:

  • repository:Git 仓库。
  • directory:本地目录。

git add

git add 的命令格式为:

git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
      [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
      [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing]
      [--chmod=(+|-)x] [--] []

git add命令可以在提交之前多次执行。它只在运行git add命令时添加指定文件的内容; 如果希望随后的更改包含在下一个提交中,那么必须再次运行git add将新的内容添加到索引。默认情况下,git add命令不会添加忽略的文件。

基本用法

git add [path]

通常是通过git add [path]的形式把[path]添加到索引库中,[path]可以是文件也可以是目录。
git不仅能判断出[path]中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。

常用命令

git add .               # 将所有修改添加到暂存区
git add *Presenter      # 将以Presenter结尾的文件的所有修改添加到暂存区
git add Base*           # 将所有以Base开头的文件的修改添加到暂存区(例如:BaseActivity.java,BaseFragment.java)
git add Model?          # 将以Model开头且后面只有一位的文件的修改添加到暂存区(例如:Model1.java,ModelA.java)
git add model/*.java    # 将model目录及其子目录下所有 *.java 文件的修改添加到暂存区

git commit

git commit 的命令格式为:

git commit [-a | --interactive | --patch] [-s] [-v] [-u] [--amend]
       [--dry-run] [(-c | -C | --fixup | --squash) ]
       [-F  | -m ] [--reset-author] [--allow-empty]
       [--allow-empty-message] [--no-verify] [-e] [--author=]
       [--date=] [--cleanup=] [--[no-]status]
       [-i | -o] [-S[]] [--] []

git commit命令将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。

提交暂存区到本地仓库区

git commit -m [message]

将未添加到暂存区的文件,同时提交到本地仓库区

git commit –am 
git commit –a –m 

提交暂存区的指定文件到仓库区

git commit   ... -m 

提交时显示所有diff信息

git commit -v

修改最近一次提交

git commit --amend

修改最近一次提交,并改写上一次commit的提交信息

git commit --amend -m 

git branch

git branch 的命令格式为:

git branch [--color[=] | --no-color] [-r | -a]
    [--list] [-v [--abbrev= | --no-abbrev]]
    [--column[=] | --no-column] [--sort=]
    [(--merged | --no-merged) []]
    [--contains []]
    [--points-at 

git branch命令用于列出,创建或删除分支。

列出所有本地分支

git branch

列出所有远程分支

git branch -r

列出所有本地分支和远程分支

git branch -a

新建一个分支,但依然停留在当前分支

git branch 

新建一个分支,并切换到该分支

git checkout -b 

git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:

git branch 
git checkout 

新建一个分支,指向指定 commit

git branch  

新建一个分支,与指定的远程分支建立追踪关系

git branch --track  

切换到指定分支,并更新工作区

git checkout 

切换到上一个分支

git checkout -

建立追踪关系,在现有分支与指定的远程分支之间

git branch --set-upstream  

合并指定分支到当前分支

git merge 

选择一个 commit,合并进当前分支

git cherry-pick 

删除本地分支

git branch -d 

删除远程分支

git push origin :git push origin --delete 

git tag

git tag 的命令格式为:

git tag [-a | -s | -u ] [-f] [-m  | -F ]
     [ | 

git tag命令用于创建,列出,删除或验证使用GPG签名的标签对象。

列出所有标签

git tag

新建一个标签在当前 commit

git tag 

新建一个标签在指定 commit

git tag  

新建一个带标签信息的标签在当前 commit

git tag -a  -m [message]

删除本地标签

git tag -d 

删除远程标签

方法一:直接删除远程标签:

git push origin --delete tag 

方法二:先删除本地标签,再删除远程标签:

git tag -d 
git push origin :refs/tags/

查看标签信息

git show 

推送某个标签到远程

git push origin 

一次性推送所有尚未推送到远程的本地标签

git push origin --tags

查看信息

查看Git版本号

git --version

显示有变更的文件

git status

显示当前分支的提交历史记录

下表介绍了一些 git log 命令支持的一些常用的选项及其释义:

选项说明
-p按补丁格式显示每个更新之间的差异。
–word-diff按 word diff 格式显示差异。
–stat显示每次更新的文件修改统计信息。
–shortstat只显示 –stat 中最后的行数修改添加移除统计。
–name-only仅在提交信息后显示已修改的文件清单。
–name-status显示新增、修改、删除的文件清单。
–abbrev-commit仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
–relative-date使用较短的相对时间显示(比如,“2 weeks ago”)。
–graph显示 ASCII 图形表示的分支合并历史。
–pretty使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
–oneline–pretty=oneline –abbrev-commit 的简化用法。

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。可以看到,每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。

git log

git log 有许多选项可以帮助你搜寻感兴趣的提交,接下来我们介绍些最常用的。

我们常用 -p 选项展开显示每次提交的内容差异,用 -<n> 则仅显示最近的两次更新:

git log -p -2

该选项除了显示基本信息之外,还在附带了每次 commit 的变化。当进行代码审查,或者快速浏览某个搭档提交的 commit 的变化的时候,这个参数就非常有用了。

--stat,仅显示简要的增改行数统计。

git log --stat

--pretty 选项,可以指定使用完全不同于默认格式的方式展示提交历史。比如用 oneline 将每个提交放在一行显示,这在提交数很大时非常有用。另外还有 shortfullfuller 可以用,展示的信息或多或少有些不同,后面也可以指定提交历史的次数(比如:-<n> ),具体展示效果请自己动手实践一下。

git log --pretty=oneline

format选项,可以定制要显示的记录格式,这样的输出便于后期编程提取分析。

git log --pretty=format:"%h - %an, %ar : %s"

下表列出了常用的格式占位符写法及其代表的意义:

选项说明
%H提交对象(commit)的完整哈希字串
%h提交对象的简短哈希字串
%T树对象(tree)的完整哈希字串
%t树对象的简短哈希字串
%P父对象(parent)的完整哈希字串
%p父对象的简短哈希字串
%an作者(author)的名字
%ae作者的电子邮件地址
%ad作者修订日期(–date= 制定的格式)
%aD作者修订日期(RFC2822格式)
%ar作者修订日期(相对格式,如:1 day ago)
%at作者修订日期(UNIX timestamp)
%ai作者修订日期(ISO 8601 格式)
%cn提交者(committer)的名字
%ce提交者的电子邮件地址
%cd提交日期 (–date= 制定的格式)
%cD提交日期(RFC2822格式)
%cr提交日期(相对格式,如:1 day ago)
%ct提交日期(UNIX timestamp)
%ci提交日期(ISO 8601 格式)
%s提交说明

除了定制输出格式的选项之外,git log 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。用 –since 和 –until选项显示按照时间作限制的提交,比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。用 –author 选项显示指定作者的提交,用 –grep 选项搜索提交说明中的关键字。
下表还列出了其他常用的类似选项:

选项说明
-(n)仅显示最近的 n 条提交
–since, –after仅显示指定时间之后的提交
–until, –before仅显示指定时间之前的提交
–author仅显示指定作者相关的提交
–committer仅显示指定提交者相关的提交

远程同步

显示所有远程仓库

git remote -v

获取某个远程主机的全部更新

git fetch 

获取某个远程主机的某个分支的更新

git fetch  

比如,取回origin主机的master分支的更新:

git fetch origin master

显示某个远程仓库的信息

git remote show 

获取某个远程主机的某个分支的更新与当前分支合并

git pull  

比如,要取回origin主机的dev分支,与当前分支合并:

git pull origin dev

上面命令表示,取回origin/dev分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。

git fetch origin
git merge origin/dev

获取某个远程主机的某个分支的更新与本地的某个分支合并

git pull  :

比如,要取回origin主机的dev分支,与本地的master分支合并:

git pull origin dev:master

将本地的当前分支自动与对应的远程主机”追踪分支”进行合并

git pull 

将当前分支推送到远程主机的对应分支

git push

将当前分支到远程主机的对应分支

git push 

将本地指定分支到远程主机的对应分支

git push  

强行推送当前分支到远程主机的对应分支(忽略冲突)

git push  --force

推送所有分支到远程仓库

git push  --all

代码回滚

恢复暂存区的指定文件到工作区

git checkout 

恢复某个commit的指定文件到暂存区和工作区

git checkout  

恢复暂存区的所有文件到工作区

git checkout .

回滚添加操作

git reset

回滚最近一次提交

git reset --soft HEAD^

永久删除最后几个提交

git reset --hard HEAD~3

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

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

相关文章

字符设备驱动内部实现原理解析

字符设备驱动内部实现原理解析 一. 字符设备驱动对象内部实现原理解析二. 字符设备驱动的注册流程三. 代码示例 一. 字符设备驱动对象内部实现原理解析 用户层&#xff1a; ​ 当用户打开&#xff08;open&#xff09;一个文件时,会生成一个文件描述符表 内核层&#xff1a; 内…

极致呈现系列之:Echarts散点图的数据魔力

目录 什么是散点图散点图的特点及应用场景散点图的特点散点图的应用场景 Echarts中散点图的常用属性Vue3中创建散点图美化散点图样式 在数据分析和可视化过程中&#xff0c;散点图是一种常见且重要的工具。散点图可以帮助我们直观地观察两个变量之间的关系&#xff0c;并发现其…

MySQL实战解析底层---“order by“是怎么工作的

目录 前言 全字段排序 rowid排序 全字段排序 VS rowid排序 前言 在开发应用的时候&#xff0c;一定会经常碰到需要根据指定的字段排序来显示结果的需求以举例市民表为例&#xff0c;假设你要查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前1000个人的姓…

20230622作业:字符设备驱动内部实现原理及流程

1.1字符设备驱动内部实现原理 1>用户打开设备open("~/dev/mycdev",O_RDWR);("路径"&#xff0c;打开方式)2>在内核的虚拟文件系统层会同步执行sys_open函数,实现如下操作3>根据open函数的路径&#xff0c;找到struct inode结构体4>在struct…

深入理解深度学习——GPT(Generative Pre-Trained Transformer):GPT-3与Few-shot Learning

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; GPT&#xff08;Generative Pre-Trained Transformer&#xff09;&#xff1a;基础知识 GPT&#xff08;Generative Pre-Trained Transformer&#xff09;&#xff1a;在不同任务中使用GPT GPT&#x…

单点登录设计方案介绍及用OAuth完整实现一个单点登录系统

文章目录 一、单点登录系统的意义1.1 提高用户体验1.2 提高安全性1.3 降低开发成本1.4 提高操作效率 二、单点登录的实现方式2.1 基于共享cookie的方式2.2 基于代理服务器的方式2.3 基于SAML协议的方式2.4 基于OAuth协议的方式 三、用OAuth实现单点登录3.1 OAuth 2.0 协议简介3…

【计组】微指令 微操作 微命令 微程序

区分四个概念 &#xff08;1&#xff09;微命令:微命令是构成控制信号序列的最小单位。通常是指那些直接作用于部件或控制门电路的控制命令。 &#xff08;2&#xff09;微操作:由微命令控制实现的最基本的操作称为微操作。 &#xff08;3&#xff09;微指令:以产生一组微命令&…

ubuntu20.4服务器安装mysql社区版并开放3306端口

您可以按照以下步骤在Ubuntu上安装MySQL社区版&#xff1a; 更新软件包列表&#xff1a; sudo apt-get update下载MySQL社区版的APT存储库配置文件&#xff1a; wget https://dev.mysql.com/get/mysql-apt-config_0.8.19-1_all.deb安装APT存储库配置文件&#xff1a; sudo …

Python基础篇(三):基本语句的示例和说明

基本语句的示例和说明 前言1. 赋值语句2. 条件语句3. 循环语句3.1 for循环示例3.2 while循环示例 4. 函数定义语句5. 函数调用语句6. 异常处理语句7. 导入语句 前言 本文是Python中常见基本语句的示例和说明。这些语句是构建Python程序逻辑和控制流的基础&#xff0c;可以根据…

【T+】畅捷通T+直接升级后,原端口无法使用提示端口占用。

【问题描述】 在使用畅捷通T软件过程中&#xff0c;由于软件可以直接升级&#xff0c; 即&#xff1a;原软件是T16.0版本&#xff0c;可以直接运行T18.0的程序进行软件、数据升级。无需将16.0进行卸载&#xff0c;再安装18.0进行数据升级。 但这样直接升级后&#xff0c;原来的…

Shell编程从入门到实践——入门篇

欢迎关注 「Android茶话会」 回 「学习之路」 取Android技术路线经典电子书回 「pdf」 取阿里&字节经典面试题、Android、算法、Java等系列武功秘籍。回 「天涯」 取天涯论坛200精彩博文,包括小说、玄学等 Shell是一种命令行解释器&#xff0c;它是在Unix和Linux操作系统中…

强化历程3-JavaWeb及Spring,SpringMVC,SpringBoot系列(2023.6.22)

文章目录 强化历程3-JavaWeb及SSM,SpringBoot系列(2023.6.22第一次更新)习题汇总1 JSP页面内容组成?2 cookie和session的区别?3 web应用中如何利用session来维持客户端和服务端的关系&#xff1f;4 session销毁的方式?5 请求转发和重定向的区别?6 什么是servelt&#xff1f…

基于Web的数字家庭网站设计与实现【附开题报告和万字文档(Lun文)】

主要功能 前台登录&#xff1a; ①主页&#xff1a;新闻信息展示、最新动态、家庭亲子视频展示、亲友动态展示 ②论坛&#xff1a;发布帖子 ③家庭亲自视频&#xff1a;视频类型分类、亲子视频标题 ④家庭日记&#xff1a;日记类型分类、日记标题 ⑤新闻信息&#xff1a;新闻类…

vue3+vite+js+router+vueX+组件一键导入(源码)

一、前言 一直想自己做一个简单脚手架&#xff0c;方便自己做点简单的demo网上开源也找不到&#xff0c;大多数都是太重了&#xff0c;或者又太轻了今天把这个几个都揉在一起&#xff0c;方便后面做点小玩意 二、项目包 vite-project.zip - 蓝奏云文件大小&#xff1a;8.8 M|ht…

SCTF2023 Barter 复现

题目描述&#xff1a; chal_sage部分&#xff1a; from Crypto.Util.number import * from random import * from secrets import flagdef gen_random(seed, P, Q, r_list, times):s seedfor i in range(times):s int((s * P)[0])r int((s * Q)[0])r_list.append(r)return…

E. Round Dance(dfs分辨特殊联通块)

Problem - 1833E - Codeforces 有 n 个人来到一个节日并决定跳几个“圆舞”。每个圆舞至少有 2 个人&#xff0c;且每个人恰好有两个邻居。如果圆舞中只有 2 个人&#xff0c;则它们在两侧拥有相同的邻居。 你想要确定有多少个“圆舞”可以跳。但是每个参与者只记得一个邻居。…

【自注意力机制必学】BERT类预训练语言模型(含Python实例)

BERT类预训练语言模型 文章目录 BERT类预训练语言模型1. BERT简介1.1 BERT简介及特点1.2 传统方法和预训练方法1.3 BERT的性质 2. BERT结构2.1 输入层以及位置编码2.2 Transformer编码器层2.3 前馈神经网络层2.4 残差连接层2.5 输出层 3. BERT类模型简要笔记4. 代码工程实践 1.…

利用python绘制端午节的各种图案,例如粽子,赛龙舟等,以及一些端午节的感人小故事

这里写目录标题 1、关于端午节的有趣故事2、关于端午节的趣闻3、利用python绘制龙舟3.1. 代码如下3.2 图形展示 4、利用python绘制大公鸡5、利用python来进行端午节的诗词对弈总结 1、关于端午节的有趣故事 端午节是一个历史悠久的中国传统节日&#xff0c;有很多有趣的故事与…

内存不够用,那你的内存去哪了?

一、前言 近几年开发了一些大型的应用程序&#xff0c;在程序性能调优或者解决一些疑难杂症问题的过程中&#xff0c;遇到最多的还是与内存相关的一些问题。例如glibc内存分配器ptmalloc&#xff0c;google的内存分配器tcmalloc都存在“内存泄漏”&#xff0c;即内存不归还操作…