几年前,我暂时从一个时髦的高咖啡因创业环境转向在一家更为成熟和经验丰富的公司从事工程工作。那时,我意识到了技术文化与工具之间的二项式联系。我们的思考方式和工作方式受到我们可用工具的影响,正如我们的需求和习惯影响我们选择的工具一样。
我工作的新公司不习惯使用3D打印机、内部错误跟踪软件,甚至是一个好的CMS。一切都相当老式。这对我和我的同事们每天创造的东西有着重大的影响。
一个例子包括过去几十年,行业已从TO220封装过渡到D2PAK。与此同时,工程师们配备了高峰值功率的焊接铁,比如JBC生产的那些。
一个年轻的工程师如果能够使用设备齐全的实验室,他还会在这个十年考虑任何流行的TO220中的集成电路吗?我不这么认为。使用D2PAK,不必拿螺丝、垫圈和绝缘箔纸来瞎忙,只要你有最新一代的焊接铁,就会容易得多。这样一个简单的变化可以引导工程师设计更平的电路板,这通常可以导致按照现代标准更具美感的产品。
Git是一个罕见的例子,它彻底改变了整个行业。十年前,软件工程经理们会被认为是疯子,如果他们采用快速行动,打破常规的方法。Git用于硬件和PCB设计,通过启用修订跟踪、版本控制和回滚设计更改,使之成为可能。开发人员现在可以确信,他们对开源项目的努力总是可以被归功和验证,这要感谢一个叫做Git blame的功能。十年前,对开源项目的贡献被认可是留给政治的。这些都是我们可以感谢Git带来的变化的例子。
虽然就其本质而言,电子行业的发展速度比软件慢,但许多创新正渗透到我们的日常工作中。Altium Designer®,今年引入了Altium 365®和Concord Pro™,在行业中引领了潮流,其他重要参与者努力跟上,有时候甚至是十年前发布的功能。Git用于硬件和PCB设计是推动这一变化的技术之一。
简单来说,Git是一个版本控制系统(VCS)。它是一种软件(包括底层协议和数据格式),被软件开发人员用来跟踪和管理代码更改。如果你是在这个十年工作的软件开发人员,你不会在桌面上复制文件夹来尝试事物,你最有可能使用基于Git的VCS。
尽管Git在软件开发中因跟踪代码变更而广受欢迎,但它也可以用来跟踪任何文件集的变更。这些文件不需要包含代码,它们可以是你的PCB设计文件、设计文档、PCB制造文件以及你项目中需要的任何其他文件。Git对硬件的应用是Git生态系统向机械设计、PCB设计、固件等领域的自然延伸。
Git可免费用于商业用途。它是开源的,并在GNU通用公共许可证下分发。每个Git目录都是一个独立实体,本身就是一个包含其项目完整历史记录的仓库。放置在Git仓库中的每个文件都可以追踪到每一位,由谁以及何时。Git仓库不需要网络访问,每个仓库都完全独立于承担远程名称的服务器。
因此,它目前是世界上最受欢迎的版本控制系统(VCS)并不令人惊讶。大多数市场份额分析显示Git超过了75%,而最受欢迎的替代品SVN自2012年以来一直在下降。需要SVN(一种遗留VCS,也得到Altium Designer的支持)的职位空缺数量也在下降,而Git的受欢迎程度一直在上升。
Git由Linus Torvalds在2005年创建和编写,他是那位传奇人物,Linux内核的创建者和开发者,为了跟踪内核自身的开发而创建了Git。Linux社区曾被允许免费使用一款名为BitKeeper的商业软件。2005年4月,BitKeeper的作者在Linux团队的一位杰出成员及Samba文件服务器的发明者Andrew Tridgell开始基于(据称)反向工程BitKeeper协议的开源客户端后,撤回了许可证。BitKeeper许可证明确禁止反向工程。
因此,Linus Torvalds决定创建自己的版本控制系统,这个系统受到BitKeeper的启发,但并不仅仅是模仿,因为剩余的替代方案都无法满足他的需求。
Torvalds认为,新软件将与当时使用的流行CVS(并发版本系统)大不相同。他意识到,当前系统在应用补丁时可能需要很长时间,而他在与团队同步时需要一次性应用数百个补丁,它们的性能远远不够。他提出了一系列要求:
Git的开发工作始于2005年4月初。2005年6月16日,Linux内核的2.6.12版本发布,这也是迫切需要该软件的原因。随后,Git的开发和维护工作交给了Junio Amano,他对其开发做出了贡献,并且一直在贡献,广泛地被认为使软件易于使用;Git 1.0版本于2005年12月发布。
为什么叫Git?至少可以说是一个奇怪的名字!正如英国大多数人所知,这个词通常用来指一个有点调皮的人,或者根据牛津在线词典,一个“令人不快或可鄙的人”。此外,报告的含义还有“傻瓜”(18至19世纪的英国俚语)或“私生子”(18世纪中叶至19世纪的美国俚语),这两个含义都很诗意地符合其独行天才隐士创造改变世界的艺术作品的神话。
Torvalds为他的系统命名为“Git”的原因有几个,可以根据用户当天的感觉或他在编写系统时不同时间的感觉来选择!他经常在官方文档中将其描述为“愚蠢的内容跟踪器”,并且定义Git为:
哦,程序员的幽默。
然而,Git并不完美,它也有一些缺点。难以掌握的数据结构和奇怪的命名法无疑是其中之一。这包括用于硬件项目的Git,其中强制使用相同的文件结构和操作。
Cherry-picking、Checkout、Index、Clone、Push、Stash、Pull/Pull Request、Tag、Upstream、Fork、Rebase、Origin、Fetch和HEAD(总是用全大写写,我不知道为什么)是你在软件世界中可以期待找到的一些最奇怪的术语。
理解如何将仓库设置为服务器端软件,以及理解本地和远程仓库之间的关系以及保持它们同步的操作可能很难。与SVN相比,Git要学习和使用起来要复杂得多,部分原因是因为它更加强大和高效。
幸运的是,Altium Designer和Concord Pro解决了大多数这些问题。虽然我们可以通过命令行完全访问Git的强大功能,但Concord Pro的用户界面和严格集成使得操作变得简单直观。同时,Altium 365解决了所有服务器端的问题。
Git可能会给人一种...非常奇怪的感觉!主要是,它的命名法反映了一种与许多工程师习惯的经典复制粘贴、压缩和电子邮件大不相同的工作流程。
分支模型或许是Git与其他版本控制系统(如SVN)最大的不同之处。Git可以拥有多个分支,包括本地和远程分支。就像树的分支从树干或彼此中分叉一样,Git的分支也是从其他分支中发芽。这棵树的“树干”或主分支被称为master。分支可以轻松地创建、合并和删除。以下是这些操作的工作方式:
[极客模式 开启]
那么,这个聪明的功能是如何工作的呢?分支本质上是指向一个提交的指针。提交是一组文件更改、添加或删除,被推送到仓库中。提交有一个40字符的加密SHA-1校验和,被写入一个文件。每个提交还包括一个指向它来源的父提交的指针。
还有许多额外的中间步骤,例如,文件被转换成校验和的二进制blob,并通过二叉树组织在目录中。树的校验和也被计算。由于一切都是通过加密哈希进行的,没有办法在不改变最后一个提交的哈希的情况下更改(或损坏)数据或历史。加密哈希使Git的历史在某种程度上是永久的,所以在编写提交消息时要注意礼貌!
[极客模式 关闭]
得益于Git在硬件中的分布式特性和高级分支系统,以及其他许多功能,用户可以自由采用任何工作流程。
在最受欢迎的工作流程中,*集中式工作流*模型是当有经验的集中式版本控制系统的人第一次开始使用Git(这是*去中心化的*)时经常使用的一种。*集中式工作流*几乎完全依赖于master分支,所有提交都被推送到这里并从这里获取,使Git模仿SVN的行为和远程文件系统。
“特性分支”工作流是“集中式工作流”的进化。开发工作在不同的分支上进行,然后合并到主分支。我是这个模型在电子工程中的热情支持者,并且我急切地等待Altium宣布他们的分支支持,以便利用它。特性分支的例子可能包括“fix_current_generator_oscillation”、“upgrade_microcontroller”、“lower_power_consumption”或“reduce_thermal_drift”。
在GitFlow工作流中,可能是最复杂的流行工作流之一,主分支只包含完整的设计发布版本,你可以将其视为board_v_1.0、board_v_1.1等。开发在一个名为develop的单独分支上进行,特性和修复从develop分支开始。只有当develop准备好后,才能合并到主分支。
Git之所以比其他版本控制系统快有几个原因。每个用户都可以克隆原始仓库,并且可以定期向本地分支提交更改,并较少频率地发送到远程。其他不那么去中心化的VCS受到远程服务器容量的限制,这必须大大减慢速度以满足所有的请求。
这种本地优先的方法在电子行业尤其关键,因为文件可能相当大。一个PCB设计的大小尤其是包含数百个3D实体时,不少于数十兆字节是很常见的。另一方面,源代码文件最多通常只有几百KByte。
在我上一家公司,我们有一个通过VPN访问的位于总部的SVN仓库,用于存储项目文件和文档。任何操作都需要花费很长时间,而我们有限的互联网连接经常因管理成千上万的文件而频繁堵塞。
Git还是用C语言编写的,这意味着与其他高级语言相比,它的开销最小。根据操作的不同,Git的速度可以比SVN快几倍到几百倍。
去中心化、离线优先的方法也使Git对网络的负担大大减轻。即使你的公司没有接入宽带,你也可以在午休时间或下班后推送数据,不会影响日常工作的性能。
在Concord Pro上,当你接入互联网连接时,你可以享受Altium 365的所有好处,然后漫游你的Altium Designer许可证并继续离线工作。
在使用 Git 时,必须意识到文件在真正被视为受版本控制之前,需要经过三个阶段:
未跟踪是指文件存在于磁盘上,但尚未纳入版本控制系统。未跟踪的文件随后可以被暂存,这意味着它已被添加到版本控制系统中,但尚未提交。此时,可以提交暂存的更改。暂存系统用于为提交做准备,但此功能主要在命令行操作中使用。
通过 Altium 使用 Git 时,得益于简化操作的图形用户界面,当您将更改保存到服务器时,暂存方法会在后台自动应用。
当您创建一个新项目时,仓库会在服务器端自动创建。在下面的窗口中,我正在我的 Fermium LTD 工作区内使用模板创建一个新的 PCB 项目。一旦我创建了项目,它将在我的 Altium 365 工作区中可访问,并且平台将自动为新项目创建一个 Git 仓库。
使用 Concord Pro 创建的仓库会自动配置,因此只有必要的文件已经提交到项目的 Git 仓库中,而本地备份和 LOG 文件则没有。通常需要适当配置一个名为 ".Gitignore" 的文件并注意不提交不必要的文件,但 Concord Pro 已经处理了这些。
要访问 Git 仓库,通常需要在服务器端和客户端配置 SSH 密钥和用户凭据。当添加新用户时,Concord Pro 会自动处理这一切。
克隆是Git将远程仓库复制到本地副本的过程。手动克隆包含二进制文件的大型仓库,例如PcbDoc和SchDoc文件,通常需要Git命令行的专家级操作。Altium Designer和Concord Pro在您打开远程项目时,会自动在后台将仓库克隆到您的本地机器。
Concord Pro允许您通过存储管理器面板比较不同修订版之间的更改,包括本地和远程的。在以下示例中,我添加了一个文本注释对象并在本地提交了更改,但没有将它们推送到远程。
这为硬件平台上的Git提供了所需的全部功能。
Git是一个强大的工具,硬件git为PCB设计师提供了一个全面的版本控制、共享和修订管理的工作流程。这个流行系统帮助塑造了现代程序员的文化。现在,通过Altium Designer®和Altium 365®平台,设计师可以访问PCB设计的Git功能。
您今天就可以开始试用Altium 365,它加载了示例项目,让您完全体验21世纪的电子开发风格。还有更多问题?今天就联系Altium的专家。