Merhaba sevgili yazılımperver dostlar, bu yazımda kısa bir süre önce kullanmaya başladığım (ve ihtiyaç duyduğum) bir kabiliyete yönelik bilgi vermeye çalışacağım: “git submodules”.
Mevcut bir projeniz var ve içerisinde ayrı bir git reposunu, bu repodaki projeniz ile birlikte kullanmak istiyorsunuz. Ne yapabiliriz?
Diyelim ki elinizde main projeniz var ve bunu klonladınız ve içerisinde de lib adlı ayrı bir kütüphaneyi de kullanmak istiyorsunuz, ne yapmalısınız?
1 |
git submodule add https://github.com/.../lib |
demeniz yeterli
lib reposu artık, lib dizini olarak duruyor olacak projenizin içerisinde.
Kullandığınız git sürümüne bağlı olarak dizinin içerisi boş olabilir. Bu durumda aşağıdaki komutu da çağırmanız gerekmekte (yenilerde buna gerek olmayacak):
1 |
git submodule update --init --recursive |
Bu adımdan sonra tepe dizinde “git status” dediğinizde yeni dizin ve .gitmodules dosyasını görüyor olacaksınız. Örneğin, uEngine4 repomu ayrı bir proje eklediğimde benim gördüğüm çıktı şu şekilde:
1 2 3 4 5 6 7 8 |
On branch main No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitmodules new file: uEngine4 |
şimdi bu değişiklikleri commitleyelim ve github’ta nasıl görünüyor ona bakalım:
resimde gördüğünüz gibi bir bağlantı oluştu ve tıkladığınızda ilgili repoya gidebiliyorsunuz artık.
Peki gelelim bundan sonraki git kullanımına, bundan sonra kullanımlarda bulunduğunuz dizine göre davranışta bir takım değişiklikler olabilir:
1 2 3 4 5 6 7 8 |
cd .\main git log // main reposuna yönelik log'lar gösterilir cd .\main\lib git log // lib reposuna yönelik log'lar gösterilir cd .\main\main_repo_folder git log // main_repo_folder, main repoda olduğu için, main reposuna yönelik log'lar gösterilir |
Bir diğer dikkat edilmesi gerek nokta, diyelim ki yukarıdaki gibi submodule olarak repo’yu eklediniz ve sonra sıfırdan bir klonlama yaptınız, her şey gelir mi?
dir .\main\lib
dediğiniz boş bir dizin göreceksiniz. İşte submodullerde dikkat etmeniz gereken konu bu. git sizden, her içeriği indirmesi için spesifik olarak komut iletmenizi bekler, bu sebeple de ilk klonlamayı yaptıktan sonra aşağıdaki komutu da çağırmanız gerekmekte:
1 |
git submodule update --init --recursive |
eğer bu işi başta yapmak isterseniz, git clone komutuna “–recursive” argümanını eklemeniz yeterli.
Submodule’ler ile çalışırken “git submodule update” ve yukarıdaki klon komutlarını kullanmayı unutmayın.
Elbette git submodule’lere yönelik her şey bunlar değil ama çalışmaya başlamak için yeterli olacağını düşünüyorum. Daha detaylı bilgi için aşağıdaki kaynaklara göz atabilirsiniz. Bir sonraki yazımda görüşmek üzere kendinize iyi bakın.