IPython dizüstü bilgisayarları sürüm kontrolü altında tutmak için iyi bir strateji nedir ?
Dizüstü bilgisayar biçimi sürüm kontrolü için oldukça uygundur: dizüstü bilgisayar ve çıkışları sürüm kontrol etmek istiyorsanız, bu oldukça iyi çalışır. Rahatsızlık, özellikle filmler ve parseller için büyük ikili lekeler olabilen hücre çıktıları (aka. "Yapı ürünleri") hariç olmak üzere, yalnızca girdinin sürüm kontrolünü yapmak istediğinde ortaya çıkar. Özellikle, ben iyi bir iş akışı bulmaya çalışıyorum:
- çıktıyı dahil etmek veya hariç tutmak arasında seçim yapmamı sağlar,
- istemediğimde yanlışlıkla çıkış yapmama engel oluyor,
- yerel sürümümde çıktı tutmama izin veriyor,
- Sürüm kontrol sistemimi kullanarak girişlerde değişiklik olduğunda ne zaman görmemi sağlıyor (yani yalnızca sürümleri girişleri kontrol ediyor, ancak yerel dosyamda çıktılar varsa, girişlerin değişip değişmediğini görmek için (bir taahhüt gerektiren) Sürüm denetimi durum komutunu kullanmak, yerel dosyanın çıktıları olduğundan her zaman bir fark kaydeder.)
- çalışma defterimi (çıktıyı içeren) güncellenmiş temiz bir defterden güncellememe izin veriyor. (Güncelleme)
Belirtildiği gibi, çıkışları dahil etmeyi seçtiğimde ( örneğin nbviewer kullanılırken istenir ), o zaman her şey yolunda. Ben ne zaman sorunudur yok çıkış sürüm kontrolü istiyorum. Dizüstü bilgisayarın çıktısını çıkarmak için bazı araçlar ve komut dosyaları vardır, ancak sıklıkla aşağıdaki sorunlarla karşılaşıyorum:
- Çıktının yanlışlıkla bir versiyonunu işlerim, böylece depomu kirletirim.
- Sürüm denetimini kullanmak için çıktıyı temizlerim, ancak çıktıyı yerel kopyamda tutmayı tercih ederim (bazen örneğin çoğaltmak biraz zaman alabilir).
- Çıkışı şeritleyen bazı komut dosyaları formatı
Cell/All Output/Clear
menü seçeneğine göre biraz değiştirir , böylece farklarda istenmeyen gürültü oluşturur. Bu, bazı cevaplar tarafından çözülür. - Değişiklikleri dosyanın temiz bir sürümüne çekerken, bu değişiklikleri her şeyi yeniden çalıştırmak zorunda kalmadan çalışma not defterime dahil etmenin bir yolunu bulmam gerekiyor. (Güncelleme)
Aşağıda tartışacağım birkaç seçenek ele aldım, ancak henüz iyi ve kapsamlı bir çözüm bulamadım. Tam bir çözüm IPython'da bazı değişiklikler gerektirebilir veya bazı basit harici komut dosyalarına güvenebilir. Şu anda mercurial kullanıyorum , ama git ile çalışan bir çözüm istiyorum : ideal bir kontrol sürüm kontrolü agnostik olurdu.
Bu sorun birçok kez tartışılmıştır, ancak kullanıcının bakış açısından kesin veya açık bir çözüm yoktur. Bu sorunun cevabı kesin bir strateji sağlamalıdır. IPython'un yakın zamanda (hatta geliştirme) bir sürümünü veya kolayca yüklenen bir uzantıyı gerektiriyorsa sorun yoktur.
Güncelleme: Gregory Crosswhite'ın önerilerini kullanarak isteğe bağlı olarak her kaydetmeyle birlikte bir sürüm kaydeden değiştirilmiş dizüstü bilgisayar sürümümle oynuyorum . Bu, kısıtlamalarımın çoğunu karşılar, ancak aşağıdakileri çözülmez:.clean
- Bu henüz standart bir çözüm değildir (ipython kaynağının değiştirilmesini gerektirir. Bu davranışı basit bir uzantı ile gerçekleştirmenin bir yolu var mı?
- Geçerli iş akışı ile ilgili bir sorunum değişiklikleri çekmek. Bunlar
.clean
dosyaya gelecek ve daha sonra bir şekilde çalışma sürümüme entegre edilmesi gerekiyor. (Tabii ki, her zaman dizüstü bilgisayarı yeniden yürütebilirim, ancak bu bir acı olabilir, özellikle de sonuçların bazıları uzun hesaplamalara, paralel hesaplamalara vb. Bağlıysa). . Belki de ipycache gibi bir uzantı içeren bir iş akışı işe yarayabilir, ancak bu biraz karmaşık görünüyor.
notlar
Çıktıyı Çıkarma (Sıyırma)
- Dizüstü bilgisayar çalışırken,
Cell/All Output/Clear
çıktıyı kaldırmak için menü seçeneği kullanılabilir . - Çıktıyı kaldırmak için, çıktıyı kaldıran ancak dizüstü bilgisayar arabirimini kullanmakla aynı çıktıyı üretmeyen nbstripout.py komut dosyası gibi bazı komut dosyaları vardır . Bu, sonunda ipython / nbconvert deposuna dahil edildi , ancak bu değişikliklerin şimdi ipython / ipython'a dahil edildiğini belirten kapatıldı , ancak karşılık gelen işlevsellik henüz dahil edilmemiş gibi görünüyor. (güncelleme) Bu varlık dedi Gregory Crosswhite çözümü bu, hatta yürütmesini olmadan oldukça kolay yapmak olduğunu gösterir ipython / nbconvert, bu yüzden düzgün bir şekilde takılabilirse bu yaklaşım muhtemelen uygulanabilir. (Ancak, her sürüm kontrol sistemine eklemek iyi bir fikir gibi görünmüyor - bu bir şekilde dizüstü bilgisayar mekanizmasına takılmalıdır.)
Haber Grupları
Sorunlar
- 977: Dizüstü bilgisayar özellik istekleri (Açık) .
- 1280: Kayıtta tümünü temizle seçeneği (Aç) . ( Bu tartışmanın devamı .)
- 3295: otomatik dışa aktarılan not defterleri: yalnızca açıkça işaretlenmiş hücreleri dışa aktarır (Kapalı) . Uzantı tarafından çözüldü 11 Writeandexecute magic (Birleştirilmiş) ekleyin .
Çekme İstekleri
- 1621: temizle "Tüm Çıktıları Temizle" (Birleştirilmiş) üzerindeki [] bilgi istemi numaralarında . (Ayrıca bkz. 2519 (Birleştirilmiş) .)
- 1563: clear_output geliştirmeleri (Birleştirilmiş) .
- 3065: dizüstü bilgisayarların farklılıkları (Kapalı) .
- 3291: Kaydederken çıkış hücrelerini atlama seçeneğini ekleyin. (Kapalı) . Bu son derece alakalı görünüyor, ancak bir "temiz / bulaş" filtresi kullanma önerisiyle kapatıldı. İlgili bir soru git diff çalıştırmadan önce çıktıyı çıkarmak isterseniz ne kullanabilirsiniz? cevaplanmamış gibi görünüyor.
- 3312: WIP: Dizüstü bilgisayar kaydetme kancaları (Kapalı) .
- 3747: ipynb -> ipynb trafosu (Kapalı) . Bu 4175 yılında yeniden temel alınmıştır .
- 4175: nbconvert: Jinjaless ihracatçı üssü (Birleştirilmiş) .
- 142: Hiçbir giriş verilmemişse nbstripout'ta STDIN kullanın (Açık) .