Django 및 South Migration과의 충돌 (0007_two… 및 0007_one) 어떻게 해결 하는가?
-
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의 "병합 커밋"과 동등한 것으로 생각할 수 있습니다.
이 문제는 언급되어야합니다 남쪽 문서 의이 섹션; 나는 제출했다 그것에 대한 문제. (업데이트 : 이제 그렇습니다.)