使用Git进行版本控制

参考:《Python编程从入门到实践》

  • 前言
  • 1、安装、配置 Git
    • 1.1 在Linux系统中安装Git
    • 1.2 在OS X系统中安装Git
    • 1.3 在Windows系统中安装Git
    • 1.4 配置Git
  • 2、创建项目
  • 3、忽略文件
  • 4、初始化仓库
  • 5、检查状态
  • 6、将文件加入到仓库中
  • 7、执行提交
  • 8、查看提交历史

前言

版本控制软件让你能够拍摄处于可行状态的项目的快照。修改项目(如实现新功能)后,如果项目不能正常运行,可恢复到前一个可行状态。
通过使用版本控制软件,你可以无忧无虑地改进项目,不用担心项目因你犯了错而遭到破坏。对大型项目来说,这显得尤其重要,但对于较小的项目,哪怕是只包含一个文件的程序,这也大有裨益。
在本文中,你将学习到如何安装Git,以及如何使用它来对当前开发的程序进行版本控制。Git 是当前最流行的版本控制软件,它包含很多高级工具,可帮助团队协作开发大型项目,但其最基本的功能也非常适合独立开发人员使用。Git通过跟踪对项目中的每个文件的修改来实现版本控制,如果你犯了错,只需恢复到保存的前一个状态即可。
说明:笔者使用的是CentOS 7的64位 Linux环境

1、安装、配置 Git

Git可在所有操作系统上运行,但其安装方法因操作系统而异。

1.1 在Linux系统中安装Git

要在Linux系统中安装Git,执行如下命令:

CentOS:
$ sudo yum install git
Ubuntu:
$ sudo apt-get install git

安装完成后可以通过下述命令查看安装的版本:

git --version

1.2 在OS X系统中安装Git

OS X系统可能自带Git,因此在安装前先执行命令:‘git --version’。如果在输出中查看到具体的版本号,说明系统已经安装了Git;如果看到的是提示安装或升级Git的信息,根据屏幕显示的提示信息操作即可。
也可以访问链接:https://git-scm.com/ ,单击链接Downloads,再点击适合你所用的系统的安装程序。

1.3 在Windows系统中安装Git

访问:https://gitforwindows.org/,单击Download。

1.4 配置Git

Git跟踪谁修改了项目,哪怕参与项目开发的人只有一个。为此,Git需要知道你的的用户名和电子邮件地址。用户必须提供用户名,但是可以使用虚构的电子邮件地址:

$ git config --global user.name "wsy"
$ git config --global user.email "username@example.com"

如果忘了这一步,在首次提交时,Git将提示用户提供这些信息

2、创建项目

  • 在所用系统中创建一个名为 git_practice 的文件夹作为项目目录;
  • 在项目目录下创建空文件:module.py
  • 在项目目录下创建一个简单的python程序:hello_world.py 作为需要跟踪的项目文件,输入以下内容:
import module

print('Hello Git world!')

注:这里之所以需要创建一个空的module.py文件是因为在程序hello_world.py要引用他,这样在程序运行后就会生成一个__pycache__文件夹,这个文件夹我们后续不需要让Git跟踪它,所以要对它做忽略操作。

关于__pycache__文件夹:python解释器会对 *.py 文件进行编译,并且将编译结果保存到__pycache__目录下。在下次执行工程时,如果发现这个 *.py 没有被修改过,那么就会跳过编译这一步,直接执行在__pycache__中已经完成编译的.pyc文件。而且,只有被导入的module才会生成对应的 *.pyc文件,生成的 *.pyc 文件的命名规则是: ‘module.interpreter_version.pyc’。这样做的好处是,如果需要执行比较大的工程文件,那么会节约很多时间。

整个创建流程如下:
在这里插入图片描述

3、忽略文件

上面说过,扩展名为 .pyc 的文件是根据 .py 文件自动生成的,因此无需让Git跟踪它们。这些文件存储在 pycache 目录中。

为了让Git忽略__pycache__目录,执行下属操作:

  • 在项目目录下创建一个名为 .gitignore 的特殊文件,该文件以句点打头,且没有扩展名;
  • .gitignore 中添加下面一行内容:
__pycache__/

这让Git忽略__pycache__目录中的所有文件。使用 .gitignore 可避免项目混乱,开发起来更容易。

注:如果你使用的编译器是 python2.7,请将这行内容改为 *.pyc。因为python2.7不会自动创建目录 pycache,它将每个.pyc文件都存储在相应.py文件所在目录中。其中的星号(*)让Git忽略所有扩展名为.pyc的文件。

流程如下:
在这里插入图片描述

4、初始化仓库

至此,我们创建了一个目录,其中包含一个python文件和一个 .gitignore 文件,下面可以初始化一个Git仓库了。为此,打开一个终端窗口,切换到文件夹 git_practice,并执行如下命令:

git init

如下:
在这里插入图片描述输出表明,Git在git_practice中初始化了一个空仓库。仓库里是程序中被Git主动跟踪的一组文件。Git用来管理仓库的文件都存储在隐藏的 *.git/中,用户无需与该目录打交道,但是千万不能删除该目录,否则将丢失项目的所有历史记录

5、检查状态

执行其它操作前,先执行下述命令来看一下项目的状态:

git status

在这里插入图片描述
在Git中,分支(master)是项目的一个版本。从上述输出可以看出,目前项目位于分支master上。用户每次查看项目状态时,输出都将指出你位于分支master上。接下来的输出表明,我们将进行初始提交。提交是项目在特定时间点的快照。
接着,Git指出了项目中未被跟踪的文件,因为到目前为止我们还没有告诉它要跟踪哪些文件。
最后,输出提示我们“提交为空,但是存在尚未跟踪的文件”,并告知如何建立跟踪,即使用 git add。
所以下面的任务就是将文件加入到仓库中。

6、将文件加入到仓库中

下面将上述指出的文件加入到仓库中,并再次检查状态。
可以通过下述两种方法进行添加:

1、逐个文件添加
git add .gitignore
git add hello_world.py
git add module.py

2、整体添加
git add .

命令 git add . 将项目中未被跟踪的所有文件都加入到仓库中,不需要一个文件一个文件的添加,这对于改动文件较多的项目来说很方便。它不提交这些文件,而只是让Git开始关注它们。下面我们再检查项目状态时,发现Git找出了需要提交的一些修改,且标出了新添加到仓库中的文件。
也可以理解为,通过 git add 将文件从工作目录添加到了一个暂存区
在这里插入图片描述

7、执行提交

下面开始执行第一次提交,提交结束后再次查看项目状态,如下:
在这里插入图片描述我们执行命令:commit -m "Started project." 以拍摄项目的快照。其中,标志 -m 让Git将接下来的消息(Started project.)记录到项目的历史记录中(也可以把这个消息当成是本次提交的一个title,用于辨识)。输出表明我们在分支 master上,且有3个文件被修改了。
现在我们再检查状态时,发现我们在分支master上,且工作目录是干净的。这是用户每次提交项目的可行状态时都希望看到的结果。如果显示的消息不是这样的,请仔细阅读,很可能是在提交前忘记了添加文件。

8、查看提交历史

Git记录所有的项目提交,通过命令 git log即可查看提交历史,下面来看一下提交历史:
在这里插入图片描述用户每次提交时,Git都会生成一个包含40字符的独一无二的引用ID,它记录提交是谁执行的、提交的时间以及提交时指定的消息。并非在任何情况下你都需要所有的这些信息,因此Git提供了一个选项,让你能够打印提交历史条目更加简单的版本:
在这里插入图片描述标志 --pretty=oneline指定显示两项最重要的信息:提交的引用ID以及为提交记录的消息(title)。

未完待续。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GridBagLayout GridBagConstraints 笔记231130

实例化使用模板 GridBagLayout gbl new GridBagLayout(); // gbl.columnWidths new int[]{200,200,200}; // 用数组设置列 // gbl.rowHeights new int[]{100,100,100,100,100}; // 用数组设置行GridBagConstraints gbc new GridBagConstraints();/*** gridBagConstrain…

2023,还不知道什么是iPaaS的企业要亏大了!

iPaaS是一种基于云的工具,用于将现有的应用程序和数据流链接到新的服务当中。本文就来介绍关于iPaaS的诞生历程和优势。 2023年,还不知道iPaaS是什么的企业亏大了! iPaaS是什么 iPaaS是Intergration Platform as a Service(集成平…

经典目标检测YOLO系列(一)引言_目标检测架构

经典目标检测YOLO系列(一)引言_目标检测架构 一个常见的目标检测网络,其本身往往可以分为一下三大块: Backbone network,即主干网络,是目标检测网络最为核心的部分,backbone选择的好坏,对检测性能影响是十…

阿里云服务器租用价格分享,阿里云服务器热门配置最新活动价格汇总

在我们购买阿里云服务器的时候,1核2G、2核2G、2核4G、2核8G、4核8G、8核16G、8核32G等配置属于用户购买最多的热门配置,1核2G、2核2G、2核4G这些配置低一点的云服务器基本上能够满足绝大部分个人建站和普通企业用户建站需求,而4核8G、8核16G、…

html通过CDN引入Vue使用Vuex以及Computed、Watch监听

html通过CDN引入Vue使用Vuex以及Computed、Watch监听 近期遇到个需求,就是需要在.net MVC的项目中,对已有的项目的首页进行优化,也就是写原生html和js。但是咱是一个写前端的,写html还可以,.net的话,开发也…

【小白专用】php执行sql脚本 更新23.12.10

可以使用 PHP 的 mysqli 扩展来执行 SQL 脚本。具体步骤如下: 连接到数据库;打开 SQL 脚本文件并读取其中的 SQL 语句;逐条执行 SQL 语句;关闭 SQL 脚本文件;关闭数据库连接。 以下是通过 mysqli 执行 SQL 脚本的示例…

nginx中Include使用

1.include介绍 自己的理解:如果学过C语言的话,感觉和C语言中的Include引入是一样的,引入的文件中可以写任何东西,比如server相关信息,相当于替换的作用,一般情况下server是写在nginx.conf配置文件中的&…

springboot+ssm+java植物养护花卉花圃管理系统

花圃管理系统,主要的模块包括查看个人中心、游客管理、员工管理、植物种类管理、植物信息管理、植物绿化管理、花圃园区管理、商品服务管理、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作…

LabVIEW与Tektronix示波器实现电源测试自动化

LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域,自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix MDO MSO DPO2000/3000/4000系列示波器,开发一个自动化测试项目。该项目旨在自动…

winError 123错误的解决

在卸载重载anaconda后,打开anaconda prompt窗口运行conda命令会报错,错误如下所示: 百度了一下是自己环境变量有问题,所以我打开环境变量: 然后打开系统的环境变量之后,查看到我上诉错误的那个环境变量…

ISP IC/FPGA设计-第一部分-MT9V034摄像头分析(0)

MT9V034为CMOS图像传感器,有着极其优秀的图像成像性能,同时支持丰富的功能用于isp的开发;MT9V034 的HDR宽动态、10bit数据深度、RAW格式(bayer阵列)图像、dvp和lvds接口、60fps正是学习isp开发的理想传感器&#xff1b…

LainChain 原理解析:结合 RAG 技术提升大型语言模型能力

摘要:本文将详细介绍 LainChain 的工作原理,以及如何通过结合 RAG(Retrieval-Aggregated Generation)技术来增强大型语言模型(如 GPT 和 ChatGPT 等)的性能。我们将探讨 COT、TOT、RAG 以及 LangChain 的概…

通过虚拟机安装Open5GS 和UERANSIM记录

目录 wsl虚拟环境尝试失败 step1 安装wsl: step2下载Ubuntu 20.04.6 LTS: step3升级wsl: step4生成用户: step5 linux下安装软件需要的镜像: step6 安装图形界面xfce和浏览器: step6 安装chrome virtual box安装ubuntu step7&#xf…

C/C++ 题目:给定字符串s1和s2,判断s1是否是s2的子序列

判断子序列一个字符串是否是另一个字符串的子序列 解释:字符串的一个子序列是原始字符串删除一些(也可以不删除)字符,不改变剩余字符相对位置形成的新字符串。 如,"ace"是"abcde"的一个子序…

【js】数字字符串的比较

今天排查一个日历组件的bug,month打印出来是9,month1打印出来为12,比较month和month1大小进入if或者else,奇怪的是每次都是进入的month>month1语句里面 打印typeOf(a)和typeOf(b&#xff09…

数据链路层的作用和三个基本问题

目录 一. 数据链路层的作用二. 数据链路层解决的三个问题2.1 数据链路和帧2.2 三个基本问题(重要)2.2.1 封装成帧2.2.2 透明传输2.2.3 差错检测 \quad 一. 数据链路层的作用 \quad \quad \quad 光有链路不能传输数据, 还要加上协议, 这样才是数据链路 数据链路层的作用就是负责…

以太坊虚拟机EVM介绍,智能合约详解

以太坊为例:什么是智能合约?智能合约怎么部署、调用、执行?智能合约的原理?智能合约存在哪儿?如何区分调用的是智能合约?世界状态数据库、EVM、智能合约它们之间的关系? 什么是智能合约 指的是…

Matlab论文插图绘制模板第130期—函数曲面图

在之前的文章中,分享了Matlab函数折线图的绘制模板: 函数三维折线图: 函数网格曲面图: 进一步,再来分享一下函数曲面图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中&a…

新公众号没有留言功能怎么办?

为什么公众号没有留言功能?从2018年2月开始,新注册的微信公众号取消了留言功能,原因是为了规避一些营销号通过虚假留言骗取读者信任。不过大部分公众号运营者对TX此举感到失望,一方面大片的留言就像店前排队的顾客,能体…

Java - java.util.Date和java.sql.Date的区别

java.sql.Date是java.util.Date的子类 因此,两者都有getTime方法,java.sql.Date没有重写,返回long类型,即时间戳: the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this date. publ…