2017-02-26 25 views
6

Git kodunun test işlemlerinin optimizasyonunu yapmak için nesneleri sorgulamada bazı gelişmiş kullanımları yapıyorum, bu nedenle aşağıdakiler çok insanın kullandığı kullanımdan çok uzaktaysa Git ile yap.Git: Uzaktaki nesneleri keşfetme

Bir uzaktan kumandadaki nesneler hariç olmak üzere, git cat-file -p [...] gibi bir şey yapmak istiyorum. Yani, demek istediğim, "Uzak origin, bana A'u göster, özellikle ağacının kimliğinin ne olduğunu söyle, sonra bana ağacın içeriğini göster (lekeler ve alt simgeler listesi)" Gerek yok Dosyaların gerçek içeriğini, sadece yukarıdaki bilgileri getir.

Uzaktan kumandadan yerel repo'ma işlemi gerçekleştirebileceğimi ve bunun üzerinde git cat-file'u kullanabileceğimi biliyorum, ancak daha sonra bu işlemin tüm ebeveynlerini uzaktan almayı içerecek ve bu da uzun bir zaman alabilir. Hızlı olmak için buna ihtiyacım var çünkü birçok farklı depoda günde yüzlerce kez çalışması gereken bir programda yapılıyor.

Yukarıdakileri, işlemi gerçekleştirmeden yapmanın bir yolu var mı?

cevap

1

Zaten git fetch --depth=...'un istediğini yapmadığını doğruladığını varsayalım.

Eğer uzaktan için ssh/scp erişiminiz varsa, sadece o taahhüt için indiviudal dosyası (karma a1b2c3d4 olarak uygularsa, bu dosyanın objects/a1/b2c3d4 içine saklanır) yakalayabilir. Aynı dizinde/adla yerel .git/objects'a yerleştirin. Daha sonra yerel git cat-file'u her zamanki gibi kullanın. Çıktısından, ağacın karmasını ayrıştırabilir ve oradan başlayarak, tek tek nesne dosyalarını tamamlanana kadar getirebilirsiniz. git cat-file, eksik bitlerle ilgilenmez, dosyanın bulunduğu bir kargaşa varsa, içeriği memnuniyetle çıkar.

"Gerçek" yerel deponuzdaki sorunları önlemek için, boş bir depoda, yani git init tmprepos ile yeni oluşturduğunuz bir dosyayı veya herhangi bir şeyi yapabilirsiniz. Orada başka hiçbir şey olmadığı için acı vermez.

DÜZENLEME: git, paket dosyaların içindeki bazı nesneleri saklar. Daha fazla bilgi almak için https://git-scm.com/book/en/v1/Git-Internals-Transfer-Protocols numaralı telefona bakın.

+0

Teşekkürler, bu işe yarayabilir, ancak bu demek oluyor ki şimdi URL'ye bakan bir mantık eklemek zorundayım, bir SSH kütüphanesi kullanarak sunucuya erişirse, ssh olsun diye ... Bu büyük bir karmaşa. Umarım daha güzel bir çözüm vardır. –

+0

Evet, bu programı kendi başınıza yapmanız gerekecek, tek tek işlemleri almak için talimat verebileceğiniz 'git getirme'den daha düşük bir komut yoktur. Ben buna karmaşa demezdim, sadece programlama. Sistem ("scp ...") ile başlayacağım ya da seçtiğiniz komut dosyasında sistem komutlarını çağırmak zorunda kalıyorsunuz ve alt işlem başlangıcından dolayı performans kötü ise bir SSH kitaplığına gidiyorum. Eğer http erişimi varsa, o zaman aynı cevap, sadece farklı protokol. – AnoE

İlgili konular