用于硬件项目的版本控制系统?


59

硬件项目有哪些好的版本控制系统?Google Code,CVS和SVN是否等效?这样的版本控制系统是否适合涉及PCB文件,原理图(甚至固件代码)的硬件项目?


5
好问题!希望看到答案中包含一些存储库示例。
tyblu 2011年

+1认识到硬件项目可以从源代码控制中受益。与我合作的人似乎很难意识到这一点。
Nate

1
我已经使用Mercurial对电路板进行版本管理已有一段时间了,它节省了我很多时间。绝对是个好主意。
史蒂芬·柯林斯

1
我使用用于EDA的gEDA工具套件并在git中跟踪内容。我最近写了一些git钩子,这些钩子会自动生成已修改的任何原理图或PCB的.png图像,并将它们添加到提交中。这使我可以利用GitHub的图像差异。PCB和gschem还具有与git一起使用的本地差异工具,这些工具在本地执行类似的操作。我的钩的位置:github.com/BenBergman/.git_hooks使用它们的示例项目:github.com/BenBergman/uJoypad

Answers:


27

基本上,所有VCS系统都可以正常处理文本和二进制文件。当然,您不能合并二进制的。

因此,只要您不使用过时的东西(例如CVS),您就可以使用ANY系统。


3
我将CVS用于我的所有项目(软件和硬件,以及PCB,固件,工具等),没有问题。当然,CVS已过时,但是我有20年的项目历史,并且没有转换器将我的存储库迁移到Mercurial或SVN。
Axeman

12
那么,务实的方法就是将旧的东西留在CVS中,然后将新的东西放到新系统中……
Johan

与令人恐惧的Microsoft Visual Source Safe相比,CVS是一个漂亮的系统,目前我正在为一个正在从事的项目锁定该系统。布莱克
凯文·维米尔

@Kevin Vermeer当您将两个“不太好”的东西相互比较时,您知道自己在天平上处于不利地位;)
Johan

@KevinVermeer,我不得不使用sourcesafe,这是版本控制世界的祸根。我的最后一个老板因此完全忽略了版本控制。
2011年

17

我以前曾将Subversion与Altium一起使用。它可以成功运行,但是当时缺少diff工具,因此它的功能不如使用代码进行版本控制。即使没有diff功能,我仍然认为值得这样做。

对于固件,Subversion或Git都很棒。如果您以前没有使用过Git,请先尝试Subversion(即使这样会使以后学习Git更加困难)。

Altium最近推出了一种用于原理图和PCB的差异工具,因此我希望Subversion现在会很棒,以弥补EDA供应商设法在其产品中内置的常见精神错乱。

我一直想用新的diff工具来尝试一下;如果这样做,我会尽量记住在此处发布一个到仓库的链接作为示例。

更新资料

我尝试了一下,不得不说Altium差异工具让我有些不知所措。它是有功能的,但董事会版本之间的变化足够大,以至于至少对我来说没有太大用处。看到这一点后,我决定忘记diff工具,只使用Github。如果您感兴趣的话,这里是回购:https : //github.com/rascalmicro/pcb


您是否使用了集成的SVN GUI(与Altium结合使用)或外部工具?
尼克T

带有SVN的最新Altium很棒,尽管我要补充一点,PCB /原理图修订版并不像代码中那样重要。如果要处理的最大原理图/ PCB版本修订不超过3-4个,则在设计或需求阶段可能会出现一些错误。
标记

@Mark:您是在谈论Release 10 beta还是Summer 09?
尼克T

2
如果董事会修订版之间的更改足够大,以至于没有用,那么您的承诺就不够频繁。提早提交,经常提交!使用标签来跟踪板的转速。
凯文·威米尔

3
我正在使用SVN,这绝对值得。我的系统是这样的:我点击了保存按钮,我大概应该提交一次。我通过阅读提交消息(例如“将X部分添加到库”或“将测试板添加到I2C和SPI总线”)来跟踪更改。为制造而发出的发布完全不同,用于svn cp trunk/ tags/releaseX/拍摄发布的快照。然后,如果要查看版本之间的更改,则可以比较releaseX / file和releaseY / file,或者可以浏览提交日志并查看各个更改。分支有助于模块化大量的提交。
Kevin Vermeer


7

我使用Google Code托管Super OSD(我的电子项目)。

我专门使用gEDA套件来管理原理图和PCB。有用的是,gEDA会为原理图生成文本文件(虽然很难解释它们,但大多数情况下都是人类可读的),而不是像Eagle这样的二进制Blob。例如,这是两个原理图之间的差异,一个是大约5天的历史,另一个是我刚刚推的。它并不是特别有用,因为您实际上看不到文本文件中的太多更改,但是它可以显示相对更改-即大量的返工,而不是单个组件的更改-它确实可以让您回到以前的版本。


3
+1用于使用基于文本的文件格式。磁盘空间便宜,并且文本压缩很容易。我希望二进制斑点不那么常见。
凯文·维米尔

4

诀窍是要使用与二进制文件兼容的工具。如果您经常使用二进制文件并与他人共享,则对那些二进制文件实施锁定机制可能会有所帮助。在Subversion中使用二进制文件并与他人共享时遇到了很多问题,这是由于缺乏锁定语义以及将二进制文件重写/合并在一起而引起的。在这些文件上添加锁定机制可以消除人为编辑/更改二进制文件的人为错误。

如果您以前从未使用过版本控制,建议您阅读它们的不同工作方式,并选择一种满足您和/或您的团队可以满意的需求。分布式版本控制系统比客户端服务器系统具有许多优势,但使用起来往往更复杂。


3

为什么不只使用Google Code或SVN存储库?因为这是一个修订控制系统。没有定义的用途。它对于多个开发人员和监视源代码的更改非常有用。


1
你做完了吗?对我来说,将二进制文件放入SVN或Mercurial中变得非常糟糕。
tyblu 2011年

2
不,我没有,但我不仅将SVN用于源代码。诸如PDF和.txt文件之类的东西。
院长

2
@Tyblu你说的可怕是什么意思?我已经用原理图和布局文件完成了它,它对Subversion来说非常有用。
Kellenjb'1

我无法使用Mercurial跟踪对EAGLE文件的更改。看起来整个文件都不同。您有可以查看的存储库吗?
tyblu 2011年

5
@tyblu,这就是为什么您在签入文件时添加评论的原因:)
vicatcu 2011年

3

我以前曾将Subversion与Altium一起使用。

我确实使用SVN和Altium集成来进行原理图捕获:它工作得很好。我必须说,diff查看器总比没有什么要好,因为我的SchDoc文件是二进制的,即无法进行比较!我可以将与Altto Designer集成在一起的SVN客户端与TortoiseSVN并行使用,这没有问题。Altium的客户端在SVN功能方面有些局限。我用乌龟做“标签”。

我的意见基于Altium Designer 10内部版本27009和版本13.1内部版本27559。



1

Dropbox不是真正的版本控制系统,但它还可以处理文件修订,使文件可用于不同OS上的不同人员。-穷人版本控制系统;)


2
作为曾经与团队合作过的人:不要这样做。Dropbox不是穷人的版本控制系统。它是文件共享/存档系统。您不必完全使用git,它才变得真正有用​​!Dropbox犯了所有错误,甚至CVS也做对了(如何处理较新的修订版,如何交换更改,如何标记特定修订版),它实际上不是版本控制系统
MarcusMüller

1

上个周末,我在圣马特奥的创客博览会上,遇到了一家新公司(对我而言)Up-Verter的代表。他们基本上是在构建一种电气CAD工具,该工具可在“云”中运行(即在您的浏览器中),并且在概念上围绕协作而构建,因此应处理合并/差异和通常的版本控制工作。

我还没有尝试过,它看起来仍然有点绿色(不要认为您实际上还不能进行pcb布局,只是原理图),但这有点吸引人。他们声称可以导入Eagle文件,这是一个加号。

我还与Element 14帐篷中的Eagle代表进行了交谈,他们表示他们正在转向XML格式,这是朝着使原理图和布局的版本化更加合理的方向迈出了一大步……这方面的所有有趣的进步!



0

这确实是一个很好的问题。由于FPGA属于“硬件”类别,因此您可能对我为FPGA项目建议的版本控制友好项目结构感兴趣:

http://www.saardrimer.com/fpgaproj/

我认为这些想法和概念很容易适用于其他硬件项目,总的来说。(顺便提一下,对此提案发表评论是很受欢迎的。)


2
链接不再起作用。
tyblu

0

避免git。它不能很好地处理大型存储库。除非您不这样做,否则您的存储库将变大

  1. 二进制原理图文件仅在更改时有所更改
  2. 打开将二进制文件视为文本。

3
好吧...您应该有许多小型存储库,每个项目一个存储库。
约翰

1
@Johan-......是的。。。。。无论如何,我每个客户有1个存储库(现在大约有4个存储库),并且有许多子项目,而且效果很好。至少,SVN似乎能够处理5 GB以上的二进制数据而没有太多麻烦。
康纳·沃尔夫

1
@ConnorWolf我很想听听您的做法。我们为每个项目创建一个Git存储库,并且没有任何问题。每个项目没有一个存储库对我来说就像一场维护噩梦。
马特·杨

1
SVN至少(可能也是git)似乎存储二进制diff,而不是完整的文件副本,因此空间效率非常高。
康纳·沃尔夫

1
@ConnorWolf回复:维护的噩梦:8年后:git-submodules可能就是您想要的。尤其有意义,如果您在多个项目或客户之间共享例如标准工具的东西。
马库斯·穆勒

0

我为此使用了多个Mercurial(HG)仓库(每个项目一个),但是正如大多数版本控制系统会遇到的那样,该仓库越来越大。



0

我只想添加一个指向HgInit的链接,如果您决定走这条路,那么它是Mercurial的精彩介绍。我个人使用Git,但是它们在体系结构方面非常相似(均为分布式版本控制系统)。它们的分布式特性使它们非常适合在“分布式”团队中工作。:)

http://hginit.com/


尽管Mercurial是用于“纯”软件项目的良好源代码控制系统,但由于它无法明智地合并事物,因此在处理本质上仅是二进制文件的项目上,它的许多优势都消失了。除非您仅做软件,否则HgInit的课程将毫无意义。
whatsisname 2015年


0

对于硬件的任何ascii描述,这都值得考虑。一旦采用了易于理解的硬件描述,任何现代版本控制系统(RCS)都可以很好地工作。电路布局通常由Gerber文件完整描述,UML描述其他部分,这些都是完整的描述。用于原理图,机械布局等的标准ascii格式较少(例如,KiCAD)。

采用是一个更实际的问题,它要求公认的良好修订控制要求,包括有意义的差异。这通常也意味着放弃Word,Excel,PowerPoint等。反对经理和MBA的非常困难的论据,但是可以说,诸如医疗设备,航空和军事等受监管的行业已经需要良好的版本控制。

正如其他人指出的那样,大多数现代RCS都会使用修订控制二进制文件,这对于存档和标识版本非常有用-但是任何电子文档管理系统(EDMS)(例如Agile)都可以将修订号分配给任意二进制文件。无聊


0

尽管它不是免费的,而且几乎没有错误,但是Altium Vault的工作非常出色。我可以轻松地回滚到任何提交点(就像任何VCS一样)。

在这方面,Altium公司的方式提前溢价(导师和Cadence)工具。

没有为Altium工作,但是尽管存在当前问题,该工具仍使完整的硬件版本控制非常简单。


而这可能是保险柜有利的一件事……
Matt Young

UNIX方式;做一件事,做得很好。
彼得·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.