İçeriğe geç
pitonmert

Geliştirici Aracı · CLI

git-sync

Birden fazla GitHub deposunu tek komutta denetleyen, güvenli güncelleyen ve ortak Git yapılandırmalarını birleştiren .NET CLI aracı.

  • C#
  • .NET
  • Git
  • GitHub CLI
  • Spectre.Console
Kaynak kod

Bağlam ve amaç

git-sync, çok sayıda GitHub deposunu aynı yerel dizinde düzenli tutma ihtiyacından doğan bir komut satırı aracıdır. Eksik depoları bulma, güncel olmayan dalları güvenle ilerletme ve ortak Git yapılandırmalarını toplama işlerini tek bir akışta birleştirir.

Araç, her depoyu zorla aynı noktaya getirmeyi amaçlamaz. Yerel çalışma, ayrışmış tarihçe ve bozuk depo gibi durumları görünür kılar; veri kaybı veya otomatik merge riski taşıyan kararları kullanıcı onayı olmadan vermez.

Nasıl çalışır

Çalışma dört adımda ilerler. İlk olarak hedef dizindeki depolar denetlenir ve bozuk olanlar kullanıcıya raporlanır. Ardından GitHub CLI üzerinden erişilebilen ancak yerelde eksik olan depolar klonlanır. Güncelleme adımı uygun branch’leri fast-forward ile ilerletir; son adım ise depolardaki gitignore ve gitattributes kurallarını ortak çıktılarda toplar.

Akış başlamadan Git, GitHub CLI, oturum durumu ve hedef dizin doğrulanır. İstenirse dry-run ile hiçbir dosya değiştirmeden planlanan silme, klonlama, güncelleme ve birleştirme işlemleri görülür. Sonuçlar terminalde özetlenebilir veya JSON olarak dışa aktarılabilir.

Sistem tasarımı

Uygulama Core, Application ve Infrastructure katmanlarına ayrılmıştır. Core; seçenekleri, sonuç modellerini ve servis sözleşmelerini taşır. Application; orkestratörü, doğrulayıcıları ve iş akışı adımlarını içerir. Infrastructure ise Git, GitHub CLI, dosya sistemi, süreç çalıştırma ve Spectre.Console uygulamalarını sağlar.

Bu ayrım, Git komutlarını ya da dosya erişimini doğrudan iş kurallarına bağlamaz. Testler; süreç, dosya sistemi ve kullanıcı arayüzünü mock ederek iş akışı kararlarını gerçek bir GitHub hesabına veya çalışma dizinine ihtiyaç duymadan sınar.

Öne çıkan teknik kararlar

Aktif takip dalı yalnız fast-forward mümkünse güncellenir. Diğer branch’lerde önce atalık ilişkisi denetlenir; ayrışmış tarihçeler otomatik merge edilmez. Bu tercih, kolaylık karşılığında kullanıcının yerel çalışmasını kaybetme riskini kabul etmez.

Klonlama ve güncelleme paralel yürütülebilir ancak eşzamanlılık sınırlandırılır. Böylece büyük repo kümelerinde ağ ve disk kullanımı kontrol altında tutulur. Alt modüller, ilgili depo güncellendiğinde ayrı ele alınır.

Bozuk depo temizliği ve dosya üreten birleştirme adımları dry-run ile görünür hale gelir. Bu araçta önizleme modu yalnız bir raporlama seçeneği değil, potansiyel olarak yıkıcı bir iş akışının güvenlik sınırıdır.

Doğrulama ve sınırlar

Birim testleri; doğrulama, bozuk depo tespiti, klonlama, güncelleme, dry-run ve yapılandırma birleştirme adımlarını kapsar. Süreç sonuçları ve zaman aşımı davranışı da soyutlama katmanında kontrol edilebilir.

Araç genel amaçlı bir merge conflict çözücüsü değildir. Yerel değişiklikler, detached HEAD, yetki sorunları veya ayrışmış branch’ler otomatik olarak çözülmez. Çalışması için Git, GitHub CLI ve doğrulanmış bir GitHub oturumu gerekir; yükseltilmiş yetkilerle çalıştırılmamalıdır.