하드웨어 프로젝트를위한 버전 관리 시스템?


59

하드웨어 프로젝트에 적합한 버전 관리 시스템에는 어떤 것이 있습니까? Google 코드, CVS 및 SVN에 해당하는 것이 있습니까? 이러한 버전 제어 시스템은 PCB 파일, 회로도 (펌웨어 코드 포함)와 관련된 하드웨어 프로젝트에 적합합니까?


5
좋은 질문입니다! 답변에 포함 된 일부 저장소 예제를보고 싶습니다.
tyblu

+1 HW 프로젝트가 소스 제어의 이점을 누릴 수 있음을 인정합니다. 내가 일하는 사람들은 이것을 깨닫는 데 어려움을 겪고있는 것 같습니다.
Nate

1
나는 Mercurial을 사용하여 한동안 회로 기판을 버전 관리했으며 엉덩이를 몇 번 구했습니다. 확실히 좋은 생각입니다.
Stephen Collings

1
나는 EDA를 위해 gEDA 도구 모음을 사용하고 git에서 물건을 추적합니다. 최근에 수정 된 회로도 또는 PCB의 .png 이미지를 자동으로 생성하고 커밋에 추가하는 git hook을 작성했습니다. 이를 통해 GitHub의 이미지 차이를 활용할 수 있습니다. PCB와 gschem에는 로컬에서 비슷한 작업을 수행하는 git과 작동하는 기본 diff 도구가 있습니다. 내 고리는 여기 있습니다 : github.com/BenBergman/.git_hooks 그것들을 사용하는 예제 프로젝트 : github.com/BenBergman/uJoypad
ben

답변:


27

기본적으로 모든 VCS 시스템은 텍스트 및 이진 파일을 정상적으로 처리 할 수 ​​있습니다. 물론 바이너리를 병합 할 수는 없습니다.

따라서 CVS와 같은 쓸모없는 것을 사용하지 않는 한 모든 시스템에 적합합니다.


3
모든 프로젝트 (PCB, 펌웨어, 도구 등이 포함 된 소프트웨어 및 하드웨어)에 CVS를 사용하며 아무런 문제가 없습니다. 물론 CVS는 더 이상 사용되지 않지만 20 년의 프로젝트 기록이 있으며 리포지토리를 Mercurial 또는 SVN으로 마이그레이션하는 변환기는 없었습니다.
Axeman

12
그렇다면 실용적인 방법은 단순히 CVS에 오래된 것들을 남겨두고 새로운 시스템에 새로운 것들을 넣는 것입니다.
Johan

CVS는 현재 진행중인 프로젝트에 잠겨있는 Microsoft Visual Source Safe라는 공포와 비교할 때 아름다운 시스템입니다. 블리치.
케빈 베르메르

@Kevin Vermeer 당신은 두 개의 "그다지 좋지 않은"것들을 서로 비교할 때 당신이 규모의 부정적인면에 있다는 것을 알고 있습니다;)
Johan

@KevinVermeer, 나는 버전 제어 세계의 골칫거리 인 sourcesafe를 사용해야했습니다. 내 마지막 상사는 버전 제어 때문에 완전히 무시했습니다.
Kortuk

17

이전에는 Subium을 Altium과 함께 사용했습니다. 성공적으로 작동했지만 당시에는 diff 도구가 없기 때문에 버전 제어보다 코드가 유용하지 않았습니다. diff 기능이 없어도 여전히 가치가 있다고 생각합니다.

펌웨어의 경우 Subversion 또는 Git이 모두 좋습니다. 이전에 Git을 사용하지 않았다면 Subversion을 먼저 시도하십시오.

Altium은 최근 회로도 및 PCB를위한 diff 툴을 도입 했으므로 Subversion은 이제 EDA 벤더가 제품에 구축 할 수있는 일반적인 광기를 모듈화 할 것으로 예상됩니다.

나는 새로운 diff 도구를 사용하여 이것을 시험해보고자했다. 내가 할 경우, 예를 들어 여기에 리포지토리에 대한 링크를 게시해야합니다.

최신 정보

나는 이것을 시험해 보았고, 나는 Altium diff 도구에 약간 압도적이라고 말해야한다. 그것은 기능적이지만 보드 개정판 사이의 변화는 적어도 나에게는 그다지 유용하지 않을 정도로 충분합니다. 이것을 본 후에 diff 도구를 잊고 Github을 사용하기로 결정했습니다. 관심있는 경우 리포지토리가 있습니다 : https://github.com/rascalmicro/pcb


통합 SVN GUI (Altium 사용) 또는 외부 장치를 사용 했습니까?
Nick T

SVN이있는 최신 Altium은 훌륭하지만 PCB / 회로도 개정판이 코드만큼 중요하지는 않다고 덧붙입니다. 3-4 개 이상의 최대 회로도 / PCB 릴리즈 개정을 다루는 경우 설계 또는 요구 사항 단계에서 매우 잘못되었을 수 있습니다.
Mark

@Mark : Release 10 베타 또는 Summer 09에 대해 이야기하고 있습니까?
Nick T

2
보드 개정판 사이의 변경 사항이 유용하지 않을 정도로 충분히 중요한 경우에는 자주 커밋하지 않습니다. 일찍 커밋하고 자주 커밋하십시오! 태그를 사용하여 보드 개정을 추적하십시오.
케빈 베르메르

3
SVN을 사용하고 있으며 확실히 가치가 있습니다. 내 시스템은 다음과 같습니다. 저장 버튼을 눌렀을 때 커밋해야합니다. "파트 X에 라이브러리 추가"또는 "I2C 및 SPI 버스에 테스트 패드 추가"와 같은 커밋 메시지를 읽어 변경 사항을 따릅니다. 제작을 위해 발송 된 릴리스는 완전히 다릅니다 svn cp trunk/ tags/releaseX/. 릴리스의 스냅 샷을 작성하는 데 사용 됩니다. 릴리스 간 변경 사항을 보려는 경우 releaseX / file 및 releaseY / file을 비교하거나 커미트 로그를 찾아보고 개별 변경 사항을 볼 수 있습니다. 브랜치는 커밋 범람을 모듈화하는 데 도움이됩니다.
Kevin Vermeer

10

VisualSVN Server + TortoiseSVN 클라이언트를 사용하는데 제대로 작동합니다.


7

Google Code를 사용 하여 전자 프로젝트 인 Super OSD 를 호스팅 합니다.

나는 gEDA 제품군을 독점적으로 사용하여 회로도와 PCB를 관리합니다. 유용하게도, gEDA는 Eagle과 같은 이진 얼룩 대신 회로도에 대한 텍스트 파일 (대부분 사람이 읽을 수 있지만 해석하기는 어렵지만)을 생성합니다. 예를 들어, 이것은 약 5 일이 지난 2 개의 회로도 와 방금 푸시 한 회로도의 차이 입니다. 실제로 텍스트 파일에서 많은 변경 사항을 볼 수는 없지만 특히 큰 재 작업, 단일 구성 요소 변경과 같은 상대적 변경을 표시 할 수 있으므로 이전 버전으로 돌아갈 수 있습니다.


3
파일에 텍스트 기반 형식을 사용하는 경우 +1 디스크 공간이 저렴하고 텍스트 압축이 쉽습니다. 이진 얼룩이 덜 일반적 이었기를 바랍니다.
케빈 베르메르

4

트릭은 바이너리와 잘 작동하는 것을 사용하는 것입니다. 바이너리를 많이 사용하고 다른 바이너리와 공유하는 경우 해당 바이너리 파일에 잠금 메커니즘을 구현하는 것이 좋습니다. 우리는 바이너리 파일과 함께 Subversion을 사용하고 의미론을 잠그지 않고 바이너리 파일을 겹쳐 쓰거나 병합하지 않아 발생하는 다른 사람들과 공유하는 데 많은 문제를 겪었습니다. 해당 파일에 잠금 메커니즘을 추가하면 누가 이진 파일을 편집 / 변경했는지에 대한 통신상의 사람의 오류가 제거됩니다.

이전에 버전 관리 기능을 사용해 본 적이 없다면 각기 다른 방식으로 작업을 읽고 본인 및 / 또는 팀이 편안하게 사용할 수있는 요구 사항을 충족하는 방법을 선택하는 것이 좋습니다. 분산 버전 제어 시스템은 클라이언트-서버 시스템에 비해 많은 이점을 제공하지만 작업하기가 더 복잡한 경향이 있습니다.


3

왜 구글 코드 나 SVN 저장소를 사용하지 않습니까? 이것은 개정 관리 시스템입니다. 정의 된 용도가 없습니다. 여러 개발자가 소스 코드의 변경 사항을 모니터링하고 모니터링하는 데 매우 유용합니다.


1
이거 했니? 바이너리를 SVN 또는 Mercurial에 넣는 것은 나에게 끔찍한 것으로 판명되었습니다.
tyblu

2
아니요.하지만 소스 코드뿐만 아니라 SVN을 사용했습니다. PDF 및 .txt 파일과 같은 것.
Dean

2
@ Tyblu 끔찍한 무엇을 의미합니까? 나는 회로도 및 레이아웃 파일로 작업했으며 서브 버전으로 훌륭하게 작동했습니다.
Kellenjb

Mercurial에서 EAGLE 파일의 변경 사항을 따를 수 없습니다. 전체 파일이 다른 것 같습니다. 들여다 볼 수있는 저장소가 있습니까?
tyblu

5
@tyblu 그렇기 때문에 파일을 체크인 할 때 주석을 추가해야합니다. :)
vicatcu

3

이전에는 Subium을 Altium과 함께 사용했습니다.

SVN을 회로도 캡처를 위해 Altium 통합과 함께 사용합니다. 내 SchDoc 파일이 바이너리이기 때문에 diff 뷰어가 아무것도없는 것보다 낫다는 것을 말해야합니다. ToriumiseSVN과 병렬로 Altium Designer에 통합 된 SVN 클라이언트를 문제없이 사용합니다. Altium의 클라이언트는 SVN 기능 측면에서 약간 제한되어 있습니다. 거북이와 함께 "태그"를합니다.

내 의견은 Altium Designer 10 빌드 27009 및 버전 13.1 빌드 27559를 기반으로합니다.



1

실제 버전 제어 시스템은 아니지만 Dropbox는 파일 개정도 처리하므로 다른 OS의 다른 사용자가 사용할 수 있습니다. -가난한 망 버전 관리 시스템;)


2
: 전에 팀과 함께 작업 한 사람으로 하시기 바랍니다 이 작업을 수행하지 않습니다. Dropbox는 가난한 사람의 버전 관리 시스템 이 아닙니다 . 파일 공유 / 아카이브 시스템입니다. 더 유용하기 위해 git을 최대한 사용할 필요는 없습니다! Dropbox는 심지어 CVS조차도 (새로운 개정판을 다루는 방법, 변경 사항을 교환하는 방법, 특정 개정판을 표시하는 방법) 잘못한 모든 것을 수행합니다. 실제로 버전 관리 시스템아닙니다 .
마커스 ül 러

1

나는 지난 주말에 San Mateo의 Maker Faire에 있었고 Up-Verter 라는 새로운 회사에서 담당자를 만났습니다 . 이들은 기본적으로 "클라우드"(예 : 브라우저)에서 실행되는 전자 CAD 도구를 구축하고 있으며 개념적으로 협업을 중심으로 구축되므로 병합 / 차이 및 일반적인 버전 관리 작업을 처리해야합니다.

아직 시도하지 않았지만 여전히 약간 녹색으로 보입니다 (실제로 pcb 레이아웃을 할 수는 없지만 회로도 만 생각합니다). 그러나 그것은 흥미 롭습니다. 그들은 Eagle 파일을 가져올 수 있다고 주장했는데 이는 플러스입니다.

또한 Element 14 텐트에서 Eagle 담당자와 대화를 나눈 후 XML 형식으로 전환하고 있음을 나타 냈습니다.이 형식은 회로도 및 레이아웃의 버전을보다 타당성있게 만드는 큰 단계입니다. !



0

이것은 실제로 매우 좋은 질문입니다. FPGA는 "하드웨어"범주에 속하므로 FPGA 프로젝트에 제안하는 버전 제어 친화적 인 프로젝트 구조에 관심이있을 수 있습니다.

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

아이디어와 개념이 다른 하드웨어 프로젝트에 일반적으로 쉽게 적용될 수 있다고 생각합니다. (이 제안에 대한 의견은 매우 환영합니다.)


2
링크가 더 이상 작동하지 않습니다.
tyblu

0

자식을 피하십시오. 큰 리포지토리를 잘 처리하지 못합니다. 그리고 당신이하지 않으면 당신의 저장소가 커질 것입니다

  1. 변경 될 때 약간만 변경되는 이진 회로도 파일이 있습니다.
  2. 바이너리를 텍스트로 취급합니다.

3
글쎄 ... 프로젝트마다 하나의 작은 repo가 ​​있어야합니다.
요한

1
@Johan-...... 그렇습니다 .... 그 유지 보수 악몽과 함께 행운을 빈다. 어쨌든, 많은 하위 프로젝트가있는 클라이언트 당 약 1 개의 저장소 (현재 약 4, 저장소)가 있으며 꽤 잘 작동합니다. SVN은 적어도 5GB 이상의 이진 데이터를 너무 많은 문제없이 처리 할 수있는 것으로 보입니다.
코너 울프

1
@ConnorWolf 나는 당신이 어떻게하는지 듣고 싶습니다. 우리는 프로젝트 당 하나의 Git 저장소를 수행하며 아무런 문제가 없었습니다. 프로젝트 당 하나의 저장소를 가지고 있지 않다는 것은 유지 보수의 악몽처럼 들립니다.
매트 영

1
SVN, 적어도 (아마도 git도) 바이너리 바이너리를 저장하는 것보다는 파일의 전체 사본을 저장하는 것처럼 보이므로 공간 효율적입니다.
코너 울프

1
@ConnorWolf re : 유지 보수 악몽 : 8 년 후 : git-submodules는 아마도 당신이 원하는 것입니다. 예를 들어 여러 프로젝트 또는 고객간에 표준 툴링을 공유하는 경우에 적합합니다.
마커스 ül 러

0

나는 이것을 위해 다중 Mercurial (HG) 저장소 (프로젝트 당 하나)를 사용했지만 대부분의 버전 제어 시스템에서 경험할 수 있듯이 저장소가 점점 커지고 있습니다.


0

당신은 멧돼지 를 시도해야합니다 . 대용량 파일과 리포지토리를 처리 할 수 ​​있도록 설계되었습니다. 100GB 이상의 이진 데이터는 문제가되지 않습니다.


0

그 길을 가기로 결정한 경우 Mercurial에 대한 훌륭한 소개 인 HgInit에 대한 링크를 추가하고 싶습니다. 개인적으로 Git을 사용하지만 아키텍처 측면에서 매우 유사합니다 (둘 다 분산 버전 제어 시스템 임). 분산 된 특성으로 인해 "분산 된"팀에서 일하기에 적합합니다. :)

http://hginit.com/


Mercurial은 '순수한'소프트웨어 프로젝트를위한 훌륭한 소스 제어 시스템이지만, 파일을 합리적으로 병합 할 수 없기 때문에 본질적으로 순수한 2 진 파일을 처리하는 프로젝트에서 많은 장점을 잃게됩니다. 소프트웨어 만하지 않는 한 HgInit의 교훈은 의미가 없습니다.
whatsisname


0

이것은 하드웨어에 대한 ASCII 설명에 대해 생각할 가치가 있습니다. 하드웨어에 대한 사람이 읽을 수있는 설명이 채택되면 최신 개정 제어 시스템 (RCS)이 잘 작동합니다. 회로 레이아웃은 일반적으로 Gerber 파일에 의해 완전하게 설명되며 UML은 다른 부분을 설명하며 이는 완전 ASCII 설명입니다. 회로도, 기계적 레이아웃 등을위한 표준 아스키 형식이 더 적습니다 (예 : KiCAD).

채택은보다 실질적인 문제이며, 의미있는 차이를 포함하여 올바른 개정 관리에 대한 승인 된 요구 사항이 필요합니다. 이는 종종 Word, Excel, PowerPoint 등을 포기하는 것을 의미합니다. 관리자 및 MBA에 대한 매우 어려운 주장이지만, 의료 기기, 항공 및 군사와 같은 규제 산업은 이미 훌륭한 개정 관리가 필요합니다.

다른 사람들이 지적했듯이, 대부분의 최신 RCS는 버전 제어 이진 파일을 수정하여 버전을 보관하고 식별하는 데 매우 유용하지만 Agile과 같은 전자 문서 관리 시스템 (EDMS)은 임의의 이진에 개정 번호를 할당 할 수 있습니다. 지루한.


0

무료가 아니며 버그가 거의 없지만 Altium vault는 스털링 작업을 수행합니다. VCS가 해야하는 것처럼 커밋 지점으로 쉽게 롤백 할 수 있습니다.

이 영역에서, 알티 움은 방법 앞서 프리미엄 (멘토와 케이던스) 도구.

Altium 에서는 작동 하지 않지만 현재 문제에도 불구하고이 도구는 완전한 하드웨어 버전 관리를 매우 간단하게 만듭니다.


그리고 아마도 Vault가 좋은 것 중 하나 일 것입니다.
Matt Young

유닉스 방식; 한 가지 일을하고 잘한다.
피터 스미스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.