여러 코드 브랜치로 개발할 때 다른 Django 개발자가 South에서 데이터베이스 마이그레이션을 관리하는 방법에 대해 궁금합니다. 샘플 시나리오를 알려 드리겠습니다.여러 코드 브랜치로 Django South를 사용하기위한 워크 플로우
예를 들어 주 트렁크로 개발을 시작한다고 가정 해보십시오. 트렁크에서 지점 A를 만듭니다. 이 시점에서 app_1
의 마지막 마이그레이션 버전은 0010입니다.
그런 다음 0011_add_name_column
이라는 마이그레이션 파일을 만드는 트렁크에 app_1
에 대한 마이그레이션을 만듭니다. 한편, 지점 A에서 다른 개발자는 지점 A에 동일한 app_1
에 대한 다른 마이그레이션 파일을 만듭니다. 0011_increase_value_column_size
.
브랜치 A는 결국 트렁크로 병합됩니다. 이 경우 지점 A에있는 app_1
의 마지막 이전 버전은 0020
이고 트렁크의 마지막 버전은 0018
이며 모두 다른 마이그레이션입니다. 보시다시피, 마이그레이션 파일의 상태는 버전 0011
이후로 엉망입니다. 분기가 트렁크에서 분기되면서 병합시 충돌이 발생했습니다.
South's tutorial에 따르면이 경우를 처리하는 유일한 방법은 모든 충돌을 수동으로 해결하는 것입니다. 그러나 충돌의 양이 큰 경우에는 실제로 원하는 솔루션이 아닙니다. 대개 어떻게 이런 상황을 처리합니까, 아니면 처음에는 그것을 피하기 위해서입니까?
항상 생성 할 수있는 것은 아니기 때문에 이전에 수동 마이그레이션을 작성해야했습니다 그 상황을 소스 제어에 맡길 필요가있다. –
나는 남한과 함께 많은 이주를 해왔다. 필자는 수동으로 * 스키마 마이그레이션을 수동으로 작성하지 않아도되었습니다. 이제 데이터 마이그레이션은 다른 이야기이며 분명히 사용자 지정 데이터 마이그레이션을 삭제하지 않으려는 것입니다. 그러나 스키마 마이 그 레이션 * 내부에서 데이터 마이그레이션을 수행하는 경우 잘못 수행하고있는 것입니다. 그렇지 않은 경우 실제로 커스텀 스키마 마이그레이션이 필요한 이유를 자세히 살펴볼 것입니다. 왜냐하면 실제로 2 년 이상 동안 장고를 사용해야 만했기 때문입니다. –
나는 그것이 일반적인 현상이라고 말하지 않을 것이다. 그러나 장고와 남용의 여러 해 동안 나는 그것을 몇 번해야만했다. 때마다 그것은 팀에있는 누군가의 오류, 다른 지점에서의 두 이주 또는 dev 및 프로덕션에서 다른 DB 기술 사용에 따른 문제점으로 인한 것입니다. 일이 생길 때마다 확실히 나쁜 일이지만, 일이 발생했을 때 마이그레이션이 소스 제어에 포함되어있어서 기쁩니다. –