Git Deposundan Alt Dizin Ayrıştırma
Eğer kodlarınızı bir git deposunda tutuyorsanız ve bu depoyu iki ayrı depo haline getirmek istiyorsanız, bu yazı işinize yarayabilir. Benim böyle bir ihtiyacım vardı, ve bulduğum Stackoverflow sorusu sayesinde, geçmişi kaybetmeden, git depomu iki ayrı git deposu haline getirdim.
Önce, ne yapacağımıza biraz daha dikkatli bakalım, şu haldeki git deposunu:
DIZIN1/ .git/ DIZIN2/ DIZIN3/
Şu hale getireceğiz:
DIZIN1/ .git/ DIZIN2/ DIZIN3/ .git/
İşlemlere başlamadan önce, tüm deponuzu yedekleyin. Herhangi bir hata olması durumunda, verilerinizi kaybedebilirsiniz. İlk yapacağımız şey, depoyu klonlamak:
Şu anda, DIZIN3 içerisinde, tüm git geçmişiniz bulunuyor. Şimdi geçmişi filtreden geçirip, sadece alt klasöre ait geçmişin kalmasını sağlamalıyız. Bu komutu, klonladığınız git deposu içerisinde verin.
Şu anda, bütün git geçmişiniz, sanki deponun kök dizini DIZIN3'müş gibi yeniden yazılmış olmalı. Daha sonra, depoyu resetlememiz lazım.
git gc komutuyla, gereksiz dosyaları silelim.
Son olarak da, git prune komutuyla işlemimizi bitiriyoruz. Bu komut, dosyalarımızla, geçmişimizin birbirine uyumlu olduğundan emin olmamızı sağlıyor.
Artık yeni git deponuz hazır olmalı, büyük deponuzu içerisinden de bu alt dizini silip, yeni bir commit ile bu dizini çıkarabilirsiniz. İsterseniz yeni deponuzu alt modül olarak tekrar ilk deponuza ekleyebilirsiniz. Böylece, eğer bu iki depo birbirine bağımlıysa, kodlarınız doğru çalışmaya devam eder.Yalnız, git push komutunun alt modülleri göndermediğini aklınızda çıkarmayın.Yeni dizin kendi başına bir depo olduğundan, git pull ve git push komutlarını bu dizin içerisinden ayrıca vermelisiniz.