白话谈 Git

一、Git是什么?

定义

Git 的定义 是 一款免费、开源的版本控制系统。

免费不必多说;开源则是指将源代码公布,并允许公众查看、修改代码。

如果我们将项目每一个节点处的修改(这些节点可能是一些标志性事件,比如第一个章节完成、草稿完成、审核通过; 也可能是一些时间节点,比如下班回家)看做是一个版本,对这些版本的记录、查看、更新等操作即是版本控制。

Git?

Git 诞生于 2005 年,创作者是 Linux 之父 Linus Torvalds。

Git 中文翻译是 “傻子;饭桶;无用的人”。

为什么这样一款流行的工具会起这样一个名字呢?

坊间传说Linus 曾说过这样一句话,“我是个自负的混蛋,所有我的项目都以我自己的名字命名,先有 Linux, 现在是 Git”。

Linus 也曾在公共场合表示过对 Git 的看法 “Git,the stupid content traker”。 Git, 傻瓜内容追踪器。如傻瓜相机一样, 这里的 “傻瓜”指的是让复杂的操作变得更简单。

也有人认为 Git 是 “Global information tracker” 的缩写。如果将项目整体认为是“全局”,项目文件内容认为是 “信息”,文件内容的增删改查认为是“跟踪”, Git的本质的确是 “全局信息跟踪”。

分布式

与传统的版本控制工具不同的是,Git 采用分布式管理。我们在远程服务器建立中央仓库,团队每位成员将其同步到本地。之后团队成员每做一次修改,即将项目最新状态上传到中央仓库,并通知团队其他成员拉取中央仓库项目状态以更新他们的本地仓库。这是一种高效的团队协作方式。我们取某一个时间节点来看,项目的最新状态确实是分布式地存储在团队各个成员的本地仓库中的。

 

二、为什么要用Git?

备份文件

有没有人会担心突然哪一天电脑坏掉了,不能用了呢?为了不使工作成果消失,一般我们会使用 U盘、光盘或者云端工具如百度网盘、360云盘、Google Drive等留存一份副本。同样, Git 也具有这种功能。当我们在中央仓库建立唯一副本后,无论我们是在公司、家里、酒店、会所等任何有网有电脑的地方,都可以快速还原工作环境。

记录历史

每一次提交项目修改时,Git 会记录提交者、提交日期等信息,并自动识别项目发生变化的地方。同时,我们还可以为每次提交添加注释以帮助我们回忆和梳理项目历史。

Git 对于二进制文件的支持并不算友好,它不能识别文件发生变化的区块,因此会带来一些限制,之后会提到。不过我们依旧可以用它来记录一些信息。

切换版本

在进行长篇大论的写作时,往往会遇到这样一些情况,想要删除某一个段落、或者替换一些数据,但又怕之后会用到。于是我们建立了一份副本。可这样的情景多了,文档结构就会变得很复杂,当然我们可以通过标注文件名称简单管理一下。于是,我们得到了多个版本、看起来比较混乱的文档结构。

而Git 则通过版本控制很好地解决了这个问题。在每次提交时, Git 生成一个HASH值作为版本号,我们可以通过查看项目历史找到想要的版本,并通过版本号将当前版本回滚到指定版本。

团队协作

即使一个团队里的每个人都能够独当一面,在遇到更复杂的情况和更难对付的对手,他们仍然需要合作,或合力一处攻破难关,或各施所长处理不同的业务。然而,若是没有一套良好的合作机制,不能够有效地进行团队协作,所起的作用是事倍功半的。

假设团队合作一个项目,我们可以让擅画图的去作图,文笔好的去作文,负责人组织全局结构,协调各部分资源。这样不仅使得团队成员术业专攻,也使得业务的每个部分得到最专业的打磨,同时有效地缩短了项目的开发周期。

举个传统方式团队协作的例子,Jack在开发项目时,发现某一部分需要 John完成,于是他把文件复制了一份发给 John,之后继续自己的工作。第二天John将文件传回来,可这时Jack并不知道John对文件做了哪些修改,也无法清楚地分辨出自己做过的变动,除非他们之间事先做过良好清晰的约定或者Jack等待John完成后再继续自己的工作。

使用Git则会极大地简化这一过程。Jack将自己的工作内容上传到远程仓库中,John复制远程仓库内容到本地,之后两个人各自进行自己工作。当John完成工作时,通知Jack拉取项目更新,在拉取过程中, Git会自动合并双方的修改为一体,如果项目成员的修改发生冲突(比如修改同一处),Git 允许你手动选择使用什么内容来填充冲突处。

这一功能也得益于Git的版本控制机制。在文件内容发生修改时,Git会将发生修改的部分划分为区块进行记录,以区块为单位从而实现自动合并。我们之前说到 Git对于二进制文件的支持并不算友好,因为Git不能识别文件发生变化的区块,它会将二进制数据流视作整个区块,因此Git并不能自动合并不同版本的二进制文件, 如 word、excel、ppt 等。

工作透明

在软件团队中,有一个不成文的习惯,团队成员在每天晚上下班前,先将一天工作内容上传到中央仓库,早上上班时先从中央仓库拉取项目更新。由于项目的每个成员都可以通过版本历史记录查看其它成员的工作内容和项目进展,因此也就形成了团队内部工作透明的机制。

 

三、怎么使用Git?

下载安装

Git 全平台通用,我们可以在官网上下载安装。

Git 命令

在上面的内容中,我们提到过 Git 相关一系列操作,如拉取、提交、查看历史等。可是究竟要如何实现呢?

Git 为这些操作提供了一系列配套命令,常用命令如

# 克隆远程仓库
git clone
# 初始化一个仓库
git init
# 将文件修改添加到缓冲区
git add
# 移动或重命名一个文件、一个文件夹或快捷方式
git mv
# 回滚项目版本
git reset
# 将文件修改从缓冲区中移除
git rm
# 显示项目当前状态
git status
# 显示项目日志
git log
# 显示项目分支
git branch
# 切换分支或重置文件
git checkout
# 提交项目修改到仓库
git commit
# 对比版本之间、版本和当前工作状态之间的差异
git diff
# 合并文件
git merge
# 将提交放在另一个基的上面
git rebase
# 创建、显示、校验标签对象
git tag
# 拉取其他仓库的对象和索引
git fetch
# 拉取其他仓库内容并和本地分支合并
git pull
# 更新远程仓库
git push

同时,这些命令还有配套的一些参数,之后会推荐一些相关教程。

Git GUI

如果觉得对着黑盒子敲命令很不舒服的话,你也可以使用 Git 的图形界面。

推荐一款我常用的 GUI,Source Tree。

Git 工作流程

下面简单讲述两个 Git 的基本工作流程。

提交项目修改

  1. 文件发生修改时,选择想要提交的内容添加到缓冲区

  2. 提交缓冲区内容到仓库,Git 会自动生成版本记录、版本号等

可能有人会有疑问,为什么不直接提交修改到仓库呢?

这里,缓冲区起到一个缓冲的作用,允许你考虑和修改用哪些内容生成此次版本。

团队协同合作

上文曾简单描述过这个流程:

  1. 团队在远程服务器上建立中央仓库

  2. 团队成员在本机上各自建立本地仓库

  3. 成员提交更新到中央仓库

  4. 其他成员拉取项目最新提交以更新本地仓库

  5. 如此循环往复,协同推进项目进展

 

四、相关链接

Git 下载地址

https://git-scm.com/

Git 英文教程(基本原理)

https://jwiegley.github.io/git-from-the-bottom-up/

Git中文教程(命令用法)

https://github.com/lonelydawn/git-recipes)

Git GUI 推荐

Source Tree: https://www.sourcetreeapp.com/

GitHub 官方 GUI: https://desktop.github.com/

Git项目托管平台推荐

GitHub: https://github.com/

BitBucket: https://bitbucket.org/

码云(国内平台,备受好评!): https://gitee.com/

关于 Git 项目托管平台有一点要说的是,GitHub 虽然是最大 Git 开源项目社区,但它的 私有库是收费的,而 BitBucket 则提供限量免费私有库,这对中小型公司是比较友好的。

五、PS

配套 PPT 如有需要, 请自取:

百度网盘链接


转自:https://my.oschina.net/lonelydawn/blog/1633511

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值