Sysmac Studio使用Tortoise和Git实现版本控制
Sysmac Studio使用Tortoise和Git实现版本控制
实验时间:2022/11/16
实验软件:Sysmac Studio(1.52,需要软件授权支持版本控制)、Git(2.38.1)、Tortoise(2.13.0)、gitee(代码仓库)
实验目的:Sysmac Studio实现版本控制、多人同时开发(需要有Git和tortoris使用基础)
实验内容
本次实验模拟的是两个开发人员同时开发一个项目的两个功能,最终合并到一起进行调试,调试完成后发布。Sysmac Studio除了程序部分,对于两个开发人员来说都是公共部分,比如配置和设置下面的所有项、功能、功能块、数据等。这些公共部分如果两个开发人员都在自己的项目中单独修改,这个在之后项目合并时会出现很多的冲突。为了解决这个问题给两个开发人员建一个公共的分支用于修改公共参数,然后将这些公共参数合并到自己的项目中。
分支策略
策略介绍:
第一步:首先由项目负责人创建本地仓库建立master分支、developer分支,在developer下建立common分支,再在Git创建远程仓库,并将本地仓库的每个分支推送到远程仓库;
第二步:由开发者1将远程仓库的developer分支克隆到本地仓库,然后建立dev1和common1分支,本地仓库的common1分支在修改之前需要先从远程仓库的common分支先拉取,再修改,修改之后合并到dev1分支,再推送远程仓库的common分支。这样可以放置不同开发者在使用共参数出现不同步的问题;开发者2同样的操作;
第三步:在开发者功能全部开发完毕后将项目合并到developer分支上;
第四步:developer建立release分支用于测试项目,在bug处理完之后将项目合并到master分支和developer分支;
第五步:如果项目在最终使用是出现bug,可以再master分支上创建临时分支hotfix用于修改bug,修改完之后将项目再合并到master分支和developer分支,然后删除hotfix分支即可;
分支功能:
master:主分支,用于最终版本的发布;
developer:开发分支,用于合并开发者的项目,通常由项目负责人管理;
dev1:开发者1分支,用于开发者开发自己负责的功能;
dev2:开发者2分支,用于开发者开发自己负责的功能;
common1:开发者1公共参数分支;
common2:开发者2公共参数分支;
common:公共参数分支,用于每个开发者修改公共参数(修改之前要先拉取),最后将这部分参数合并到自己的项目中;
hotfix:用于修正master中发现的bug,修正完推送至master和developer分支;
release:用于测试developer中的项目,修改测试中的bug,最终推送至master和developer分支
分支策略图:

Git和Tortorisean安装和设置
1. 安装Git和Tortorise
git下载网址:https://git-scm.com/
Tortoise下载网址:https://tortoisegit.org/
在安装git时需要注意如下选项:

2. Tortorise设置:


External Programm格式:(Sysmac Studio安装路径)\SysmacDiff.exe -gitdiff %base %mine %bpath%brev %yrev
案例演示
分支策略中的五步具体操作如下:
准备工作
1. 先在SysmacStudio中创建项目命名为test_project,然后在该项目中增加两个开发者所需要的程序,然后将程序调添加到任务:

2. 在VC目录下创建文件夹my_test文件夹,再在该文件夹下创建一个notice.txt文件(随便建个什么文件都行)用于master分支的首次提交:

3. 在Gitee新建远程仓库MyTest如下:

第一步
- 初始化本地仓库、提交、推送至远程仓库的master分支:





-
创建并切换到developer分支:




-
将之前创建my_project项目导入到developer分支,提交并推送至远程仓库的developer分支(推送方法同上):

-
在developer分支下创建common分支用于修改公共参数部分,将common分支推送远程仓库(新建分支和推送分支方法同上,往后的该步骤不再截图)
第二步
- 开发人员1 在自己电脑的VC目录下创建一个dev1文件夹,克隆远程仓库的developer分支到本地dev1文件夹下:

-
在developere分支下创建dev1和common1两个分支,切换到common1分支,先从远程仓库的common分支拉取>,确保各个开发人员公共参数是一致的,防止在合并时出现冲突:

-
,打开工程在EtherCat下增加一个伺服、新建一个轴、创建结构体、新建全局变量:



-
common1提交修改,推送到远程仓库的common分支;
-
切换到dev1分支将common1分支合并至dev1分支:
-
查看合并后的dev1开发分支:
-
开发人员1在dev1分支下写自己的程序:




-
开发人员1的功能完成后提交修改开发者2的操作同上。
第三步
-
开发者1切换到本地仓库的developer分支,先拉取远程仓库的developer分支,将本地仓库的developer分支和dev1分支合并,然后将本地仓库的developer分支推送到远程仓库的developer分支。到此开发人员1的所有工作就完成了。
-
开发者2切换到本地仓库的developer分支,先拉取远程仓库的developer分支,将本地仓库的developer分支和dev2分支合并,然后再将本地仓库的developer分支推送到远程仓库的developer分支。
第四步
测试人员拉取远程仓库的developer分支,创建release分支后切换到该分支开始测试,如果发现错误修改后与本地仓库的developer分支合并,再分别推送到远程仓库的developer分支和master分支。
第五步
项目交付后如果出现bug,先在master分支上建一个临时修复分支hotfix,修复完后合并到master分支,然后删除hotfix分支。
扩展
创建标签
# Tag和Branch的原理是差不多的
git tag -a 版本标签 -m '说明信息'
git push origin 版本标签
拉取远程仓库的master分支,打开git bash:

将tag推送到远程仓库:
远程仓库查看推送的tag:


合并冲突处理
如果两个分支在合并时同样的文件在同样位置内容是不一样的,这时会产生冲突,需要手动处理冲突(详细参考手册)。在合并时尽量避免这种情况的发生。


sysmac studio版本控制用户手册:点击打开
相关文章:
Sysmac Studio使用Tortoise和Git实现版本控制
Sysmac Studio使用Tortoise和Git实现版本控制实验时间:2022/11/16 实验软件:Sysmac Studio(1.52,需要软件授权支持版本控制)、Git(2.38.1)、Tortoise(2.13.0)、gitee(代码仓库) 实验目的:Sysmac Studio实现版本控制、多人同时开…...
Intent 和 Bundle 传值的区别
文章目录1、使用上1.1 Intent 方式1.2 Bundle 方式2、为什么 Bundle 使用 ArrayMap 而不是 Hashmap 实现呢?1、使用上 1.1 Intent 方式 举例:将数据从页面 A 传递到 B,然后再传递到 CA 页面: Intent intentnew Intent(MainActi…...
TypeScript 初步
一、TypeScript是什么? Typed JavaScript at Any Scale: 添加了类型系统的JavaScript,使用于任何规模的项目。 两个重要特点: 类型系统 任何规模 中文官网:文档简介 TypeScript中文网 TypeScript——JavaScript的超集 TypeS…...
leaflet 添加zoomslider,控制zoom放大缩小(074)
第074个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用zoomslider,相比于普通的zoom控件,这个更加形象,更加具体些。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共65行)相关API参考:专栏目…...
10分钟学会python对接【OpenAI API篇】
今天学习 OpenAI API,你将能够访问 OpenAI 的强大模型,例如用于自然语言的 GPT-3、用于将自然语言翻译为代码的 Codex 以及用于创建和编辑原始图像的 DALL-E。 首先获取生成 API 密钥 在我们开始使用 OpenAI API 之前,我们需要登录我们的 Op…...
2023美赛必须注意事项
文章目录首页部分要求竞赛期间题目查看题目下载论文要求比赛提示控制号提交解决方案更多注意事项首页部分要求 具体如下: 我提取一些关键词如下: 第一页:摘要页字体要求:12点的 Times New Roman 字体请勿在此页面或任何页面上…...
基于微信小程序的智能招聘小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
Java文件操作和I/O
Java 流(Stream)、文件(File)和IOJava.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。一个流可以理解为一个数据的序列。输入流表示从一个源…...
QT项目_RPC(进程间通讯)
QT项目_RPC(进程间通讯) 前言: 两个进程间通信、或是说两个应用程序之间通讯。实际情况是在QT开发的一个项目中,里面包含两个子程序,子程序有单独的界面和应用逻辑,这两个子程序跑起来之后需要一些数据的交互,例如&…...
移动硬盘文件丢失怎么恢复?
在我们的日常工作、学习和生活都离不开各种数据。每天都会接收或处理各种数据,尤其是做设计、自媒体、多媒体设计的人。移动硬盘成为我们常备的存储工具,但有使用就会伴随着意外情况的发生,这将导致移动硬盘上数据的丢失,比如误删…...
什么是同步整流和异步整流
在设计降压型DCDC电路的时候,经常会听到同步整流(synchronous)和异步整流(asynchronous)。那么什么是同步整流,什么是异步整流呢从这两种电路的拓扑来看,异步整流型外围有一个续流二极管&#x…...
关于PYTHON Enclosing 的一个小问题
问题分析 以下是一段每隔半小时重复执行测试用例的脚本,func是传入的测试函数,在执行func前后,会打印操作次数 def repeat(func, action):try:log.info(u******开始并发%s****** % action)thread_list []for i in range(repeat_count):def…...
LabVIEW错误-2147220623:最大内存块属性不存在
LabVIEW错误-2147220623:最大内存块属性不存在在使用NI Linux实时操作系统目标中,使用系统属性节点和分布式系统管理器(DSM),但遇到一些问题:它未正确报告系统上的可用物理内存量。在NI Linux实时系统上出现…...
图的总复习
一、图的定义Graph 图是由顶点vertex集合及顶点间关系集合组成的一种数据结构: 顶点的集合 和 边的集合 二、无向图 用(x,y)表示两个顶点x和y之间的一条边(edge) 边是无方向的 N{V,E},V{0…...
测试流程记录
1,需求评审 2,技术方案评审 3,编写测试用例 编写需求分析 编写测试用例 编写冒烟case 4,用例评审 5,提测 提测前给开发执行冒烟case 6,测试 测试完成前约产品验收时间 7,验收 跟进验收问题…...
Mysql主从架构与实例
mysql的主从架构 MySQL主从架构是一种常见的数据库高可用性解决方案,它通常由一个主数据库和多个从数据库组成。主数据库用于处理写入请求和读取请求,从数据库则用于处理只读请求。 在主从架构中,主数据库记录所有数据更改并将这些更改同步…...
webpack(高级)--Tapable
webpack 我们直到webpack中有两个非常重要的类Compiler和Compilation 他们通过注入插件的方式 来监听webpack的所有声明周期 插件的注入是通过创建Tapable库中的各种Hook的实例来得到 Tapable Tapable中的Hook分为同步与异步 同步 SyncHook SyncBailHook SyncWaterfallHook…...
Python常见类型转换合集
近期在工作中常常接触到各种转换,如字符串转byte,byte转字符串,还有byte数组转成报文能接纳的格式(bin格式的十六进制)。故有必要系统的总结一下Python中常见的类型转换。 一:常见类型的概念 类型举例说明…...
知识点(1)
什么是跨域请求? 当前发起请求的域与该请求指向的资源所在的域不一样,凡是发送请求的url的协议、域名、端口号三者之间任意一者与当前页面地址不同的请求。这里的域指的是:我们认为若协议域名端口号均相同,那么就是同域。 get和…...
Tomcat源码分析-启动分析(三) Catalina启动
在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析、实例化各大组件、初始化组件等逻辑。那么tomcat又是如何启动webapp应用,又是如何加载应用程序的…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
