Üretilen belgeler Git deposunda saklanmalı mı?


49

Jsdocs gibi araçlar kullandığınızda , kodunuzdaki yorumlara dayanarak statik HTML dosyaları ve kod üssünüzdeki stillerini oluşturur.

Bu dosyalar Git deposunda mı kontrol edilmeli yoksa .gitignore ile mi göz ardı edilmeli?


3
Sayfaları kullanarak statik HTML'yi yayınlayabileceğiniz için bunları GitHub deposunda saklamak için bir argüman olabilir . Her ne kadar o zaman tamamen ayrı bir argümanlar dizisi, güncel olduklarından nasıl emin olduklarınızla ortaya çıkıyor ...
Örümcek Boris,

21
Eğer dosyalar oluşturulursa, tanım gereği kaynak değildir .
chrylis

3
Ne yayınlamak istediğinizi yayınladınız. Özellikle GitHub'da. Herkesin oluşturulmuş bir PDF veya resim görmesini istiyorsanız, herkesin LaTeX'i yüklemesini ve bunları derlemesini beklemek yerine eklemelisiniz. Örneğin , üretilen görüntüleri içermeyen, yalnızca proje dosyalarını içermeyen bu depo çok iyi olmaz ...
Džuris

5
Oldukça açık bir şekilde yinelenen kopya üretilen döküman versiyon kontrol geçmişine mi girmeli?
tatarcık

7
Üçüncü taraf kütüphanelerin bir tüketicisi olarak, çevrimiçi belgelerinin olmadığı bir kütüphaneyi gördüğüm 10 kişiden (havuzun bir alt klasöründe veya benioku ile bağlantılı olsun) 10 kez tıklayıp atlayacağım. . Bir kütüphanenin ihtiyaçlarımı karşılayıp karşılamadığını görmek için Doxygen ile yarım saat uğraşmayacağım.
Alexander,

Yanıtlar:


131

Herhangi bir özel gereksinim duyulmadığında, sürüm kontrolünde kontrol edilen diğer dosyaları kullanarak derleme araçlarından oluşturulabilen, yeniden oluşturulabilen, oluşturulabilen veya oluşturulabilen herhangi bir dosya kontrol edilmemelidir. Dosya gerektiğinde diğerinden oluşturulabilir kaynaklar (ve normalde inşa sürecinin bir yönü olabilir).

Bu yüzden bu dosyalar .gitignore ile göz ardı edilmelidir.


4
Ancak bu, derleme araçlarının sürümlerine ve hatta derleme araçlarının kullanılabilirliğine bağlı olabilir (örneğin, bazı dosyalar oluşturmak için bir yapı aracının eski bir sürümü gerekir). Bununla nasıl başa çıkarsın? Cevabında cevap verebilir misin?
Peter Mortensen

27
@PeterMortensen Özel buld araçları sürümüyle oluşturulmuş bir yapıya ihtiyacınız varsa, ihtiyacınız olan oluşturma araçlarının sürümüyle oluşturursunuz. Böyle bir ihtiyaç ya: a) Kendiniz keşfet, bu durumda kendi başınasın; b) README belgesinde belgelenmiş ("İki taneye sahip olmanız gereken iki ayrı doxygen sürümü yüklü ..."); c) derleme komut dosyaları tarafından ele alındı ​​(mevcut derleme araçları sürümlerini kontrol ediyorlar ve uygun davranıyorlar). Her durumda, kaynak kontrolü, yapı eserleri için değil kaynaklar içindir.
Joker_vD

2
Bu cevabın ancak sürekli bir dağıtım sunucusu dokümanları kolayca erişilebilir bir şekilde oluşturup yayınladığında uygulanabilir olduğunu düşünüyorum. Aksi takdirde, erişilebilirliği artırmak için depodaki dokümanlar "önbelleğe alma" konusunda büyük bir değer vardır. Hiçbir kullanıcının yalnızca yazılımınızın belgelerini görmek için derleme komut dosyalarınızla uğraşması gerekmez.
Alexander,

4
@Alexander Ayrıca yerleşik ikiliyi de depoya koyar mısın? Belgeler inşa edilmiştir. Yerleşik belgeleri alır ve bir yerden erişilebilir duruma getirirsiniz.
1201ProgramAlarm

5
@ 1201ProgramAlarm "Yerleşik ikiliyi de depoya koyar mısın?" Hayır, çünkü yerleşik bir ikili belgelere kıyasla GitHub'da dolaşan insanlar için düşük ön-değere sahiptir. "Yerleşik belgeleri alır ve bir yerden erişilebilir duruma getirirsiniz." Halka açık bir şekilde barındırıldığı, gözle görülür bir şekilde bağlantılı olduğu sürece, o zaman bu harika. Muhtemelen en iyi durumdur.
Alexander

23

Benim kuralım, bir havuzu klonladığımda ve “yap” düğmesine bastığımda, bir süre sonra, her şeyin oluşturulmuş olmasıdır. Üretilen belgeleriniz için bunu başarmak için iki seçeneğiniz vardır: ya birileri bu dokümanları oluşturmaktan ve gitmesine koymaktan sorumludur ya da geliştirme makinemde tam olarak hangi yazılımı kullanmam gerektiğini belgeliyorsunuz ve “yapıya basmak” gerektiğinden emin oluyorsunuz düğmesi makinemdeki tüm belgeleri oluşturur.

Üretilen belgeler durumunda, bir başlık dosyasında yaptığım herhangi bir değişikliğin belgeleri değiştirmesi gerektiği durumlarda, bunu her geliştiricinin makinesinde yapmak daha iyidir, çünkü yalnızca biri güncellendiğinde değil, her zaman doğru belgeler istiyorum. Bir şey üretmenin zaman alıcı, karmaşık olabileceği, yalnızca bir lisansa sahip olduğunuz yazılımı gerektiren vb. Başka durumlar da olabilir. Bu durumda, bir kişiye işleri yerine koyma sorumluluğunu vermek daha iyidir.

@Curt Simpson: Tüm yazılım gereksinimlerinin belgelendirilmesi , birçok yerde gördüğümden çok daha iyi.


7
Birisinin yapı için ihtiyacı olan yazılımı belgelemeyin (ya da en azından sadece belgelendirmeyin): derleme betiğinin kullanıcıya ne kaçırdığını söylemesini sağlayın veya makul olması durumunda bile onu kurun. Depolarımın çoğunda, herhangi bir yarı yolda yetkin geliştirici, yalnızca ./Testbir derleme çalıştırabilir ve bir yapı elde edebilir veya bir yapı elde etmek için ne yapması gerektiği hakkında iyi bilgiler alabilir.
Curt J. Sampson

5
Oluşturulan belgeleri git'e eklemenin gerçekten belirttiğinizde iyi olacağı konusunda hemfikir değilim. Bu yüzden elimizde eserler ve arşivler var.
Sulthan

Bu senin kuralın ve iyi bir kural ve ben de onu seviyorum. Ancak diğerleri kendi kurallarını koyabilirler.
emory

Sanırım, makinede bir derleme düğmesi olmayacağından "bir derleme komutu çalıştır" demek istiyorsun. ... Tüm yapının tamamen mantıksız olan bir IDE ile entegre olmasını beklemiyorsanız.
jpmc26

@ jpmc26 Bütün yapının bir IDE'ye entegre olmasını tamamen makul buluyorum. Makinemdeki yap butonu Komut-B.
gnasher729

14

Bu dosyalar, onları üretecek veriler zaten mevcut olduğu için teslim edilmemelidir. Verileri iki kez (DRY) saklamak istemezsiniz.

Bir CI sisteminiz varsa, dokümanları oluşturup bunları bir web sunucusunda yayınlamak / yayınlamak için saklayabilirsiniz.


4

Bunları bazı havuzlarda bulundurmanın bir avantajı (aynı veya farklı, tercihen otomatik olarak oluşturulan), o zaman dokümantasyondaki tüm değişiklikleri görebilmenizdir. Bazen bu farkların okunması, kaynak kodundaki farklardan daha kolaydır (özellikle sadece uygulamadaki değişiklikleri değil, spesifikasyon değişikliklerini önemsiyorsanız).

Ancak çoğu durumda bunların kaynak kontrolünde olması, diğer cevaplarda açıklandığı gibi gerekli değildir.


1
Bu, hemen hemen her biri, taahhüt oluşturmak için kullanılan her depoda bir ön işleme kancası gerektirir. Çünkü dokümantasyon oluşturma işlemi tam otomatik değilse, dokümantasyonun kodla senkronize edilmediğini taahhüt etmiş olursunuz. Ve bu kesilen taahhütler taahhüt edilmemiş belgelerden daha fazla anlaşılabilirliğe zarar verecektir.
cmaster

1
Bu işlem aşamasında olmak zorunda değildir. Her zaman depolamaya değer gördüklerinde bunları yayınlamak kolayca bir alt / CI / Jenkins işi olabilir. Bu her bir taahhüt olabilir, ancak kararın iyi bir sebep olmadan çözülmesi gerekir. Ya da en azından benim böyle görüyorum.
ANONE

3

Yok Sayılan. Repo kullanıcılarının onları yine de yeniden yapabilmelerini isteyeceksiniz ve bu, dokümanın her zaman senkronize olduğundan emin olmanın karmaşıklığını ortadan kaldırıyor. Eğer herşeyi tek bir yerde yapmak ve bir şey inşa etmek istemiyorsanız, yapılı yapıların bir yerde toplanmasının bir nedeni yoktur. Ancak kaynak repolar bunu yapmak için gerçekten iyi bir yer değil, ancak karmaşıklık çoğu yerden daha fazla acı veriyor.


2

Dağıtım işleminize bağlı. Ancak oluşturulan dosyaları bir depoya dahil etmek bir istisnadır ve mümkünse kaçınılması gerekir. Aşağıdaki soruların ikisine de Evet ile cevap verebilirseniz , dokümanlarınızı kontrol etmek geçerli bir seçenek olabilir:

  • Dokümanlar üretim için bir gereklilik midir?
  • Dağıtım sisteminiz dokümanları oluşturmak için gerekli araçlardan yok mu?

Bu koşullar doğruysa, muhtemelen eski bir sistemle veya özel güvenlik kısıtlamaları olan bir sistemle konuşlandırıyorsunuzdur. Alternatif olarak, oluşturulan dosyaları bir sürüm şubesine teslim edebilir ve ana şubeyi temiz tutabilirsiniz.


1
Oluşturulan dosyaları bir yayın dalına göndermek her durumda işe yaramaz, ancak özellikle mükemmel bir çözüm olduğu markdown'dan oluşturulan statik web siteleri gibi bir sayı vardır. Derleme sürecinin bir parçası olarak bu tür işleri kolayca oluşturmak için özel bir araç geliştirmem yeterli olur .
Curt J. Sampson

2

Değişir. Eğer bu dokümanlar:

  • Deponun bir parçası olması gerekiyor, aynen olduğu gibi, readme.mdonları git deposunda tutmak tercih ediliyor. Çünkü bu durumları otomatik olarak ele almak zor olabilir.

  • Bunları oluşturmak ve güncellemek için bir CI sistemi gibi otomatik bir yolunuz yoksa ve genel izleyici için görülmesi amaçlanıyorsa, bunları git deposunda tutmak tercih edilir.

  • Onları oluşturmak için çok zaman alır, sonra onları tutmak haklı çıkar.

  • Genel izleyici kitlesi için görülmesi amaçlanmıştır (kullanım kılavuzu gibi) ve önceki belgeleriniz erişilemez duruma geldiğinde (çevrimdışı), daha sonra bunları git deposunda tutmak doğrulanabilir.

  • Genel izleyici için görülmesi amaçlanmıştır ve değişikliklerin / evriminin geçmişini göstermek zorundadır, önceki doküman sürümlerini tutmak ve yenisini önceki ile bağlantılı hale getirmek ve oluşturmak / yapmak daha kolay olabilir. Justifiable.

  • Tüm takımın görevlendirilmesi için özel bir kabul sebebi var, sonra onları git deposunda tutmak haklı. (Bağlamınızı bilmiyoruz, siz ve takımınız biliyor)

Başka bir senaryoda, güvenle göz ardı edilmelidir.

Bununla birlikte, onları git deposunda tutmanın haklı olması durumunda, ekibinizin karşılaştığı daha büyük bir sorunun işareti olabilir. (Bir CI sistemine sahip olmamak ya da benzer, korkunç performans sorunlarına sahip olmak, bina sırasındaki aksaklıklarla karşılaşmak vb.)


1

Sürüm kontrol ilkesi olarak, yalnızca "birincil nesneler", "türetilmiş nesneler" yerine bir depoda depolanmalıdır.

Kural için istisnalar vardır: yani, türetilmiş nesnelere ihtiyaç duyan depo tüketicileri olduğunda ve bunları üretmek için gerekli araçlara sahip olmamaları beklenmemektedir. Tartışılan diğer konular, malzeme tutarsızlığı gibi mi? (Projenin tüm kullanıcıların araçları edinmesi daha iyi olur mu?)

Buna aşırı bir örnek, derleyicisi bu dilde yazılmış nadir bir programlama dili uygulayan bir projedir (iyi bilinen örnekler Ocaml veya Haskell'i içerir).). Yalnızca derleyici kaynak kodu depodaysa, kimse oluşturamaz; Derleyicinin sanal makinede çalıştırabilecekleri derlenmiş bir sürümleri yoktur, böylece derleyicinin kaynak kodunu derleyebilirler. Dahası, dilin en yeni özellikleri derleyici kaynağında derhal kullanılır, böylece derleyicinin en son sürümüne yakın olması her zaman için gereklidir: ayrı ayrı elde edilen bir aylık derleyici geçerli kodu derlemeyecektir çünkü kod Bir ay önce bulunmayan dil özelliklerini kullanır. Bu durumda, derleyicinin derlenmiş sürümü neredeyse kesinlikle depoya kontrol edilmeli ve güncel tutulmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.