git工具

Git工具

1 为什么学Git

问:为什么学PyCharm呢?

方便个人代码编写和管理。

PyCharm只是方便个人编写和代码管理,在公司中,一般都是多人合作开发,所以,多人开发的项目中,如何进行管理呢?

PyCharm搞不定。

这个时候就需要使用版本控制工具了。

Git就是其中一款版本控制工具。

2 版本控制简介

2.1 文件版本控制

人肉版本控制缺点

  • 操作麻烦, 每次都需要复制 → 粘贴 → 重命名
  • 无法通过文件名知道具体做了哪些修改
  • 容易丢失, 如果硬盘故障或不小心删除,文件很容易丢失
  • 协作困难, 需要手动合并每个人对项目文件的修改,合并时极易出错

2.2 版本控制软件(Version Control Software)

概念: 版本控制软件是一个用来记录文件变化,以便将来查阅特定版本修订情况的系统,因此有时也叫做版本控制系统。

通俗的理解: 把手工管理文件版本的方式,改为由软件管理文件的版本;这个负责管理文件版本的软件,叫做版本控制软件。

SVN(Subversion):集中式版本控制系统,代码和版本控制数据存储在中央仓库中。

Git:分布式版本控制系统,每个开发者都有完整的版本历史。

2.3 版本控制软件优点

操作简便:只需要记几组简单的终端命令或者图形化界面点选操作,即可快速上手常见的版本控制软件

易于对比:基于版本控制软件提供的功能,能够方便地比较文件的变化细节,从而查找出导致问题的原因

易于回溯:可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态

不易丢失:在版本控制软件中,被用户误删除的文件,可以轻松的恢复回来

协作方便:基于版本控制软件提供的分支功能,可以轻松实现多人协作开发时的代码合并操作

2.4 版本控制软件的发展

本地版本控制系统(RCS)

特点:使用软件来记录文件的不同版本,提高了工作效率,降低了手动维护版本的出错率

缺点:

① 单机运行,不支持多人协作开发

② 版本数据库故障后,所有历史更新记录会丢失

集中式版本控制系统(SVN)

特点:基于服务器、客户端的运行模式

① 服务器保存文件的所有更新记录

② 客户端只保留最新的文件版本

优点:联网运行,支持多人协作开发

缺点:

① 不支持离线提交版本更新

② 中心服务器崩溃后,所有人无法正常工作

③ 版本数据库故障后,所有历史更新记录会丢失

分布式版本控制系统(Git)

特点:基于服务器、客户端的运行模式

① 服务器保存文件的所有更新版本

② 客户端是服务器的完整备份,并不是只保留文件的最新版本

优点:

① 联网运行,支持多人协作开发

② 客户端断网后支持离线本地提交版本更新

③ 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复

3 Git简介

Git的诞生源于Linus Torvalds(Linux 操作系统的创始人)对当时使用的版本控制系统BitKeeper的不满。BitKeeper是一个商业版本控制工具,它在Linux内核项目中被使用,但由于商业许可的限制,Linux社区决定寻找一个开源的替代方案。

Linus Torvalds于2005年4月发布了Git的第一个版本。这个版本非常简陋,核心目标是解决Linux内核项目的版本控制问题。

3.1 什么是git

Git是一个开源的分布式版本控制系统

  • 目前世界上最先进、最流行的版本控制系统
  • 可以快速高效地处理从很小到非常大的项目版本管理

**特点:**项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性

Git之所以快速和高效,主要依赖于它的如下两个特性:

  • 直接记录快照,而非差异比较

  • 近乎所有操作都是本地执行

在Git中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息

  • 断网后依旧可以在本地对项目进行版本管理

  • 联网后,把本地修改的记录同步到云端服务器即可

3.2 Git的安装

在开始使用Git管理项目的版本之前,需要将它安装到计算机上。可以使用浏览器访问如下的网址,根据自己的操作系统,选择下载对应的Git安装包:

https://git-scm.com/downloads

安装十分简单,一路下一步即可。

Pycharm中配置git

3.3 概念区分

shell 复制代码
# 1.git
git是版本控制工具。它是个工具。
可以帮助团队进行更好地协作开发。
它只是众多的版本控制工具其中一个而已。比如jira,SVN。
现在行业内都用git。

# 2.github
代码托管平台。全球最大的,没有之一。
换言之,放到github的代码都是开源代码。
可以让任何人在任何地方随意访问。
github被微软收购了,github是微软的了。
在工作中,如果需要查阅优秀的代码/项目,都可以来这里找找。
都是用git来操作。

# 3.gitee
国内版的github,别名码云。
有了github,为什么还有有gitee呢?
github是国外的服务器,有时候需要科学上网。
用git来访问操作。

# 4.gitlab
gitlab,也是类似于github的软件(免费使用),一般用于公司内部的git私仓。
公共仓库:开源的,大家都能访问的代码仓库(文件夹)。
私人仓库:闭源的,不允许别人访问的仓库。
国内的大厂,都会有自己的git内部代码平台,比如腾讯:工蜂。

git:工具,可以把代码推送到平台上。

平台:仓库。(公共仓库,私人仓库)

3.4 git架构

解释:

shell 复制代码
仓库:简单理解,就是文件夹。
本地仓库:文件夹在本地创建的。图示就是版本库。
远程仓库:代码托管平台上。github、gitee、gitlab、工蜂
工作区:就是干活的地方。在哪个分支干活,哪里就是工作区。
暂存区:只是暂存代码而已,如果代码OK,没有问题,则一定要commit(提交)。

# 注意:不能往主分支提交有bug的代码。最多在你自己个人分支玩玩。

3.5 git的分支

3.5.1 分支的概念与作用

在日常工作中,我们经常会增加/修改代码, 如新功能开发、bug修复、代码重构等等。在这些情况下, Git的分支功能会发挥巨大的作用:它允许你在代码库中创建多个不同的分支,每个分支代表着代码库的不同状态,方便开发人员在多个分支之间进行切换和修改代码。

当我们在Git中创建一个新的分支时:

  • git会以当前所在分支的状态作为基础来创建一个新的分支,并保留了当前分支的所有提交历史
  • 可以在新分支上独立地进行开发、修改代码,并在需要时将代码合并回原始的分支
  • 可以保持代码库的主分支干净整洁,并且方便开发人员在不同的功能或任务之间进行切换。

Git分支还有许多其他的用途,比如

  • 创建临时性的修复分支来修复线上问题
  • 创建独立的实验分支用于尝试新的技术
  • 创建发布分支用于发布软件版本等等

Git分支是一个非常有用的工具,可以帮助程序员更好地组织和管理代码变更,提高开发效率和代码质量

在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目 功能的开发,例如:

3.5.2 主分支(master)

在初始化本地 Git 仓库的时候,Git 默认已经帮我们创建了一个名字叫做 master 的分支。通常我们把这个 master 分支叫做主分支。

在实际工作中,master主分支的作用是:用来保存和记录整个项目已完成的功能代码。

因此,不允许程序员直接在 master 分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃。

3.5.3 功能分支

由于程序员不能直接在 master 分支上进行功能的开发,所以就有了功能分支的概念。

功能分支指的是专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发且测试 完毕后,最终需要合并到 master 主分支上,如图所示:

3.6 项目托管平台的介绍与应用

专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台 主要有以下 3 个:

  • Github (全球最牛的开源项目托管平台,没有之一)
  • Gitlab (对代码私有性支持较好,因此企业用户较多)
  • Gitee (又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)

Github 是全球最大的开源项目托管平台。只支持 Git 作为唯一的版本控制工具,GitHub可以:

① 关注自己喜欢的开源项目,为其点赞打 call

② 为自己喜欢的开源项目做贡献(Pull Request)

③ 和开源项目的作者讨论 Bug和提需求 (Issues)

④ 把喜欢的项目复制一份作为自己的项目进行修改(Fork)

⑤ 创建属于自己的开源项目

⑥ etc...

本次实战使用gitee码云作为项目托管平台

3.6.1 申请成为项目开发者

注册码云 gitee.com

properties 复制代码
邀请链接:
https://gitee.com/weiyunfei/bj-ai22_datamining/invite_link?invite=e015fe382b80530932d82f09758bfd0318cb9730a88569beb7993663152babc549008aef05641c9903eac9232b9ccfc5
properties 复制代码
在申请之前, 首先需求先将自己的账户名字更改为:  组号_姓名  如果不是此格式, 不允许通过 
例如名字为: 组名_姓名拼音

如何更改用户名:

3.6.2 配置ssh公钥

前期确认工作:

首先确认在码云是否配置了SSH公钥信息

如何生成公钥:

在windows下我们可以使用Git Bash.exe来生成密钥,可以通过开始菜单或者右键菜单打开Git Bash

git bash 执行命令,生成公钥和私钥

macos打开命令行终端,进入**~/.ssh**目录,执行命令后在.ssh目录下就生成了公钥和私钥

sh 复制代码
ssh-keygen -t rsa

(四个回车即可)

执行命令完成后,在window本地用户.ssh目录C:\Users\用户名\.ssh下面生成如下名称的公钥和私钥:

id_rsa.pub文件用记事本打开, 复制里面的内容, 放到下面截图中 对应的文本框中既可。

ssh 密钥配置

​ 密钥生成后需要在码云上配置密钥本地才可以顺利访问

在key部分将id_rsa.pub文件内容添加进去,然后点击"Add SSH key"按钮完成配置

配置完后,就可以从Gitee远程仓库拉取代码到本地了。

先成为仓库的开发者,然后才能进行git操作

邀请链接:

properties 复制代码
https://gitee.com/weiyunfei/bj-ai22_datamining/invite_link?invite=e015fe382b80530932d82f09758bfd0318cb9730a88569beb7993663152babc549008aef05641c9903eac9232b9ccfc5
3.6.3 终端操作Git

在本地磁盘上, 随便找一个目录。右键点击克隆

shell 复制代码
# 1.拉取代码的命令
git clone git@gitee.com:weiyunfei/bj-ai22_datamining.git
sh 复制代码
git add test.py  # 添加文件
git status  # 查看文件状态
git commit -m '注释'  # 提交文件
git push  # 推送文件
git pull  # 拉取文件
git branch  # 查看分支
git branch  分支名称  # 创建分支
git branch -d 分支名称  # 删除分支
git checkout 分支名称  # 切换分支
git merge 分支名称  # 合并分支
git log  # 查看提交历史, 查看提交版本号
git checkout 版本号  # 回退某个版本
3.6.4 Pycharm操作Git(推荐)
3.6.4.1 克隆Git项目

点击如下按钮,输入git链接,点击clone即可

python 复制代码
git@gitee.com:weiyunfei/bj-ai22_datamining.git

git clone后,用pycharm打开对应文件夹

设置git,在设置中配置git安装路径

3.6.4.2 新建并切换分支

新建分支

新建分支,然后推送(push)一下, 在gitee中可以看到新建的分支

每个人分子名称格式group组号_姓名拼音,例如:group01_weiyunfei

后续就可以在pycharm中开发, 在自己的分支中开发, 开发后把相关的内容提交到仓库中即可, 并且可以每日推送到远端仓库

切换分支

3.6.4.3 Git操作
  • commit 文件提交到本地 注意:.idea目录下的文件不要提交

  • push 文件推送到远端

  • checkout 回退到某次提交版本

  • pull 拉取/更新远端文件

文件提交(commit)到版本库(本地)

文件推送(push)到远程仓库

  • 开发的时候, 多次commit不一定每次都要push,只要commit之后就会有快照, 就可以恢复之前的状态
  • 有bug的代码 不要做commit/push的操作
  • 不commit直接push, 操作是允许的, 但是没有实际效果
  • push的内容, 都是commit之后的

git更新/拉取

提交之前, 要先pull一下,确认把远端最新的代码更新下来

文件回退到之前版本

选择某一次提交, 然后checkout

首次,会提示yes or no,填写yes

3.6.4.4 合并(Merge)分支操作

A 分支的内容Merge到 B (group_0X)分支,A分支内容要先commit->push

checkout签出 到B(group_0x)分支

右键单击文件夹 git → merge

选择从哪个分支里merge,点击Merge,此时是Merge到本地, 再push到远端

merge冲突的解决:

多个人改同一份代码可能就会出现冲突问题

master和group01分支分别修改test.py commit push后,master合并group01时会发生冲突

项目目录tips:

  • code 源代码.py文件、notebook文件、数据集

  • PD(Project document) 项目文档

e

外链图片转存中...(img-pxPAFXel-1768226756629)

外链图片转存中...(img-1Ds9HWso-1768226756629)

选择从哪个分支里merge,点击Merge,此时是Merge到本地, 再push到远端

外链图片转存中...(img-G12FkEex-1768226756629)

merge冲突的解决:

多个人改同一份代码可能就会出现冲突问题

master和group01分支分别修改test.py commit push后,master合并group01时会发生冲突

外链图片转存中...(img-jzkbPsUR-1768226756629)

外链图片转存中...(img-32X1PhU9-1768226756629)

项目目录tips:

外链图片转存中...(img-1KB41Vdx-1768226756629)

  • code 源代码.py文件、notebook文件、数据集

  • PD(Project document) 项目文档

  • memo 开发的过程中, 遇到了哪些问题, 如何解决的, 在这里记录

相关推荐
一起努力啊~2 小时前
算法刷题--链表
数据结构·算法·链表
mit6.8242 小时前
dfs|并查集
算法
rgeshfgreh2 小时前
2025年Python安装全指南
python
数据大魔方2 小时前
【期货量化进阶】期货Tick数据分析与应用:高频数据入门(TqSdk完整教程)
python·算法·数据挖掘·数据分析·github·程序员创富·期货程序化
冰西瓜6002 小时前
从项目入手机器学习——(一)数据预处理(上)
人工智能·机器学习
爱吃羊的老虎2 小时前
Streamlit:快速创建应用界面,无需了解 Web 开发
前端·python
小杨同学492 小时前
C 语言实战:堆内存存储字符串 + 多种递归方案计算字符串长度
数据库·后端·算法
君义_noip2 小时前
【模板:字符串哈希】信息学奥赛一本通 1455:【例题1】Oulipo
算法·哈希算法·信息学奥赛·csp-s