Doc as Code (4):使用Git做版本管理,而不是使用目录做版本管理

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 

在引入版本管理工具之前,文档工程师使用文件系统提供的功能来管理文件。大家是这样工作的:

  • 文件按照分类放在不同的目录里,使用编辑器(如:MS Word)打开文档进行编辑。

  • 如果改版,则新创建一个目录并将文件拷贝一份进行编辑。

于是,出现了这种目录结构:

我们把上边这种方法叫做使用目录做版本管理。 

Git是版本管理工具,出来很多年,在软件开发领域得到广泛的应用,已经非常成熟稳定了。

有些文档团队已经使用Git来管理文档。不过,鉴于以前的习惯,将不同版本的文档放在不同目录的方法被沿袭下来

但是,这种方式只是使用Git来让团队成员协作和共享文档,它并没有很好地利用Git的版本管理的能力

今天就来说说怎样使用Git更好地进行版本管理。

- 1 -

分支

版本控制系统最初是为软件研发设计的。顾名思义,分支就是从主线上分离出来进行另外的操作,而又不影响主线,主线又可以继续干它的事,最后分支做完事后合并到主线上

几乎所有的版本控制系统(SVN, Git等)都以某种形式支持分支。实现方式有不同,但是基本思路是一样的。 

通过下边的分支使用的例子,看看怎么用。 

- 2 -

分支的使用

下边是使用分支的一种方法(不是唯一方法)。 箭头方向代表时间向前的方向。 

1. 为产品初始编写文档

创建Git仓库的时候,它有一个默认的分支,这个分支叫做master。

提交的更改都放在master这个分支。 

2. 当1.0版本完成定稿

创建1.0分支,用来记录这一时刻的内容。后续新功能的开发继续提交到master分支上。

为什么要创建分支呢?主要是记录这个时刻的内容,待到将来任何一个时间点都能获取现在的内容。

3. 当1.1版本完成定稿

创建1.1分支,用来记录这一时刻的内容。后续新功能的开发继续提交到master分支上。

4. 当2.0版本完成定稿

创建2.0分支,用来记录这一时刻的内容。后续新功能的开发继续提交到master分支上。

这样最终形成一个像树一样的结构(倒过来的树)。通过这些分支,随时可以取得这些节点的内容。 

- 3 -

分支与目录

可以看到使用Git的分支作为版本,替代了之前用目录作为版本。 在文件系统中,不再有一个1.0, 1.1这样的目录。  

这样做的好处有几点:

1. 支持同时编辑多个版本的内容

假设我们为一个软件编写文档。如上边分支的图,我们已经发布了2.0版本的文档,现在正在编写下一个版本的新功能文档。这时2.0版本发现一个bug,我们需要去2.0版本修改文档然后发布。 

这时我们使用Git的分支切换的功能,切换到2.0这个版本分支

神奇的地方在于,它将当前工作目录中的内容回退/切换到2.0版本的目录和文件内容。 在创建2.0这个分支这个时间点以后新加的目录、新加的文件都没有了。 (如果切换回master分支,又都有了)

这时候对文档进行改动并提交,这个变更会被放在2.0这个分支上。 

2. 将一个版本的变更合并到另外一个版本上

假设这个bug在最新版中也被修复了,我们只需要将2.0分支上的修改合并到master上,这样为修复这个bug更改的文档内容都会被合并到master上。 

如果使用目录进行版本管理,无法做到合并。我们如果直接将2.0版本的文件覆盖到master上,在master上做的所有更改都将丢失。使用Git的分支合并功能,则不会丢失。 

3. 查看一个文件的所有变更历史

如果当前分支是master分支,我们可以看到这个分支上所有文件的所有历史提交记录(从最初加入文件开始)。

点击进去可以看到这次到底修改了什么:

(红色代表删除的行,绿色代表增加的行)

在使用目录管理版本的情形,则看不到一个文件的所有历史,只能看到当前这个版本的历史。 

原因是我们创建新版是将文件从一个目录拷贝到另外一个目录。拷贝前的文件和拷贝后的文件并没有关联关系,无法追溯。

通过摩拿官网联系我们。

### 如何在 Visual Studio Code 中配置和运行 DeepLabV3+ #### 配置环境 安装必要的依赖库对于成功运行DeepLabV3+至关重要。确保已安装Python解释器,并创建一个新的虚拟环境来管理项目所需的包。 ```bash python -m venv deeplab_env source deeplab_env/bin/activate # Linux/MacOS deeplab_env\Scripts\activate # Windows ``` 接着,安装TensorFlow和其他必需的软件包: ```bash pip install tensorflow matplotlib pillow numpy opencv-python-headless ``` 上述命令会下载并安装最新版本的TensorFlow以及其他支持工具[^1]。 #### 获取源码 克隆官方GitHub仓库获取最新的DeepLabV3+实现代码: ```bash git clone https://github.com/tensorflow/models.git cd models/research/ protoc object_detection/protos/*.proto --python_out=. export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim ``` 这段脚本不仅复制了存储库还编译了Protocol Buffers文件以便于后续操作[^4]。 #### 数据准备 准备好用于训练的数据集非常重要。通常情况下,PASCAL VOC2012或其他公开可用的数据集会被用来测试DeepLab的效果。如果打算使用自己的数据,则需按照特定格式整理好图片及其对应的标签信息。 #### 修改配置文件 编辑位于`models/research/deeplab/g3doc/model_configs`目录下的配置文件(如`pascal_train_aug.yaml`),设置合适的超参数以适应具体的应用场景或硬件条件。 #### 编写启动脚本 编写一个简单的Python脚本来加载预训练模型并对新输入执行推理过程: ```python from __future__ import absolute_import, division, print_function import os import sys sys.path.append('path_to_models_research') from PIL import Image import numpy as np import tensorflow.compat.v1 as tf tf.disable_v2_behavior() # 加载冻结图 def load_graph(frozen_graph_filename): with tf.gfile.GFile(frozen_graph_filename, "rb") as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) with tf.Graph().as_default() as graph: tf.import_graph_def(graph_def) return graph if __name__ == '__main__': image_path = 'test_image.jpg' frozen_model_path = './frozen_inference_graph.pb' graph = load_graph(frozen_model_path) input_tensor_name = 'ImageTensor:0' output_tensor_name = 'SemanticPredictions:0' sess = tf.Session(graph=graph) img = Image.open(image_path).convert('RGB') width, height = img.size resize_ratio = 1.0 * 513 / max(width, height) target_size = (int(resize_ratio * width), int(resize_ratio * height)) resized_img = img.resize(target_size, Image.ANTIALIAS) batch_seg_map = sess.run( output_tensor_name, feed_dict={input_tensor_name: [np.asarray(resized_img)]}) seg_map = batch_seg_map[0] plt.figure(figsize=(8, 8)) plt.imshow(seg_map) plt.show() ``` 该段程序展示了如何读取一张JPEG格式的照片并通过调用预先训练好的DeepLabV3+模型来进行语义分割预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值