Django Migrationlar ve Takım Çalışması

Bir proje uzerinde calisan birden fazla kisi oldugunda takim uyelerinin olusturdugu migrationlarinin cakismasi kacinilmaz olabiliyor. Bu yazimda bu problemi ve nasil cozdugumuzu dilim dondugunce anlatmaya calisacagim.

Mesela Erdem arkadasimla ayni proje uzerinde calisiyoruz. Erdem calistigi branch’de Profile isimli bir model olusturdu, daha sonra migration dosyasini olusturdu(migration dosyasinin isminin 0011_.... oldugunu varsayalim) ve developa(ortak branch) merge etti diyelim. Sonrada ben Erdem’in develop brancindeki degisiklikleri kendi branchime merge edip, Profile modeline yeni bir field ekledim diyelim. Dogal olarak yaptigim bu degisiklik ile beraber yeni bir migration dosyasi(0012_...) daha olustu. Buraya kadar bir sikinti yok.

Ben yine kendi branchimde gelistirmeler yapmaya devam ediyorum. Yeni yaptigim gelistirme sonucunda 0013... isimli bir migration dosyasi daha olustu. Daha sonra elimdeki isi bitirdim ve developa merge etmek istiyorum. Aaa oda ne, biz gelistirme yaptigimiz zaman zarfinda develop branchine 0013... numarali yeni bir migration dosyasi gelmis. Ama bizim branchimizde de migrate edilmis baska bir 0013... numarali migration dosyasi daha var. Bu durumda develop branchini kendi branchime merge edip python manage.py makemigrations --merge ile migrationlar birlestirebilirim fakat takim arkadasimin olusturdugu migration ile benim olusturdugum migration ayni Model uzerinde degisiklik yapiyorsa yuksek ihtimalle migrate edemeyip hata alacagim.

Bu sorunu hem hata almadan hemde ekstradan merge migration olusturmadan nasil cozeriz diye bakinirken soyle bir yontem bulduk:

developu kendi branchime merge etmeden once kendi branchimde sonradan olusturulan 0013 nolu migrationi geri aliyorum. Yani 0012e gidiyorum:

python manage.py migrate <app_name> 0012_...

Daha sonra geri aldigim 0013 numarali migration dosyasini silip develop branchini kendi branchime merge ediyorum. Merge islemiyle beraber develop branchinden 0013 numarali migration dosyasi geliyor. Sonra python manage.py migrage komutu ile gelen yeni migrationu dbye uyguluyorum. Daha sonrada python manage.py makemigrations diyip kendi branchimde yaptigim degisikliklerle alakali migrationu yeniden olusturuyorum(0014...) ve migrate ediyorum. Artik projemizin migration orderi duzeldi. Nefisss :)


Ben gelistirme yaparken migratin dosyalarini is bitene kadar commit etmiyorum. En son is bitiminde o yeni olusan migrationlari yukarida anlattigim gibi geri aliyorum, siliyorum ve yeniden olusturup commitliyorum.

comments powered by Disqus