회로도 및 소스 코드의 버전 제어


12

하드웨어 (Eagle 회로도)와 펌웨어 (C ++ 소스 코드)의 두 부분으로 된 전자 장치를 개발 중입니다. 소스 코드와 회로도의 변경 사항을 추적하고 싶지만 작업을 구성하는 방법을 잘 모르는 부분이 있습니다.

  • 소스 코드에는 Git을 사용합니다. 그러나 실제로 이진 파일 일 때 버전을 조정할 가치가있는 회로도입니까 (새로운 Eagle 버전은 XML 형식을 사용하지만 사람이 읽을 수는 없습니다 ...)?

  • 소스와 회로도를 하나의 Git 리포지토리에 넣는 것이 좋은 생각입니까? 의미가 있지만 반면에 내 로그에는 소프트웨어 및 하드웨어 변경 사항이 모두 포함됩니다. 또한 소프트웨어에는 여러 가지가있을 수 있지만 하드웨어는 아마도 ...

  • 하드웨어 개정을 처리하는 방법? 태그를 지정하거나 별도의 디렉토리에 저장 하시겠습니까?

  • 또한 하드웨어 개정판과 펌웨어 버전간에 약간의 종속성이있을 수 있습니다. 그들을 다루는 방법?

모범 사례를 나와 공유해 주시겠습니까?


상용 솔루션이 작동합니까?
유진 Sh.

5
나는 상용 버전 제어 시스템을 다시는 만지지 않을 것입니다. 내 경험은 svn 또는 git보다 사용하기 훨씬 어려운 끔찍한 워크 플로우입니다.
pjc50

사용하는 버전 관리 소프트웨어에 관계없이 회로도를 처리하고 텍스트를 보지 않을 때 전체 파일을 대체해야합니다. 나는 과거에 그 문제가있었습니다. 대부분의 도식 파일에 대해 diff를하고 싶지 않을 것입니다.
전압 스파이크

답변:


19

그것은 대부분 개인 취향에 달려 있습니다.

Git에서 프로젝트를 위해 내가하는 모든 것을 추적합니다. 특히 Git은 대부분의 파일 형식, 심지어 바이너리까지도 충분히 효율적으로 처리하기 때문입니다. (내장 Altium SVN 넌센스 대신)

내 주된 이유 중 하나는 고객이 Dropbox가 충분히 안전하다고 느끼지 않고 전 세계에서 액세스 할 수있는 백업 시스템과 대부분의 작업에 대한 일부 버전 관리 컨텍스트가 필요하기 때문입니다. 그래서 개인 Git 서버와 암호화 된 백업 시스템을 설정하고 대우를했습니다. 보드, 회로도, 코드, 문서, 보고서, 수동 수정 등 모든 것이 추적됩니다.

나는 일반적으로 하드웨어, 하나는 소프트웨어, 하나는 펌웨어를 위해 잠재적으로 오래 실행되는 프로젝트 인 경우 작은 저장소를 만들지 만 소규모 서비스 프로젝트, 예제 또는 작은 실험의 경우 결과로 인해 종종 하나의 저장소에 모두 넣습니다. 혼돈은 크지 않을 것입니다.

Git에서는 하위 리포지토리를 사용하여 펌웨어를 하드웨어 프로젝트 또는 다른 방식으로 관리 리포지토리로 통합하더라도 펌웨어를 하드웨어 프로젝트에 통합 할 수 있습니다.

대규모 프로젝트의 경우 일반적으로 버그 추적 시스템을 사용하여 문제와 해결 방법을 추적합니다. 다시 SW뿐만 아니라 HW에서도 Mantis는 무료로 사용할 수있는 좋은 도구입니다.

하드웨어 개정판에 대해 Gerbers 또는 그 개정판에 대해 Git Hash로 태그가 지정된 모든 것을 생성 한 경우, Gerbers는 R01, 02 등으로 폴더에있는 유일한 "구식"버전 화 된 항목입니다. 항상 파일을 재생성하지만 결과 파일이므로 Git 자체에서 버전을 지정해서는 안됩니다. 실제로 디자인 소프트웨어가 프로덕션 컨텐츠를 생성하거나 결정해야하기 때문입니다 ...

R01에서 발생하지 않는 흥미로운 R01 (또는 다른 방법)이 있다면 소스 파일을 비교할 수있는 두 개의 Git Hashe가 있으며 걱정할 필요가 없습니다.

마지막으로, 프로젝트의 하나의 개념적 예는 "BoardPinout.h"파일을 호스팅하는 하드웨어 저장소를 갖습니다. 이 파일은 펌웨어 리포지토리에 원격으로 버전이 지정된 파일로 포함되며 여기에는 소프트웨어 리포지토리에 원격으로 포함되는 몇 가지 인터페이스 정의 파일이 있습니다.

광범위한 기능을 수정하지 않고 몇 가지 신호를 변경할 때마다 HW 프로젝트가 BoardPinout을 "업데이트"한 다음 펌웨어에서 업데이트 및 사용할 수 있습니다.


1
정말합니까 이제까지 다른 REPOS 하드웨어 및 펌웨어를 넣어 의미가? 그것들을 하나로 묶는 것이 어떻게 문제가 될까요? 함께 속한 구성 요소의 변경 사항을 추적해야하는 경우 오히려 문제가 될 것으로 예상합니다 (예 : 스왑 된 IO 핀이 다른 펌웨어 할당에 반영되어야하며 호환되지 않는 버전을 확인하면 문제가 발생할 수 있음).
leftaroundabout

@leftaroundabout 우선, 복잡한 CAD 디자인으로 빠르게 변화하는 FW 리포지토리를 팽창시키는 것이 항상 원하는 것은 아니지만 하위 리포지토리와 그 사이의 연결에 대한 비트를 다시 읽을 수도 있습니다. Git과 전혀 관련이 없으며 디자인 트랙 사이에 부적절한 종류의 친밀감을 유발하지 않으면 서 그 문제를 정확하게 해결합니다.
Asmyldof의

1
"내 고객이 Dropbox가 충분히 안전하다고 생각하는 것은 아닙니다."버전 관리 파일의 경우 100 % 정확합니다. 여러 사용자가 동시에 파일을 수정할 수있는 경우 특히 위험하며, 실제로 단일 리소스를 구성하는 여러 파일이있는 경우 더욱 위험합니다. 바이너리 "파일 세트"가 이런 식으로 손상되는 것을 보았습니다 (ESRI 파일 지오 데이터베이스, 궁금한 경우).
jpmc26

1
@ jpmc26 그것은 성급한 의견이었습니다. 모든 버전 관리는 초기에 안전 측면에서 더 시작되었습니다. 영리한 GitIgnore 템플릿 버전 관리를 통해 번거 로움없이 모든 것을 쉽게 포괄 할 수 있습니다. 공유 Dropbox에 대해서는 귀하와 완전히 동의합니다. 한 고객 사이트에서 끝없는 문제가 발생합니다. 개발중인 파일이 컴퓨터에서 끝없이 충돌하는 사본을 생성하면 개발 과정에서 가장 성가신 파일 중 하나가 꺼졌습니다.
Asmyldof의

@leftaroundabout : 하드웨어와 펌웨어의 관계에 따라 다릅니다. 일반적인 소프트웨어 프로젝트와 비유 해 봅시다. 웹 사이트와 함께 gif 및 jpg 파일을 커밋 하시겠습니까? 이 경우 그림이 자주 변경되지 않더라도 이진 및 소스가 서로 변경됩니다. 그러나 .. 프로젝트에서 Apache 또는 Nginx 소스 코드를 커밋합니다. 그 문제에 대해 Linux 커널의 소스 코드를 커밋 하시겠습니까? 이 경우 Apache 또는 Nginx 및 Linux 커널은 하드웨어와 유사합니다. 하드웨어와 유사하지만 실행되는 코드와는 독립적으로 변경됩니다.
slebetman

5

1) 회로도 / 보드 파일의 버전을 지정할 가치가 있습니다. 차이점을 쉽게 추적 할 수 없더라도 이전 장치 개정판으로 작업해야하는 경우 특정 하드웨어 릴리스로 되돌릴 수있는 확실한 방법이 있습니다.

2) SVN에는 다음과 같은 구조가 있습니다.
/ tag
/ branch
/ trunk / hardware
/ trunk / software / firmware

소프트웨어 및 / mainboard 및 / daughterboard의 경우 / Firmware 및 / ConfigTool 또는 하드웨어의 경우와 같은 더 많은 하위 폴더에 적용 할 수있는 경우.

2) 태그는 Tag / Mainboard-v1.2.345와 같이 전체 트렁크가 아닌 하위 폴더에서 생성됩니다. 하드웨어 (즉, PCB)는 항상 직접 참조 할 수 있도록 실크 스크린 인쇄 또는 구리에 SVN 개정을 포함합니다.

4) 하드웨어와 펌웨어 간의 종속성은 복잡 할 수 있습니다. IMO 커밋에 대한 유용한 의견을 남기지 않는 한 저장소 수준에서 처리하는 것은별로 의미가 없습니다.
여분의 I / O 핀을 사용하여 하드웨어 변경 사항을 인코딩하십시오. 16 개의 다른 하드웨어 버전을 인코딩하기 위해 4 핀을 사용하는 것과 같은 것. 또한 버전을 인코딩하기 위해 저항 값이 다른 단일 ADC 입력을 사용했습니다. 이렇게하면 소프트웨어가 실행하는 하드웨어를 "알고"특정 기능을 변경 / 비활성화 / 활성화 할 수 있습니다.


나는 동의한다. 또한 매번 릴리스 할 때마다 "릴리스 번들"(스키 매틱, BOM, 거버, 전체 로트)을 구축하는 좋은 방법을 보았습니다. 이 A, B, C 등을 호출 한 다음 팀이 참조 할 수있는 곳에 보관하십시오. 또한 어떤 프로토 타입 보드에서 수행 한 와이어 모드를 추적하는 몇 가지 방법을 잊지 마십시오.
pjc50

@ pjc50 : 실제로 "빌드"릴리스 번들도 수행하지만 소스 제어에서 벗어납니다 (그러나 개정판 참조 포함). 본질적으로 제조업체가 얻은 모든 것의 정확한 사본이 될 것입니다. 대량 생산으로 전문적으로 하드웨어 개발을 수행하는 경우 문제가 발생할 경우 모든 정보를 즉시 사용할 수 있도록하는 것이 매우 중요합니다. 보드 하우스에 "이 중요한 문서"를 보내면 사용자 정의 PCB 구리 두께를 지정하는 것을 기억하지 못하는 경우 문제가 될 수 있습니다.
Rev1.0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.