İçeriğe geç

Projeler 2026 yayında

git-remote-tasks

Jira, Vikunja, Microsoft To Do ve Notion'ı birer git uzak deposu gibi kullanmayı sağlıyor. Fetch her görevi dosya olarak çekiyor, push düzenlemeleri geri gönderiyor; diff, log, blame ve bisect görevlerde de çalışıyor.

Python

git-remote-tasks, görev takip araçlarını git'in remote helper mekanizmasıyla birer git uzak deposuna dönüştürüyor. PATH üzerinde git-remote-<şema> adıyla bulunan her çalıştırılabilir dosya bir remote helper sayılır. Bir adres o şemayla başladığında git bu programı çalıştırır ve stdin ile stdout üzerinden satır tabanlı bir protokolle onunla haberleşir.

Benimki yalnızca standart kütüphaneyi kullanan tek bir Python dosyası. Sembolik bağlantılar sayesinde dört ayrı adla çağrılabiliyor: git-remote-jira, git-remote-vikunja, git-remote-mstodo ve git-remote-notion. Hangi adla çağrıldıysa o aracın REST API'siyle git'in nesne modeli arasında çeviri yapıyor.

git fetch ve push, remote helper üzerinden takip aracına ulaşıyor. Her görev çalışma ağacında ayrı bir dosya olarak duruyor.

Uzak depo tanımlandıktan sonra git fetch jira-work her kaydı tasks/ altına dosya olarak çekiyor. Her görev için bir YAML ya da Org-mode dosyası oluşuyor. Bir dosyayı düzenleyip commit'ledikten sonra git push jira-work main çalıştırınca kayıt Jira'da da güncelleniyor.

Her eşitleme, bir öncekinin üstüne atılmış gerçek bir commit. Bu yüzden git diff main jira-work/main takip aracı tarafında neyin değiştiğini gösteriyor, git log -- tasks/ denetim kaydı işi görüyor ve git bisect bütün eşitlemeler arasında gezebiliyor. İlk fetch her şeyin tam bir kopyasını alıyor, sonrakiler yalnızca o zamandan beri değişenleri çekiyor. since damgası ancak dal yeni commit'e ilerledikten sonra kaydediliyor. Böylece yarıda kesilen bir içe aktarma veri kaybına yol açmıyor.

Push sırasında düzenlenen her dosya için bir upsert, silinen her dosya için bir silme isteği gönderiliyor. Başka bir kaynağa ait id taşıyan bir dosya, kopyası açılmak yerine reddediliyor. İsteklerden biri bile başarısız olursa git push sıfırdan farklı bir çıkış koduyla bitiyor. Erişim bilgileri adreste değil, .git/config içinde [tasks-remote "<ad>"] başlığı altında tutuluyor.