61、实用脚本的创建与管理指南

实用脚本的创建与管理指南

1. Git 项目操作流程

在建立项目的远程仓库后,需要记录其提供的网址,该网址用于将项目文件发送到远程仓库。使用 Git 进行项目管理时,基本有以下四个步骤:
1. 创建或修改脚本。
2. 将脚本添加到暂存区(索引)。
3. 将脚本提交到本地仓库。
4. 将脚本推送到远程仓库。

以下是一个简单的示例,创建了一个名为 MyGitExampleScript.sh 的 shell 脚本:

$ cat MyGitExampleScript.sh
#!/bin/bash
# Git example script
#
echo "Hello Git World"
exit
$

1.1 添加脚本到暂存区

由于脚本不在当前工作目录 /home/christine/MWGuard 中,先将其复制过去,然后执行 git add 命令:

$ pwd
/home/christine/scripts
$
$ cp MyGitExampleScript.sh /home/christine/MWGuard/
$
$ cd /home/christine/MWGuard/
$
$ pwd
/home/christine/MWGuard
$
$ ls *.sh
MyGitExampleScript.sh
$
$ git add MyGitExampleScript.sh
$
$ git status
[…]
No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   MyGitExampleScript.sh

$

git add 命令执行时无输出,可使用 git status 命令查看是否添加成功。

1.2 批量添加脚本到暂存区

如果想将当前工作目录下的所有脚本同时添加到暂存区索引,可使用 git add . 命令。若工作目录中有不想添加的文件,可在工作目录中创建 .gitignore 文件,将不想包含的文件和目录名称添加进去。

1.3 提交项目到本地仓库

使用 git commit 命令将项目提交到本地仓库,并添加 -m 选项添加注释:

$ git commit -m "Initial Commit"
[&hellip;] Initial Commit
 1 file changed, 5 insertions(+)
 create mode 100644 MyGitExampleScript.sh
$
$ cat .git/COMMIT_EDITMSG
Initial Commit
$
$ git status
[&hellip;]
nothing to commit, working tree clean
$

注释存储在 COMMIT_EDITMSG 文件中,有助于跟踪脚本修改原因。若不添加 -m 选项,会进入 vim 编辑器手动编辑 .git/COMMIT_EDITMSG 文件。

1.4 创建 Markdown 文件

对于新的脚本项目,在建立远程仓库账户后,可创建一个名为 README.md 的 Markdown 文件,用于描述仓库:

$ pwd
/home/christine/MWGuard
$
$ ls
MyGitExampleScript.sh
$
$ echo "# Milky Way Guardian" > README.md
$ echo "## Script Project" >> README.md
$
$ cat README.md
# Milky Way Guardian
## Script Project
$
$ git add README.md
$
$ git status
[...]
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   README.md

$
$ git commit -m "README.md commit"
[...] README.md commit
 1 file changed, 2 insertions(+)
 create mode 100644 README.md
$
$ git status
[...]
nothing to commit, working tree clean
$

1.5 查看 Git 日志

可随时查看 Git 日志,在将脚本项目推送到远程仓库前查看是个好习惯:

$ git log
commit 898330bd0b01e0b6eee507c5eeb3c72f9544f506[...]
Author: Christine Bresnahan <cbresn1723@gmail.com>
Date:   Mon Aug 24 15:58:52 2020 -0400

    README.md commit

commit 3b484638bc6e391d0a1b816946cba8c5f4bbc8e6
Author: Christine Bresnahan <cbresn1723@gmail.com>
Date:   Mon Aug 24 15:46:56 2020 -0400

    Initial Commit
$

1.6 配置远程仓库地址

在推送项目到远程仓库前,需在系统中配置其地址,使用 git remote add origin URL 命令:

$ git remote add origin https://github.com/C-Bresnahan/MWGuard.git
$
$ git remote -v
origin  https://github.com/C-Bresnahan/MWGuard.git (fetch)
origin  https://github.com/C-Bresnahan/MWGuard.git (push)
$

可使用 git remote -v 命令检查远程地址状态。若地址有误,可使用 git remote rm origin 命令移除,再重新设置。

1.7 推送项目到远程仓库

在推送前,将主分支重命名为 main

$ git branch -m main
$
$ git branch --show-current
main
$

使用 git push -u origin main 命令将脚本复制到远程仓库:

$ git push -u origin main
Username for 'https://github.com': C-Bresnahan
Password for 'https://C-Bresnahan@github.com':
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 604 bytes | 60.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/C-Bresnahan/MWGuard.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
$

通常远程仓库需要用户名和密码,推送成功后可在浏览器中查看。

1.8 拉取项目文件

团队成员可使用 git pull 命令拉取最新脚本版本:

$ whoami
rich
$
$ pwd
/home/rich/MWGuard
$
$ git remote add origin https://github.com/C-Bresnahan/MWGuard.git
$
$ git pull origin main
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 584 bytes | 58.00 KiB/s, done.
From https://github.com/C-Bresnahan/MWGuard
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
$

若本地仓库有未上传的修改版本脚本, git pull 命令会失败并给出错误提示。

1.9 克隆项目

新团队成员可使用 git clone 命令从远程仓库复制整个脚本项目:

$ whoami
tim
$
$ ls
$
$ git clone https://github.com/C-Bresnahan/MWGuard.git
Cloning into 'MWGuard'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 584 bytes | 58.00 KiB/s, done.
$
$ ls
MWGuard
$
$ cd MWGuard/
$
$ ls -a
.  ..  .git  MyGitExampleScript.sh  README.md
$
$ git log
commit [...](HEAD -> main, origin/main, origin/HEAD)
Author: Christine Bresnahan <cbresn1723@gmail.com>
Date:   Mon Aug 24 15:58:52 2020 -0400

    README.md commit

commit 3b484638bc6e391d0a1b816946cba8c5f4bbc8e6
Author: Christine Bresnahan <cbresn1723@gmail.com>
Date:   Mon Aug 24 15:46:56 2020 -0400

    Initial Commit
$

克隆项目时,会自动创建工作目录、 .git/ 目录、Git 暂存区(索引)和本地仓库。

2. Bash 命令速览

2.1 内置命令

Bash shell 包含许多内置命令,可实现更快的处理速度。以下是部分内置命令及其描述:
| 命令 | 描述 |
| — | — |
| & | 以后台模式启动作业 |
| ((x)) | 计算 x 数学表达式 |
| : | 不执行任何操作,始终成功退出 |
| [ t ] | 计算 t 条件表达式 |
| [[ e ]] | 计算 e 条件表达式 |
| alias | 为指定命令定义别名 |
| bg | 以后台模式恢复作业 |

2.2 常见外部命令

除内置命令外,Bash shell 还使用外部命令来操作文件系统和处理文件与目录。以下是部分常见外部命令及其描述:
| 命令 | 描述 |
| — | — |
| at | 在指定未来时间执行指定脚本或命令 |
| atq | 显示 at 实用程序队列中的作业 |
| atrm | 从 at 实用程序队列中移除指定作业 |
| bash | 解释标准输入或文件中的命令,或使用 Bourne Again Shell 命令语言启动子 shell |
| bc | 通过其编程语言执行计算 |
| bzip2 | 使用 Burrows–Wheeler 块排序文本压缩算法和 Huffman 编码进行压缩 |

2.3 环境变量

Bash shell 还使用许多环境变量,这些变量虽不是命令,但常影响 shell 命令的操作。以下是部分环境变量及其描述:
| 变量 | 描述 |
| — | — |
| * | 将所有命令行参数作为单个文本值包含在内 |
| @ | 将所有命令行参数作为单独的文本值包含在内 |
| # | 命令行参数的数量 |
| ? | 最近使用的前台进程的退出状态 |
| - | 当前命令行选项标志 |
| $ | 当前 shell 的进程 ID(PID) |
| ! | 最近执行的后台进程的 PID |
| 0 | 命令行中的命令名称 |
| _ | shell 的绝对路径名 |

通过这些命令和环境变量,可在命令行上完成几乎所有需要的任务。

3. 操作流程总结

3.1 Git 操作流程

graph LR
    A[创建或修改脚本] --> B[添加脚本到暂存区]
    B --> C[提交项目到本地仓库]
    C --> D[配置远程仓库地址]
    D --> E[推送项目到远程仓库]
    E --> F[团队成员拉取或克隆项目]

3.2 Bash 命令使用流程

graph LR
    A[选择内置或外部命令] --> B[根据需求使用命令操作文件或目录]
    B --> C[根据环境变量影响命令行为]

通过以上操作流程和命令,可高效地进行脚本项目管理和命令行操作。

4. 深入理解 Git 操作细节

4.1 分支管理的重要性

在 Git 中,分支是一个非常重要的概念。前面我们将主分支重命名为 main ,实际上分支可以让我们并行开发不同的功能或修复不同的问题。例如,当我们要开发一个新功能时,可以创建一个新的分支,在这个分支上进行开发,而不会影响到 main 分支的稳定性。创建新分支的命令如下:

$ git branch new-feature
$ git checkout new-feature

第一行命令创建了一个名为 new-feature 的新分支,第二行命令切换到这个新分支。当新功能开发完成后,我们可以将这个分支合并到 main 分支:

$ git checkout main
$ git merge new-feature

4.2 冲突解决

在多人协作开发时,可能会出现冲突的情况。例如,不同的人在不同的分支上修改了同一个文件的同一部分,当进行合并操作时就会产生冲突。当 git merge 命令提示冲突时,我们需要手动解决冲突。首先,使用 git status 命令查看哪些文件发生了冲突:

$ git status

然后,打开冲突的文件,会看到类似下面的标记:

<<<<<<< HEAD
这是当前分支的内容
=======
这是要合并分支的内容
>>>>>>> new-feature

我们需要手动编辑文件,选择保留哪些内容,删除冲突标记。解决完冲突后,使用 git add git commit 命令提交修改:

$ git add conflict-file.txt
$ git commit -m "Resolved conflict"

5. 优化 Bash 命令使用

5.1 命令别名的使用

为了提高命令行操作的效率,我们可以使用 alias 命令为常用的命令创建别名。例如,将 git status 命令简化为 gs

$ alias gs='git status'

这样,每次输入 gs 就相当于输入了 git status 。为了让别名在每次启动终端时都生效,可以将别名定义添加到 .bashrc .bash_profile 文件中。

5.2 脚本自动化

对于一些重复性的任务,我们可以编写 Bash 脚本来实现自动化。例如,我们可以编写一个脚本来自动完成 Git 项目的提交和推送操作:

#!/bin/bash
git add .
git commit -m "Automated commit"
git push -u origin main

将上述代码保存为一个文件,例如 auto-git.sh ,并赋予执行权限:

$ chmod +x auto-git.sh

然后,在需要提交和推送项目时,只需要运行这个脚本:

$ ./auto-git.sh

6. 环境变量的高级应用

6.1 动态配置

环境变量可以用于动态配置脚本和命令。例如,我们可以根据不同的环境设置不同的配置。假设我们有一个开发环境和一个生产环境,我们可以通过设置 ENVIRONMENT 环境变量来区分:

$ export ENVIRONMENT=development

然后在脚本中根据这个环境变量来执行不同的操作:

#!/bin/bash
if [ "$ENVIRONMENT" = "development" ]; then
    echo "Running in development environment"
else
    echo "Running in production environment"
fi

6.2 安全敏感信息管理

环境变量还可以用于管理安全敏感信息,如数据库密码、API 密钥等。将这些信息存储在环境变量中,而不是硬编码在脚本中,可以提高安全性。例如:

$ export DB_PASSWORD=mysecretpassword

然后在脚本中使用这个环境变量:

#!/bin/bash
mysql -u root -p$DB_PASSWORD

7. 总结与展望

7.1 操作总结

通过本文,我们学习了 Git 的基本操作流程,包括创建或修改脚本、添加到暂存区、提交到本地仓库、配置远程仓库地址、推送项目到远程仓库以及团队成员的拉取和克隆操作。同时,我们还了解了 Bash shell 的内置命令、外部命令和环境变量的使用。以下是操作步骤的总结表格:
| 操作类型 | 操作步骤 |
| — | — |
| Git 操作 | 创建或修改脚本 -> 添加到暂存区 -> 提交到本地仓库 -> 配置远程仓库地址 -> 推送项目到远程仓库 -> 团队成员拉取或克隆项目 |
| Bash 命令使用 | 选择内置或外部命令 -> 根据需求操作文件或目录 -> 根据环境变量影响命令行为 |

7.2 未来展望

在未来的开发中,我们可以进一步深入学习 Git 的高级功能,如标签管理、钩子脚本等,以及 Bash shell 的高级编程技巧,如函数定义、循环和条件语句的使用。通过不断学习和实践,我们可以更加高效地进行脚本项目管理和命令行操作。

通过掌握这些知识和技能,我们可以在命令行上更加自如地进行开发和管理工作,提高工作效率和质量。

【多种改进粒子群算法进行比较】基于启发式算法的深度神经网络卸载策略研究【边缘计算】(Matlab代码实现)内容概要:本文围绕“基于多种改进粒子群算法比较的深度神经网络卸载策略研究”展开,聚焦于边缘计算环境下的计算任务卸载优化问题。通过引入多种改进的粒子群优化(PSO)算法,并其他启发式算法进行对比,旨在提升深度神经网络模型在资源受限边缘设备上的推理效率系统性能。文中详细阐述了算法设计、模型构建、优化目标(如延迟、能耗、计算负载均衡)以及在Matlab平台上的代码实现过程,提供了完整的仿真验证结果分析,展示了不同算法在卸载决策中的表现差异。; 适合人群:具备一定编程基础和优化算法知识,从事边缘计算、人工智能部署、智能优化等相关领域的科研人员及研究生;熟悉Matlab仿真工具的开发者。; 使用场景及目标:①研究边缘计算环境中深度学习模型的任务卸载机制;②对比分析多种改进粒子群算法在复杂优化问题中的性能优劣;③为实际系统中低延迟、高能效的AI推理部署提供算法选型实现参考; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法实现细节参数设置,通过复现仿真结果深入理解不同启发式算法在卸载策略中的适用性局限性,同时可拓展至其他智能优化算法的对比研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值