《Git 简易速速上手小册》第8章:保护你的代码(2024 最新版)

news2024/12/28 18:46:55

在这里插入图片描述

文章目录

  • 8.1 使用 `.gitignore` 优化你的仓库
    • 8.1.1 基础知识讲解
    • 8.1.2 重点案例:为 Python 项目配置 `.gitignore`
    • 8.1.3 拓展案例 1:使用全局 `.gitignore`
    • 8.1.4 拓展案例 2:忽略已经被跟踪的文件
  • 8.2 管理敏感数据
    • 8.2.1 基础知识讲解
    • 8.2.2 重点案例:为 Python 应用配置环境变量
    • 8.2.3 拓展案例 1:使用 `git-secret` 加密存储敏感数据
    • 8.2.4 拓展案例 2:使用云服务管理 API 密钥
  • 8.3 安全实践与权限控制
    • 8.3.1 基础知识讲解
    • 8.3.2 重点案例:为 Python 项目实施分支保护
    • 8.3.3 拓展案例 1:使用 Code Owners 自动要求审查
    • 8.3.4 拓展案例 2:利用 Git 钩子增强安全性

8.1 使用 .gitignore 优化你的仓库

在每个 Git 仓库的生命中,.gitignore 文件扮演着守门人的角色,决定哪些文件可以进入仓库的殿堂,哪些应该被留在门外。正确配置 .gitignore 文件是保持仓库整洁、减少不必要的项目体积和避免敏感信息泄露的关键步骤。

8.1.1 基础知识讲解

  • 作用与重要性.gitignore 文件告诉 Git 哪些文件或目录是不应该被添加到版本控制中的。这通常包括编译产生的文件、系统生成的文件、包管理器的目录(如 Python 的 venv 目录)和开发工具生成的配置文件等。
  • 配置方法:在项目的根目录下创建一个 .gitignore 文件,并在文件中指定要忽略的文件模式。Git 会自动识别并应用这些规则。

8.1.2 重点案例:为 Python 项目配置 .gitignore

假设你正在开发一个 Python Web 应用,并希望确保所有不必要的文件都不会被提交到仓库中。

步骤

  1. 在项目的根目录下创建 .gitignore 文件。
  2. 添加以下内容来忽略常见的不必要文件:
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*.so

# Virtual environment
venv/
.env

# IDE settings
.idea/
*.swp
*.swo
.vscode/

这样配置后,Git 将会忽略上述指定的文件和目录,使得你的仓库更加干净、轻便。

8.1.3 拓展案例 1:使用全局 .gitignore

如果你有一些通用的忽略规则适用于所有项目(比如编辑器的临时文件),你可以配置一个全局的 .gitignore 文件。

步骤

  1. 创建一个全局 .gitignore 文件,例如在你的用户目录下:
touch ~/.gitignore_global
  1. 添加通用忽略规则,如:
.DS_Store
*.log
  1. 通过 Git 配置命令指定这个文件为全局 .gitignore
git config --global core.excludesfile ~/.gitignore_global

8.1.4 拓展案例 2:忽略已经被跟踪的文件

有时候,你可能会意外地提交了应该被忽略的文件。要从 Git 仓库中移除这些文件(但保留在本地),你可以使用以下命令:

git rm --cached FILENAME

然后,确保 .gitignore 已经正确配置以忽略未来的提交。

通过本节,你已经了解了如何有效地使用 .gitignore 来优化你的仓库,不仅使其更加整洁,也提高了项目的安全性。记住,良好的 .gitignore 配置是每个项目成功的基石之一。现在,就让我们采取行动,为你的项目构建一个强大的 .gitignore 防线吧!

在这里插入图片描述


8.2 管理敏感数据

在开发过程中,管理敏感数据是维护项目安全的关键一环。无论是 API 密钥、数据库密码还是配置文件,不当地处理这些信息都可能导致安全漏洞。幸运的是,有多种方法可以帮助我们安全地管理这些敏感数据,而不必将它们硬编码在源代码中。

8.2.1 基础知识讲解

  • 环境变量:使用环境变量是管理敏感数据的一种常见做法。它们可以在运行时提供给应用,而不是存储在项目的代码库中。
  • 加密秘钥:对于存储或版本控制中必须包含的配置文件,可以使用工具对敏感数据进行加密。
  • 专用管理工具:使用如 HashiCorp Vault、AWS Secrets Manager 或 Azure Key Vault 这样的秘钥管理服务,可以为敏感信息提供额外的安全层。

8.2.2 重点案例:为 Python 应用配置环境变量

假设你正在开发一个 Python Web 应用,需要访问数据库,但你不想在代码中直接包含数据库的连接字符串。

步骤

  1. 在你的操作系统中设置环境变量。以 Linux 或 macOS 为例:
export DATABASE_URL="你的数据库连接字符串"
  1. 在你的 Python 应用中,使用 os 模块来读取这个环境变量:
import os

database_url = os.getenv("DATABASE_URL")

这样,你的应用就可以在运行时获取数据库连接信息,而不需要将其存储在代码库中。

8.2.3 拓展案例 1:使用 git-secret 加密存储敏感数据

如果你的项目需要在版本控制中包含某些配置文件,但你想保护其中的敏感数据,git-secret 是一个有用的工具。

步骤

  1. 安装 git-secret 并初始化你的项目:
git secret init
  1. 将包含敏感数据的文件添加到 git-secret
git secret add my_sensitive_config.yml
  1. 加密文件:
git secret hide
  1. 提交其他人都可以安全获取但无法阅读的加密文件。

8.2.4 拓展案例 2:使用云服务管理 API 密钥

对于复杂的项目,使用云服务如 AWS Secrets Manager 来管理 API 密钥和其他敏感数据可以提供更高级的安全特性。

步骤

  1. 在 AWS Secrets Manager 中创建新的秘密来存储你的 API 密钥。
  2. 在你的应用中,使用 AWS SDK 来动态获取这些秘密:
import boto3
from botocore.exceptions import ClientError

def get_secret():
    secret_name = "my_api_secret"
    region_name = "us-west-2"

    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )

    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    except ClientError as e:
        raise e
    else:
        secret = get_secret_value_response['SecretString']
        return secret

通过本节,你已经学会了几种管理敏感数据的方法,从使用环境变量到利用专用工具加密和存储秘密信息。这些方法不仅可以帮助你保护敏感数据免受泄露,还能维护项目的整洁和安全。记住,处理敏感信息时总是要谨慎,采取所有必要的预防措施来保护你的项目和用户数据的安全。现在,让我们采取行动,实施这些最佳实践吧!
在这里插入图片描述


8.3 安全实践与权限控制

在任何软件项目中,实施有效的安全实践和权限控制机制是至关重要的。这不仅有助于保护代码免受未授权访问和修改,还能确保敏感信息不被泄露。Git 和各种托管平台提供了多种工具和设置,让你能够精细控制谁可以访问和修改你的代码。

8.3.1 基础知识讲解

  • 分支保护:大多数 Git 托管服务,如 GitHub、GitLab 和 Bitbucket,都提供了分支保护功能,使你能够限制对关键分支的写入访问。
  • 权限分级:通过为不同的团队成员分配不同级别的权限(如读取、写入、管理员权限),可以精确控制他们对仓库的访问和操作能力。
  • 审核日志:使用托管服务提供的审核日志功能来跟踪谁做了什么更改,有助于增强安全性和透明度。

8.3.2 重点案例:为 Python 项目实施分支保护

假设你正在开发一个 Python 应用,并使用 GitHub 作为代码托管平台。你希望确保 main 分支免受未经审查的更改。

步骤

  1. 登录 GitHub,导航到你的项目仓库。
  2. 进入 “Settings” > “Branches”,点击 “Add rule” 来为 main 分支添加保护规则。
  3. 在 “Branch protection rules” 中,启用 “Require pull request reviews before merging”。你也可以选择其他保护选项,如 “Require status checks to pass before merging”。

8.3.3 拓展案例 1:使用 Code Owners 自动要求审查

在大型项目中,使用 GitHub 的 Code Owners 功能自动指定合适的审查者对特定部分的更改进行审查,可以进一步提升代码质量和安全性。

步骤

  1. 在仓库根目录创建一个 CODEOWNERS 文件。
  2. 添加规则指定代码所有者,例如:
# 指定 @username 为根目录下所有 Python 文件的代码所有者
*.py @username

这样,每当有人提交了 Python 文件的更改,@username 将自动被要求审查这些更改。

8.3.4 拓展案例 2:利用 Git 钩子增强安全性

你可以利用服务器端 Git 钩子(如 pre-receive 钩子)来执行自定义脚本,审核即将被推送到仓库的提交,确保它们符合你的安全策略。

步骤

  1. 在服务器端仓库的 .git/hooks 目录中创建 pre-receive 脚本。
  2. 编写脚本来检查提交是否符合你的安全标准,例如,检查是否包含了明文存储的敏感信息。

通过本节,你已经了解了如何在你的项目中实施安全实践和权限控制,从而保护你的代码免受未经授权的访问和更改。无论是通过分支保护、权限分级还是利用 Git 钩子,都是保持你的项目安全的有效方法。记住,持续审查和改进你的安全策略是保护项目不断增长和发展的关键。现在,就让我们将这些实践应用到你的工作中,构建更安全、更可靠的软件项目吧!

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

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

相关文章

C++内存模型的内存布局

C内存模型的内存布局 什么是内存模型内存布局及作用C程序的内存布局 本文章介绍了C程序的内存布局,并附有一段演示 数据区和 栈区存储不同类型变量的代码示例。 什么是内存模型 在计算机科学中,程序的内存模型是指程序在内存中的组织结构和存储方式的抽…

基于java+springboot+vue实现的房屋租赁管理系统(文末源码+Lw)23-142

第1章 绪论 房屋租赁管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、字典管理、租房房源管理、租房评价管理、房源租赁管理、租房预约管理、论坛管理、公告管理、投诉建议管理、用户管理、租房合同管理、管理员管理。用户的功能等。该系统采用了My…

pwn学习笔记(2)ret_2_text_or_shellcode

pwn学习笔记(2) 1.三种常见的寄存器: ​ ax寄存器:通用寄存器,可用于存放多种数据 ​ bp寄存器:存放的是栈帧的栈底地址 ​ sp寄存器:存放的是栈顶的地址 2.栈帧与栈工作的简介&#xff1a…

【C生万物】C语言数据类型、变量和运算符

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有…

Sui与Thrive合作推出ThinkSui平台,72万美元奖励给Sui贡献者

我们很高兴宣布推出ThinkSui平台,这是一个新的计划,旨在认可Sui社区成员、建设者和创作者。该计划由Sui和Thrive合作推出,旨在为Sui社区提供了一个让他们分享想法的平台,并将其转化为有影响力的贡献,使用户因推动Sui生…

向量搜索查询faiss、annoy

首先介绍annoy : 转发空间:https://download.csdn.net/blog/column/10872374/114665212 Annoy是高维空间求近似最近邻的一个开源库。 Annoy构建一棵二叉树,查询时间为O(logn)。 Annoy通过随机挑选两个点,并使用垂直于这个点的等距离超平面…

图数据库neo4j入门

neo4j 一、安装二、简单操作<一>、创建<二>、查询<三>、关系<四>、修改<五>、删除 三、常见报错<一>、默认的数据库密码是neo4j,打开浏览器http://localhost:7474登录不上,报错: Neo.ClientError.Security.Unauthorized: The client is un…

Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件

------------★Tkinter系列教程★------------ Tkinter教程21&#xff1a;Listbox列表框OptionMenu选项菜单Combobox下拉列表框控件的使用绑定事件 Tkinter教程20&#xff1a;treeview树视图组件&#xff0c;表格数据的插入与表头排序 Python教程57&#xff1a;tkinter中如何…

【SpringBoot篇】解决Redis分布式锁的 误删问题 和 原子性问题

文章目录 &#x1f354;Redis的分布式锁&#x1f6f8;误删问题&#x1f388;解决方法&#x1f50e;代码实现 &#x1f6f8;原子性问题&#x1f339;Lua脚本 ⭐利用Java代码调用Lua脚本改造分布式锁&#x1f50e;代码实现 &#x1f354;Redis的分布式锁 Redis的分布式锁是通过利…

【RT-DETR有效改进】轻量级下采样方法ContextGuided(参数量下降700W,轻量又涨点)

&#x1f451;欢迎大家订阅本专栏&#xff0c;一起学习RT-DETR&#x1f451; 一、本文介绍 本文给大家带来的是改进机制是一种替换Conv的模块Context Guided Block (CG block) &#xff0c;其是在CGNet论文中提出的一种模块&#xff0c;其基本原理是模拟人类视觉系统依赖上…

dbeaver免费、跨平台数据管理软件

下载 dbeaver是一款的数据库连接工具&#xff0c;免费&#xff0c;跨平台。 官网&#xff1a;DBeaver Community | Free Universal Database Tool下载地址&#xff1a;Download | DBeaver Community 点击下载 安装 修改安装路径 点击安装 点击完成 使用 连接mysql 已连接 点…

一个 SpringBoot 项目能同时处理多少请求?

目录 1 问题分析 2 Demo 3 答案 4 怎么来的&#xff1f; 5 标准答案及影响参数一Tomcat配置 6 影响参数二 Web容器 7 影响参数三 Async 1 问题分析 一个 SpringBoot 项目能同时处理多少请求&#xff1f; 不知道你听到这个问题之后的第一反应是什么&#xff1f; 我大概…

Maven - 编译报错:程序包 XXX 不存在(多模块项目)

问题描述 编译报错&#xff1a;程序包 XXX 不存在&#xff08;多模块项目&#xff09; 原因分析 检查依赖模块 pom 文件&#xff0c;看是不是引入了如下插件 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-pl…

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…

5.electron之主进程起一个本地服务

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

信钰证券:稀土板块集体爆发,十余股涨停!脑机接口新进展

脑机接口迎多重利好。 大盘指数早间延续反弹&#xff0c;深证成指一度涨逾3%&#xff0c;半导体芯片、医药医疗、军工等方向涨幅居前。白酒股震荡拉升&#xff0c;金徽酒涨超7%&#xff0c;老白干酒涨超5%&#xff0c;金种子酒、迎驾贡酒等跟涨。 高股息股逆势走弱&#xff0c…

使用ChatGpt和文心一言辅助文章创作

近期在写数字水浒系列文章&#xff0c;使用了ChatGpt和文心一言进行辅助创作&#xff0c;整体感受不错&#xff0c;提高了工作效率。 在使用过程中&#xff0c;感觉文心的中文能力更强一些&#xff0c;主要体现在&#xff1a; 1 语料库更大&#xff0c;比如对水浒传了解的更多…

Flask 入门7:使用 Flask-Moment 本地化日期和时间

如果Web应用的用户来自世界各地&#xff0c;那么处理日期和时间可不是一个简单的任务。服务器需要统一时间单位&#xff0c;这和用户所在的地理位置无关&#xff0c;所以一般使用协调世界时&#xff08;UTC&#xff09;。不过用户看到 UTC 格式的时间会感到困惑&#xff0c;他们…

数据结构-->线性表-->顺序表

对我个人来说&#xff0c;C语言基础相关的知识基本学完了&#xff0c;随后就该学数据结构了&#xff0c;希望以后自己复习能够用上今天自己写的哈哈。 如果你不理解什么是物理结构和逻辑结构&#xff0c;这里附上一个链接&#xff1a;逻辑结构和物理结构&#xff1a;逻辑结构与…

c语言贪食蛇游戏

演示视频 目录 一.概述 二.游戏开始前 修改控制台程序标题和大小 Win32 API GetStdHandle函数 GetConsoleCursorInfo函数和SetConsoleCursorInfo函数 SetConsoleCursorPosition函数 游戏开篇界面处理 创建地图 蛇身节点以及食物节点初始化 蛇身的初始化 整体蛇节点…