2017-11-08 22 views
1

나는 git의 도움을 받아 모델링/예측 작업을 시작하려고한다. 이 작업을 용이하게하기 위해 git 아키텍처를 설정하려고하지만 몇 가지 문제가 있습니다.데이터 업데이트로 모델링 작업을위한 작업 흐름

목표 : 지역에서 모델링 작업의 끝에서/소 지역의 branchs (필요한 인간의 개정, 인간의 개정 = 커밋), 코드의 버전을 함께 검토 할 수 예측을 모두 가지고 마스터 아래로 병합 그리고 그것이 실행 된 데이터 세트. 나중에 개정이 필요할 경우, 모 듈러는 정확한 예측이 완료된 시점에서 분기하여 올바른 (가능하면 이전) 버전의 코드로 작업 할 수 있어야합니다.

문제 : 데이터 및 코드 버전이 변경 될 수 있습니다. 구형 모델 실행은 이전 코드/데이터와 호환되지 않습니다 (예 : 지역 1, 코드 버전 1 및 데이터 버전 2를 사용할 수 있지만 지역 2, 코드 4 및 데이터 6). 프로젝트에서 예측을 재현 할 수 있어야합니다.

내 솔루션 : git의 철학에 위배되는 것 같지만 데이터 세트 또는 코드 업데이트가있을 때마다이를 마스터에 배치하고 파일 이름에 버전 번호를 추가하십시오. region/subregion 브랜치를 가지며 모든 예측 완료 커밋에 태그를 붙입니다. 그런 다음 예측이 완료되면 master로 병합하고 코드와 데이터가 실행 된 버전을 나타내는 다른 파일을 추가하십시오. 수정이 필요한 경우 완료 태그를 찾아 적절한 버전의 코드로 다시 작성한 다음 지역으로 병합 한 다음 마스터로 병합합니다. 모델을 재생해야하는 경우 생성 된 추가 파일의 올바른 코드/데이터로 모델을 실행하십시오.

git을 사용하여이 프로세스를 추적하는 가장 좋은 방법입니까, 아니면 더 좋고/더 간단한 방법이 있습니까? 이 프로세스가 작동합니까, 아니면 그로 인해 발생할 수있는 의도하지 않은 문제가 있습니까?

답변

1

데이터 및 코드 버전은 강한 커플 링, 파일의 두 세트를 의미

을 변경할 수 있지만, 그 커플 링 내 자신의 발전과 함께. 당신은 당신이 메인 부모의 repo에 각각 고정 SHA1을 참조 코드와 자신의 별도의 자식 저장소의 데이터를 각각 넣어 : Git submodules위한 일이다

parent/ 
    code/ 
    data/ 

그런 식으로, 상위 저장소에서 codedata이 변경되는 지점을 만들 수 있습니다. 예측이 완료되면 master (상위)에 병합 할 대상은 codedata의 최신 SHA1입니다.

서브 모듈의 관심은 repo와 호환되는 데이터 repo의 정확한 SHA1을 상위 레포에 기록한다는 것입니다.
그리고 파일 이름 바꾸기와 같은 "해킹"을 완전히 피할 수 있습니다.

+0

"상위 리포에 기록하십시오. 정확한 SHA1 ..."은 나중에 언제든지 이전 예측을 실행하기 위해 그 SHA1에 reset --soft가 필요하다는 것을 의미합니까? – RayVelcoro

+0

@RayVelcoro 부모를 원하는 SHA1로 재설정하면 하위 커밋이 상위 커밋에 기록 된대로 각각의 SHA1로 재설정됩니다. SHA1은 gitlink입니다 (https://stackoverflow.com/a/2227598/6309 및 https://stackoverflow.com/a/17442045/6309 참조). – VonC