Django 및 South Migration과의 충돌 (0007_two… 및 0007_one) 어떻게 해결 하는가?

StackOverflow https://stackoverflow.com/questions/1447016

  •  22-07-2019
  •  | 
  •  

문제

Django 프로젝트에서 South를 마이그레이션 도구로 사용하고 싶지만 Multiuser 시나리오에서 South를 사용하는 데 문제가 있습니다.

다른 기계에서 동시에 작동하는 두 개의 개발자는 동일한 숫자로 두 개의 마이그레이션을 만듭니다.

  • 첫 번째 PC : 0007_extend_lizard.py

  • 두 번째 PC : 0007_swap_name_adopter.py

이 경우 실행할 수 있습니다 ./manage migrate --merge 또는 ./manage migrate 0006 (롤백) 및 실행 다시 ./manage migrate. 그러나 새로운 필드를 추가하고 싶을 때 models.py 그리고 달리기 ./manage startmigration southdemo --auto, 그런 다음 사우스가 얻습니다 models = {} 마지막 마이그레이션의 메타 데이터이며 첫 번째 마이그레이션의 정보가 누락되었습니다. 이 결과는 처음 0007에서 다시 생성 (!!!) 변경으로 마이그레이션 0008을 생성하는 것입니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

현재 저는 두 가지 옵션에 대해 생각하고 있습니다.

  • 한 파일로 0007 마이그레이션을 모두 수동으로 병합 한 다음 마이그레이션합니다 (일부는 "롤백"을 실행해야합니다)

  • 수동으로 누락됩니다 models = {} 메타에서 마지막 0007 마이그레이션과 다음 마이그레이션 --auto 0008은 완벽하게 작동합니다.

더 나은 옵션은 무엇입니까? 아니면 내가 놓친 다른 것이 있습니까?

도움이 되었습니까?

해결책

한 후 migrate --merge 또는 롤백 및 이동, 가장 최근의 마이그레이션이 현재 동결 된 모델이 부정확하다는 것을 알고 있다면 냉동 모델을 최신으로 제공 할 목적으로 새로운 NO-OP 마이그레이션을 만들 것입니다. 그냥 실행 ./manage.py startmigration myapp --empty freeze_noop. 이제 냉동 모델은 다음에 실제 마이그레이션을 자동으로 설정하려고 할 때 최신 상태가됩니다.

어쩌면 No-OP 마이그레이션을 만드는 것은 약간 못생긴 것처럼 보이지만, 이것은 당신이 제안한 수동 기록 편집 옵션 중 하나보다 깨끗해 보입니다. NO-OP 마이그레이션을 DVC의 "병합 커밋"과 동등한 것으로 생각할 수 있습니다.

이 문제는 언급되어야합니다 남쪽 문서 의이 섹션; 나는 제출했다 그것에 대한 문제. (업데이트 : 이제 그렇습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top