Django Migrationlar ve Takım Çalışması
Feb 18, 2017 · 2 minute read · Commentsprogrammingpython
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 develop
a(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 develop
a 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 0012
e 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.