Git详解及 github使用

news2024/12/24 11:00:35

1.1 关于版本控制

开始之前先看一个没有版本控制的例子

1.1.1 本地版本控制

本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

1.1.2 集中化的版本控制系统

如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

1190037-20171130170717667-909081145.png

1.1.3 分布式版本控制系统

在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

1190037-20171130170739729-1366084886.png

1.2 Git简介

1190037-20171130170749808-269525315.png

官网:Git

git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

Git 官方中文手册 Git - Book

1.2.1 Git历史

自2002年开始,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux核心的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。

2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeeper内部使用的协议进行逆向工程,决定收回无偿使用BitKeeper的授权。Linux内核开发团队与BitMover公司进行蹉商,但无法解决他们之间的歧见。林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间,编写出第一个git版本

1.3 安装git

1.3.1 环境说明

[root@git ~]# rpm -qa centos-release
centos-release-7-4.1708.el7.centos.x86_64
[root@git ~]# uname -a
Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@git ~]# getenforce 
Disabled
[root@git ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

本文使用的linux系统均为该系统

本文使用的windows系统为 Microsoft Windows [版本 10.0.15063]

1.3.2 Yum安装Git

centos 自带git

[root@git ~]# rpm -qa git
git-1.8.3.1-11.el7.x86_64

安装方法

[root@git ~]# yum install git -y

1.3.3 编译安装

编译安装可以安装较新版本的git

Git下载地址: https://github.com/git/git/releases

# 安装依赖关系
[root@git ~]# yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker
# 编译安装 
[root@git ~]# tar -zxf git-2.0.0.tar.gz
[root@git ~]# cd git-2.0.0
[root@git ~]# ./configure --prefix=/usr/local/git # 没有文件可以略过
[root@git ~]# make  
[root@git ~]# make install  

1.4 初次运行 Git 前的配置

1.4.1 配置git

命令集

git config --global user.name "username"  #配置git使用用户
git config --global user.email "email@mail.com"  #配置git使用邮箱
git config --global color.ui true  #语法高亮
git config --list # 查看全局配置

配置过程

[root@gitlab ~]# git config --global user.name "newrain"  #配置git使用用户
[root@gitlab ~]# git config --global user.email "newrain@aliyun.com"  #配置git使用邮箱
[root@gitlab ~]# git config --global color.ui true  #语法高亮
[root@gitlab ~]# git config --list # 查看全局配置
user.name=newrain
user.mail=newrain@aliyun.com
color.ui=true

生成的配置文件

[root@gitlab ~]# cd
[root@gitlab ~]# cat .gitconfig 
[user]
        name = newrain
        email = newrain@aliyun.com
[color]
    ui = true

1.4.2 获取帮助

使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:

git help <verb>
git <verb> --help
man git-<verb>

例如,要想获得配置命令的手册,执行

git help config

1.5 获取 Git 仓库(初始化仓库)

1.5.1 创建裸库

[root@gitlab ~]# useradd git
[root@gitlab ~]# passwd git
[root@gitlab ~]# mkdir /git-root/
[root@gitlab ~]# cd /git-root/
[root@gitlab git-root]# git init --bare shell.git
Initialized empty Git repository in /git-root/shell.git/
[root@gitlab git-root]# chown -R git:git shell.git

1.5.2 创建本地库

​
[root@gitlab opt]# ssh-keygen
[root@gitlab opt]# ssh-copy-id git@192.168.249.156
[root@gitlab opt]# git clone git@192.168.249.156:/git-root/shell.git
[root@gitlab opt]# ls
rh  shell
[root@gitlab opt]# cd shell/
[root@gitlab shell]# vim test1.sh
[root@gitlab shell]# git add test1.sh
[root@gitlab shell]# git commit -m 'first commit'
[master (root-commit) 33c5fbf] first commit
 1 file changed, 2 insertions(+)
 create mode 100644 test1.sh
[root@gitlab shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.1.102:/git-root/shell.git
 * [new branch]      master -> master
[root@gitlab shell]# 
# git cat

1.6 Git命令常规操作

常用命令说明

命令命令说明
#add添加文件内容至索引
bisect通过二分查找定位引入 bug 的变更
#branch列出、创建或删除分支
#checkout检出一个分支或路径到工作区
#clone克隆一个版本库到一个新目录
#commit记录变更到版本库
#diff显示提交之间、提交和工作区之间等的差异
fetch从另外一个版本库下载对象和引用
grep输出和模式匹配的行
#init创建一个空的
#log显示提交日志
#merge合并两个或更多开发历史
#mv移动或重命名一个文件、目录或符号链接
#pull获取并合并另外的版本库或一个本地分支
#push更新远程引用和相关的对象
rebase本地提交转移至更新后的上游分支中
#reset重置当前HEAD到指定状态
#rm从工作区和索引中删除文件
show显示各种类型的对象
#status显示工作区状态
#tag创建、列出、删除或校验一个GPG签名的 tag 对象

常用操作示意图

0

文件的状态变化周期

1190037-20171130171009651-1964332055.png

1.6.1 创建文件

[root@gitlab git_data]# touch README
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    README
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
---
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       README
nothing added to commit but untracked files present (use "git add" to track)

添加文件跟踪

[root@gitlab git_data]# git add ./*
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#    新文件:    README
#
---
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README
#
​

文件会添加到.git的隐藏目录

[root@gitlab git_data]# tree  .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

由工作区提交到本地仓库

[root@gitlab git_data]# git commit  -m 'first commit'  
[master(根提交) bb963eb] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

查看git的状态

[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区
​
# On branch master
nothing to commit, working directory clean

提交后的git目录状态

[root@gitlab git_data]# tree  .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 54
│   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│   ├── bb
│   │   └── 963eb32ad93a72d9ce93e4bb55105087f1227d
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

1.6.2 添加新文件

git add  * 添加到暂存区域
git commit  提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

修改或删除原有文件

常规方法

git add  *
git commit

简便方法

git commit -a  -m "注释信息"

-a 表示直接提交

Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are
not affected.

1.6.3 删除git内的文件

命令说明:

• 没有添加到暂存区的数据直接rm删除即可。

• 已经添加到暂存区数据:

git rm --cached database

#→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f database

#→将文件数据从git暂存区和工作目录一起删除

命令实践:

# 创建新文件
[root@gitlab git_data]# touch 123
[root@gitlab git_data]# git status
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    123
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
---
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       123
nothing added to commit but untracked files present (use "git add" to track)

# 将文件添加到暂存区域

[root@gitlab git_data]# git add 123
[root@gitlab git_data]# git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    新文件:    123
---
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   123

# 删除文件

[root@gitlab git_data]# rm 123 -f
[root@gitlab git_data]# ls
README
[root@gitlab git_data]# git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    新文件:    123
#
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#    删除:      123
# 
---
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   123
#
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    123
[root@gitlab git_data]# git reset HEAD  ./* 
[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区
---
# On branch master
nothing to commit, working directory clean

1.6.4 重命名暂存区数据

• 没有添加到暂存区的数据直接mv/rename改名即可。

• 已经添加到暂存区数据:

git mv README NOTICE
[root@gitlab git_data]# git mv README notice
[root@gitlab git_data]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    README -> notice
#

1.6.5 查看历史记录

• git log #→查看提交历史记录

• git log -2 #→查看最近几条记录

• git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异

• git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

• git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息

• git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

• git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

使用format参数来指定具体的输出格式

格式说明
%s提交说明。
%cd提交日期。
%an作者的名字。
%cn提交者的姓名。
%ce提交者的电子邮件。
%H提交对象的完整SHA-1哈希字串。
%h提交对象的简短SHA-1哈希字串。
%T树对象的完整SHA-1哈希字串。
%t树对象的简短SHA-1哈希字串。
%P父对象的完整SHA-1哈希字串。
%p父对象的简短SHA-1哈希字串。
%ad作者的修订时间。

命令实践

[root@gitlab git_data]# git log
commit f5b79552635a7dc60afc35c99c1170366d8c5f6b
Author: newrain <newrain@aliyun.com>
Date:   Sat May 11 21:29:21 2019 -0700
​
    456
​
commit e9ed8b38a0052cdcd85ecee833ea8198b077f881
Author: newrain <root@vmdesk.localdomain>
Date:   Sat May 11 21:21:12 2019 -0700
​
    commit 123
​
commit 9d394114177b8da9e452d001ec610e9c45ceede3
Author: newrain <root@vmdesk.localdomain>
Date:   Sat May 11 20:19:23 2019 -0700
​
    first commit

1.6.6 还原历史数据

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

git reset --hard hash

git reset --hard HEAD^ #→还原历史提交版本上一次

git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

会自动匹配)

测试命令

[root@gitlab git_data]# git log
commit f5b79552635a7dc60afc35c99c1170366d8c5f6b
Author: newrain <newrain@aliyun.com>
Date:   Sat May 11 21:29:21 2019 -0700
​
    456
​
commit e9ed8b38a0052cdcd85ecee833ea8198b077f881
Author: newrain <root@vmdesk.localdomain>
Date:   Sat May 11 21:21:12 2019 -0700
​
    commit 123
​
commit 9d394114177b8da9e452d001ec610e9c45ceede3
Author: newrain <root@vmdesk.localdomain>
Date:   Sat May 11 20:19:23 2019 -0700
​
    first commit
​

还原数据

[root@gitlab git_data]# git reset --hard e9ed8b38a
HEAD is now at e9ed8b3 commit 123
HEAD 现在位于 e9ed8b3 commit 123
# 查看数据
[root@gitlab git_data]# ls
123 README

1.6.7 还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。

git reflog #→查看未来历史更新点

测试命令

[root@gitlab git_data]#  git reflog
e9ed8b3 HEAD@{0}: reset: moving to e9ed8b38a
f5b7955 HEAD@{1}: commit: 456
e9ed8b3 HEAD@{2}: commit: commit 123
9d39411 HEAD@{3}: commit (initial): first commit
[root@gitlab git_data]#  

1.6.8 标签使用

前面回滚使用的是一串字符串,又长又难记。

git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。

git tag #→查看当前所有的标签

git show v1.0 #→查看当前1.0版本的详细信息

git tag v1.2 -m "version 1.2 release is test" #→创建带有说明的标签,-a指定标签名字,-m指定说明文字

git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0

测试命令

[root@gitlab git_data]# git reset --hard e9ed8b38a
HEAD is now at e9ed8b3 commit 123
[root@gitlab git_data]# git reset --hard V1.0
HEAD is now at e9ed8b3 add test dir
​
[root@gitlab git_data]# git tag  v20171129
[root@gitlab git_data]# git tag 
v20171129

1.6.9 对比数据

git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改

后,再把它提交到仓库就放⼼多了。

git diff README
git diff --name-only HEAD HEAD^
git diff --name-only head_id head_id2

1.7 分支结构

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。

那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。

1190037-20171130171522167-746209354.png

1.7.1 分支切换

[root@gitlab git_data]# git branch newrain
[root@gitlab git_data]# git branch 
* master
  newrain
[root@gitlab git_data]# git checkout newrain 
切换到分支 'newrain'
Switched to branch 'newrain'
[root@gitlab git_data]# git branch 
  master
* newrain

在newrain 分支进行修改

[root@gitlab git_data]# cat README 
This is git_data readme
[root@gitlab git_data]#  echo '1901' >> README 
[root@gitlab git_data]# git add .
[root@gitlab git_data]# git commit -m '1901'
[newrain 4310e7e] 1901
 1 file changed, 1 insertion(+)
[root@gitlab git_data]# git status
# On branch newrain
nothing to commit, working directory clean
---
# 位于分支 newrain
无文件要提交,干净的工作区

回到master分支

[root@gitlab git_data]# git checkout master
Switched to branch 'master'
切换到分支 'master'
[root@gitlab git_data]# cat README 
This is git_data readme
[root@gitlab git_data]# git log  -1
commit f5b79552635a7dc60afc35c99c1170366d8c5f6b
Author: newrain <newrain@aliyun.com>
Date:   Sat May 11 21:29:21 2019 -0700
​
    456
​

合并代码

[root@gitlab git_data]#  git merge newrain
Updating f5b7955..4310e7e
Fast-forward
 README | 1 +
 1 file changed, 1 insertion(+)
[root@gitlab git_data]# git status
# On branch master
nothing to commit, working directory clean
# 位于分支 master
无文件要提交,干净的工作区
[root@gitlab git_data]# cat README 
This is git_data readme
1901

1.7.2 合并失败解决

模拟冲突,在文件的同一行做不同修改

在master 分支进行修改

[
root@gitlab git_data]# cat README 
This is git_data readme
1901
[root@gitlab git_data]#  echo '1901-git' > README 
[root@gitlab git_data]#  git commit -m 'newrain 1901-git'
[master 4e6c548] newrain 1901-git
 1 file changed, 1 insertion(+), 2 deletions(-)

切换到newrain分支

[root@gitlab git_data]# git checkout newrain
Switched to branch 'newrain'
[root@gitlab git_data]# cat README 
This is git_data readme
1901
[root@gitlab git_data]# echo 'newrain' >> README 
[root@gitlab git_data]# git commit -m '1901-git-check'
# On branch newrain
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   README
#
no changes added to commit (use "git add" and/or "git commit -a")
​

回到master分区,进行合并,出现冲突

[root@gitlab git_data]# git checkout master 
切换到分支 'master'
[root@gitlab git_data]# git merge linux
自动合并 README
冲突(内容):合并冲突于 README
自动合并失败,修正冲突然后提交修正的结果。

解决冲突

[root@gitlab git_data]# vim README 
This is git_data readme
1901
newrain
meger test ti
meger test master

# 手工解决冲突

[root@gitlab git_data]# git commit -a -m "merge-ti-test"
[master 2594b2380] merge-ti-test

1.7.3 删除分支

因为之前已经合并了newrain分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

查看所有包含未合并工作的分支,可以运行 git branch --no-merged:

git branch --no-merged
  testing

这里显示了其他分支。 因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败:

git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'. 

如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。

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

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

相关文章

市级奖项+1,持安获「创业北京」创业创新大赛优秀奖!

2274个创业项目参赛 历经五个多月的激烈角逐 第六届“创业北京”创业创新大赛 终于圆满落下帷幕 持安科技在北京市总决赛中再创佳绩&#xff01; 荣获制造业赛道优秀奖 本次大赛由北京市人力资源和社会保障局、北京市发展和改革委员会等11家单位联合主办&#xff0c;以“创…

C语言--从键盘输入10个数字放在数组中,并输出

用scanf读取数字的时候要注意&#xff0c;可以输入一个数字&#xff0c;按一下回车&#xff0c;输入一个数字&#xff0c;按一下回车&#xff0c;也可以一次性输入完10个数据。&#xff08;中间可以用空格隔开&#xff0c;系统会自动识别&#xff09; 输出一:每按下一个数字&am…

数据库mysql详细教学

1024 byte 构成 1 kb 1024 KB > 1MB 1024 MB > 1GB 1024 GB > 1TB 1024 TB > 1PB 内存的数据&#xff0c;断电后会丢失。外存的数据&#xff0c;断电后数据还在~ “持久化” 这样的次&#xff0c;意思就是把数据写到硬盘上。 mysql的第一组基本操作&#xff1a;数…

Linux 系统误将 chmod 权限改成 了 000,如何恢复?

Linux 系统误将 chmod 权限改成 了 000&#xff0c;如何恢复? busybox 是 Linux 标配&#xff0c;含有大多数主流 Linux 命令&#xff0c;你可以把它的存在当作救急备份。简单功能都可以调用 busybox 完成。这也就意味着很多原始命令出故障的情况下都可以用 busybox 暂时替代。…

【js作用域】JavaScript中作用域的是什么?:从编译时其承担什么角色和查询作用域中的变量的角度解析作用域

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript进阶指南 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继…

架构师篇 DDD领域驱动设计篇

一 DDD领域驱动设计 1.1 领域驱动设计 领域驱动设计(英文&#xff1a;Domain-Driven Design&#xff0c;缩写DDD)是一种模型驱动设计的方法&#xff0c;领域驱动设计常以战略设计与战术设计来将整个领域展现的淋漓尽致&#xff0c;其作用范围既面向业务也面向技术。从战略角度…

PHP排序sort()、asort() 和 ksort() 的区别及用法

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

SOLIDWORKS Electrical工程属性配置与图框

导读 很多工程师都是直接使用现有的图框&#xff0c;但是现有图框会遇到一些问题&#xff0c;自己想显示的内容不知道怎么设置出来&#xff0c;或者是图纸显示的内容太繁杂&#xff0c;行列号不符合自己的习惯。这些问题都是关于图框模板的设计。 一、关于工程属性设计的问题…

【每日一题】数位和相等数对的最大和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希表 写在最后 Tag 【哈希表】【数组】【2023-11-18】 题目来源 2342. 数位和相等数对的最大和 题目解读 在数组中找出数位和相等数对的和的最大值。 解题思路 方法一&#xff1a;哈希表 维护一个不同的数位和表…

es 算法函数 有点不太懂了没有大神给指点一下

我先说一下我对算法分析的理解 算法函数&#xff0c;我们使用算法函数给指定的数据提高对应的值的方式 比如我现在要给一家酒店排名提高排名&#xff0c;我们可以利用算法函数&#xff0c;提高酒店排名&#xff0c;因为酒店的名称 相关算法的使用场景 在使用的时候出现了这…

《循环双向链表》(带哨兵位的头节点)

目录 ​编辑 前言&#xff1a; 关于双向循环带头链表: 模拟实现双向循环带头链表&#xff1a; 1.typedef数据类型 2.打印链表 3.初始化链表&#xff1a; 4.创建节点 5.尾插 6.头插 7.尾删 8.头删 9.寻找节点 10.在节点前插入 11.删除指定节点 单链表和双链表的区别…

Android 解决CameraView叠加2个以上滤镜拍照黑屏的BUG (二)

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

C++项目案例圆和点的关系 (涉及知识点:头文件定义类,cpp文件实现类,类和作用域,linux编译运行c++项目)

一.项目描述 点与圆有三种关系&#xff1a; 点在圆外 点在圆上 点在圆内计算点到圆心的距离就能判断点在圆的哪个地方。二.项目结构 三.include文件 3.1 Circle类的声明 Circle.h // 防止头文件重复包含 #pragma once // #include<iostream> #include "Point.h&…

PS学习笔记——图层

文章目录 图层面板图层类型新建图层新建方式图层颜色 操作图层修改图层名称选中图层隐藏图层调整图层顺序复制图层 图层面板 按F7可打开/关闭图层面板 该面板就是图层面板了 对所有图层进行筛选的按钮&#xff0c;第一个搜索框可以选择按什么方式进行筛选&#xff0c;支持&am…

Python语言这么火热,其实具有以下特点

Python语言具有以下特点&#xff1a; 简单易学&#xff1a;Python语言是一种解释型语言&#xff0c;语法简单明了&#xff0c;代码简洁&#xff0c;易于理解&#xff0c;可以一边编码一边运行&#xff0c;非常合适编程初学者。门槛较低&#xff1a;Python不需要复杂的环境配置…

使用ADS进行serdes仿真时,Tx_Diff中EQ的设置对发送端波形的影响。

研究并记录一下ADS仿真中Tx_Diff的EQ设置。原理图如下&#xff1a; 最上面是选择均衡方法Choose equalization method&#xff1a;Specify FIR taps&#xff0c;Specify de-emphasis和none。 当选择Specify de-emphasis选项时&#xff0c;下方可以输入去加重具体的dB值&#x…

嵌入式 Linux 移植与系统启动方法

1、Linux系统启动与U-Boot 所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说&#xff0c;主要是从一种硬件平台转移到另一种硬件平台上运行。 体系结构级别的移植是指在不同体系结构平台上Linux内核的移植&#xff0c;例如&#xff0c;在ARM、MI…

buildadmin+tp8表格操作(1)----表头上方添加按钮和自定义按钮

buildAdmin 的表头上添加一些按钮&#xff0c;并实现功能 添加按钮 <template><!-- buttons 属性定义了 TableHeader 本身支持的顶部按钮&#xff0c;仅需传递按钮名即可 --><!-- 这里的框架自带的 顶部按钮 分别有 刷新 &#xff0c; 添加&#xff0c; 编辑&…

FPGA模块——IIC协议(读写PCF8591)

FPGA模块——IIC协议&#xff08;读取PCF8591&#xff09; PCF8591/AT8591芯片对iic协议的使用 PCF8591/AT8591芯片 低功耗8位CMOS数据采集设备&#xff0c;4路模拟输入&#xff0c;1路模拟输出&#xff0c;分时多路复用&#xff0c;读取数据用串型iic总线接口&#xff0c;最大…

SFP-10G-SR光模块指南

SFP-10G-SR通常是思科&#xff08;Cisco&#xff09;使用的型号名。是一种用于非常短距离应用的最低成本、最低功耗的10G SFP模块。本文汇总了初学者在第一阶段关于10G SFP SR模块的常见问题。 SFP-10G-SR模块是否支持GE&#xff1f; 10GBASE-SR模块本身是可以支持GE速度的&am…