Tài liệu được tạo nên được lưu trữ trong kho Git?


49

Khi bạn sử dụng các công cụ như jsdocs , nó sẽ tạo các tệp HTML tĩnh và các kiểu của nó trong cơ sở mã của bạn dựa trên các nhận xét trong mã của bạn.

Những tệp này nên được kiểm tra vào kho Git hay chúng nên được bỏ qua với .gitignore?


3
Có thể có một đối số để lưu trữ chúng trong kho GitHub khi bạn có thể xuất bản HTML tĩnh bằng các trang . Mặc dù sau đó, một loạt các lập luận hoàn toàn riêng biệt nảy sinh về cách bạn đảm bảo chúng được cập nhật, v.v ...
Boris the Spider

21
Nếu các tệp được tạo, thì theo định nghĩa, chúng không phải là nguồn .
chrylis -on đình công-

3
Bạn xuất bản những gì bạn muốn xuất bản. Đặc biệt là trên GitHub. Nếu bạn muốn mọi người nhìn thấy một tệp PDF hoặc hình ảnh được tạo, bạn nên đưa nó vào thay vì mong đợi mọi người cài đặt LaTeX và tự biên dịch nó. Ví dụ: kho lưu trữ này sẽ không tốt nếu nó không bao gồm các hình ảnh được sản xuất, chỉ có các tệp dự án ...
Džuris


7
Là người tiêu dùng của các thư viện bên thứ ba, trong số 10 lần tôi thấy một thư viện không có tài liệu trực tuyến (dù là trong thư mục con của kho lưu trữ, hoặc được liên kết từ readme), tôi sẽ nhấp và bỏ qua các thư viện đó, tất cả 10 lần . Tôi sẽ không làm phiền với Doxygen trong nửa giờ chỉ để xem liệu một thư viện có đáp ứng nhu cầu của tôi không.
Alexander

Câu trả lời:


131

Không có bất kỳ nhu cầu cụ thể nào, bất kỳ tệp nào có thể được xây dựng, tái tạo, xây dựng hoặc tạo từ các công cụ xây dựng bằng các tệp khác được kiểm tra trong kiểm soát phiên bản không nên được kiểm tra. Khi cần tệp, nó có thể được xây dựng lại từ tệp kia nguồn (và thông thường sẽ là một số khía cạnh của quá trình xây dựng).

Vì vậy, những tập tin nên được bỏ qua với .gitignore.


4
Nhưng điều này có thể phụ thuộc vào các phiên bản của công cụ xây dựng hoặc thậm chí là sự sẵn có của các công cụ xây dựng (ví dụ: để tạo một số tệp, một số phiên bản cũ của công cụ xây dựng là bắt buộc). Làm thế nào để bạn xử lý đó? Bạn có thể giải quyết nó trong câu trả lời của bạn?
Peter Mortensen

27
@PeterMortensen Nếu bạn cần một tạo tác được xây dựng với một phiên bản đặc biệt của các công cụ buld, bạn xây dựng nó với phiên bản của các công cụ xây dựng mà bạn cần. Nhu cầu như vậy là một) tự mình khám phá, trong trường hợp đó bạn phải tự mình thực hiện; b) được ghi lại trong README ("Bạn sẽ cần hai phiên bản doxygen được cài đặt ..."); c) xử lý các tập lệnh xây dựng (họ kiểm tra các phiên bản công cụ xây dựng có sẵn và hành động phù hợp). Trong mọi trường hợp, kiểm soát nguồn là dành cho nguồn, không phải để tạo các tạo phẩm.
Joker_vD

2
Tôi nghĩ rằng câu trả lời này chỉ khả thi nếu một máy chủ triển khai liên tục xây dựng và xuất bản tài liệu theo cách dễ dàng truy cập. Mặt khác, có một giá trị lớn trong việc "lưu trữ" các tài liệu trong repo, để cải thiện khả năng truy cập. Không người dùng nào phải làm quen với các tập lệnh xây dựng của bạn chỉ để xem tài liệu của phần mềm của bạn.
Alexander

4
@Alexander Bạn cũng sẽ đặt nhị phân được xây dựng vào repo chứ? Các tài liệu được xây dựng. Bạn lấy tài liệu được xây dựng và làm cho nó có thể truy cập ở đâu đó.
1201 Chương trình Chương trình

5
@ 1201ProgramAlarm "Bạn cũng sẽ đặt nhị phân được xây dựng vào repo chứ?" Không, bởi vì một nhị phân được xây dựng có giá trị trước thấp đối với những người duyệt quanh GitHub, so với tài liệu. "Bạn lấy tài liệu được xây dựng và làm cho nó có thể truy cập được ở đâu đó." Miễn là nó được lưu trữ công khai, được liên kết rõ ràng, thì đó là điều tuyệt vời. Đây có lẽ là trường hợp tốt nhất.
Alexander

23

Quy tắc của tôi là khi tôi sao chép một kho lưu trữ và nhấn nút xây dựng trên mạng, sau đó, sau một thời gian, mọi thứ sẽ được xây dựng. Để đạt được điều này cho tài liệu được tạo của bạn, bạn có hai lựa chọn: ai đó chịu trách nhiệm tạo các tài liệu này và đưa chúng vào git hoặc bạn ghi lại chính xác phần mềm nào tôi cần trên máy phát triển của mình và bạn chắc chắn rằng nhấn nút xây dựng nút xây dựng tất cả các tài liệu trên máy của tôi.

Trong trường hợp tài liệu được tạo, trong đó bất kỳ thay đổi nào tôi thực hiện đối với tệp tiêu đề sẽ thay đổi tài liệu, thực hiện việc này trên mỗi máy của nhà phát triển sẽ tốt hơn, vì tôi luôn muốn tài liệu chính xác, không chỉ khi ai đó đã cập nhật. Có những tình huống khác trong đó việc tạo ra một cái gì đó có thể tốn thời gian, phức tạp, yêu cầu phần mềm mà bạn chỉ có một giấy phép, v.v. Trong trường hợp đó, giao cho một người trách nhiệm đưa mọi thứ vào git là tốt hơn.

@Curt Simpson: Có tất cả các yêu cầu phần mềm được ghi lại là tốt hơn nhiều so với tôi đã thấy ở nhiều nơi.


7
Không ghi lại phần mềm mà ai đó cần để xây dựng (hoặc ít nhất là không chỉ tài liệu): tạo tập lệnh xây dựng cho người dùng biết anh ta thiếu gì hoặc thậm chí tự cài đặt phần mềm nếu điều đó hợp lý. Trong hầu hết các repos của tôi, bất kỳ nhà phát triển có khả năng nửa vời nào cũng có thể chạy ./Testvà nhận bản dựng hoặc nhận thông tin tốt về những gì anh ta cần làm để có bản dựng.
Curt J. Sampson

5
Tôi không thực sự đồng ý rằng việc đưa tài liệu được tạo vào git có thể tốt trong trường hợp bạn chỉ định. Đó là lý do chúng tôi có các hiện vật và tài liệu lưu trữ.
Sulthan

Đó là quy tắc của bạn và nó là một quy tắc tốt và tôi thích nó. Nhưng những người khác có thể làm cho các quy tắc riêng của họ.
emory

Tôi nghĩ bạn có nghĩa là "chạy lệnh xây dựng", vì sẽ không có nút xây dựng trên máy của bạn. ... Trừ khi bạn mong đợi toàn bộ bản dựng sẽ được tích hợp với IDE, điều này hoàn toàn không hợp lý.
jpmc26

@ jpmc26 Tôi thấy hoàn toàn hợp lý khi tích hợp toàn bộ bản dựng trong IDE. Nút xây dựng trên máy của tôi là Command-B.
gnasher729

14

Những tệp này không nên được kiểm tra vì dữ liệu để tạo chúng đã có sẵn. Bạn không muốn lưu trữ dữ liệu hai lần (DRY).

Nếu bạn có một hệ thống CI, có lẽ bạn có thể tạo bản dựng tài liệu đó và lưu trữ chúng cho bản dựng / xuất bản đó lên máy chủ web.


4

Một lợi thế của việc có chúng trong một số kho lưu trữ (giống nhau hoặc khác nhau, tốt nhất là được tạo tự động) là sau đó bạn có thể thấy tất cả các thay đổi đối với tài liệu. Đôi khi những khác biệt đó dễ đọc hơn các khác biệt đối với mã nguồn (cụ thể nếu bạn chỉ quan tâm đến các thay đổi đặc điểm kỹ thuật, không thực hiện một).

Nhưng trong hầu hết các trường hợp, việc kiểm soát nguồn là không cần thiết, như các câu trả lời khác đã giải thích.


1
Điều đó sẽ đòi hỏi khá nhiều hook hook trước trong mỗi và mỗi repo được sử dụng để tạo các xác nhận. Bởi vì nếu quy trình tạo tài liệu không hoàn toàn tự động, bạn sẽ nhận được các cam kết có tài liệu không đồng bộ với mã. Và những cam kết bị hỏng sẽ làm tổn thương sự hiểu biết nhiều hơn tài liệu không được cam kết.
cmaster

1
Điều này không phải ở giai đoạn cam kết. Nó có thể dễ dàng là một công việc hạ nguồn / CI / Jenkins để xuất bản chúng mỗi khi chúng được coi là xứng đáng để lưu trữ. Điều này cũng có thể là mỗi cam kết, nhưng quyết định nên được tách ra trong trường hợp không có lý do chính đáng. Hoặc ít nhất đó là cách tôi nhìn thấy nó.
Ai đó

3

Làm ngơ. Bạn sẽ muốn người dùng của repo có thể xây dựng lại chúng bằng mọi cách và điều này sẽ loại bỏ sự phức tạp của việc đảm bảo tài liệu luôn đồng bộ. Không có lý do gì để không có các cổ vật được xây dựng được đóng gói ở một nơi nếu bạn muốn có mọi thứ ở một nơi và không phải xây dựng bất cứ thứ gì. Tuy nhiên, repos nguồn không thực sự là một nơi tốt để làm điều này mặc dù sự phức tạp ở đó làm tổn thương nhiều hơn hầu hết các nơi.


2

Nó phụ thuộc vào quá trình triển khai của bạn. Nhưng cam kết các tệp được tạo vào một kho lưu trữ là một ngoại lệ và nên tránh, nếu có thể. Nếu bạn có thể trả lời cả hai câu hỏi sau bằng , kiểm tra tài liệu của bạn có thể là một tùy chọn hợp lệ:

  • Các tài liệu là một yêu cầu cho sản xuất?
  • Hệ thống triển khai của bạn có thiếu các công cụ cần thiết để xây dựng tài liệu không?

Nếu những điều kiện này là đúng, có lẽ bạn đang triển khai với một hệ thống cũ hoặc một hệ thống có các ràng buộc bảo mật đặc biệt. Thay vào đó, bạn có thể cam kết các tệp được tạo thành một nhánh phát hành và giữ cho nhánh chính sạch sẽ.


1
Cam kết các tệp được tạo vào một nhánh phát hành không hoạt động trong mọi tình huống, nhưng có một số, đặc biệt là với những thứ như các trang web tĩnh được xây dựng từ markdown, trong đó đây là một giải pháp tuyệt vời. Tôi làm điều đó thường xuyên đủ để tôi xây dựng một công cụ đặc biệt để dễ dàng tạo ra các cam kết như là một phần của quá trình xây dựng.
Curt J. Sampson

2

Nó phụ thuộc. Nếu những tài liệu đó:

  • Cần phải là một phần của kho lưu trữ, như readme.md, sau đó, nên giữ chúng trong repo git. Bởi vì có thể khó để xử lý các tình huống đó một cách tự động.

  • Nếu bạn không có cách tự động để xây dựng và cập nhật chúng, như hệ thống CI, và nó được dự kiến ​​sẽ được nhìn thấy cho khán giả nói chung, thì nên giữ chúng trong repo git.

  • Mất rất nhiều thời gian để xây dựng chúng, sau đó chính đáng để giữ chúng.

  • Được dự kiến ​​để xem đối tượng chung (như hướng dẫn sử dụng) và phải mất một thời gian đáng kể để xây dựng, trong khi các tài liệu trước đó của bạn không thể truy cập được (ngoại tuyến), sau đó có thể giữ chúng trong repit git.

  • Được dự kiến ​​để xem cho khán giả nói chung và phải hiển thị lịch sử thay đổi / tiến hóa của nó, có thể dễ dàng hơn để giữ các phiên bản tài liệu trước được cam kết và xây dựng / cam kết cái mới được liên kết với trước đó. Chính đáng.

  • Có một lý do được chấp nhận cụ thể cho tất cả các nhóm được cam kết, sau đó là chính đáng để giữ họ trong repo git. (Chúng tôi không biết bối cảnh của bạn, bạn và nhóm của bạn làm)

Trong bất kỳ kịch bản khác, nó nên được bỏ qua một cách an toàn.

Tuy nhiên, nếu việc giữ chúng trong git repo là điều chính đáng, có thể là dấu hiệu của một vấn đề lớn hơn mà nhóm của bạn đang phải đối mặt. (Không có hệ thống CI hoặc các vấn đề hiệu suất khủng khiếp tương tự, phải đối mặt với thời gian chết trong khi xây dựng, v.v.)


1

Theo nguyên tắc kiểm soát phiên bản, chỉ nên lưu trữ "đối tượng chính" trong kho lưu trữ, không phải "đối tượng dẫn xuất".

Có các trường hợp ngoại lệ cho quy tắc: cụ thể là khi có người tiêu dùng của kho lưu trữ yêu cầu các đối tượng dẫn xuất và dự kiến ​​hợp lý sẽ không có các công cụ cần thiết để tạo ra chúng. Các cân nhắc khác cân nhắc, như là số lượng vật liệu khó sử dụng? (Sẽ tốt hơn nếu dự án chỉ cần tất cả người dùng có công cụ?)

Một ví dụ cực đoan về điều này là một dự án thực hiện một ngôn ngữ lập trình hiếm có trình biên dịch được viết bằng chính ngôn ngữ đó (các ví dụ nổi tiếng bao gồm Ocaml hoặc Haskell). Nếu chỉ có mã nguồn trình biên dịch nằm trong kho lưu trữ, không ai có thể xây dựng nó; họ không có phiên bản biên dịch của trình biên dịch mà họ có thể chạy trên máy ảo, để họ có thể biên dịch mã nguồn của trình biên dịch đó. Hơn nữa, các tính năng mới nhất của ngôn ngữ ngay lập tức được sử dụng trong chính nguồn của trình biên dịch, do đó, gần với phiên bản mới nhất của trình biên dịch luôn được yêu cầu để xây dựng nó: một trình biên dịch cũ có thể thực hiện được một cách riêng biệt sẽ không biên dịch mã hiện tại vì mã sử dụng các tính năng ngôn ngữ không tồn tại một tháng trước. Trong tình huống này, phiên bản biên dịch của trình biên dịch gần như chắc chắn phải được kiểm tra vào kho lưu trữ và được cập nhật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.