2012-04-03 28 views
7

Thường được coi là thực hành tốt để thêm một số dòng với thông tin tác giả, phiên bản và giấy phép vào đầu tệp nguồn. Ví dụ, Gnu GPL v3 gợi ý thêmTự động quản lý tiêu đề giấy phép/tác giả/phiên bản trong các tệp nguồn

<one line to give the program's name and a brief idea of what it does.> 
Copyright (C) <year> <name of author> 

This program is free software: you can redistribute it and/or modify 
it under the terms [SNIP] 

tôi thấy nó tẻ nhạt để thêm nó bằng tay đến từng file và phải cập nhật tất cả tất cả bây giờ và sau đó khi một số này thay đổi thông tin (tác giả mới, bản quyền năm, phiên bản va chạm).

Có cách nào để quản lý điều này tự động không, để tôi chỉ phải chỉnh sửa nội dung này ở một nơi và được sao chép tự động xung quanh?

Nếu cần, bạn có thể giả định rằng tôi đang sử dụng bất kỳ hệ thống kiểm soát sửa đổi hiện đại nào.

+0

Vui lòng làm rõ, VCS nào và theo hệ điều hành nào bạn muốn sử dụng. Ngoài ra - bạn có (có kế hoạch sử dụng) bất kỳ CI | Triển khai công cụ nào không? –

+0

Lưu ý phụ - năm bảo hộ bản quyền không phải là năm, đó là phạm vi (* năng động *) trong biểu mẫu bắt đầu (theo đề xuất của FSF và logic đơn thuần) –

+0

@LazyBadger: Tôi chủ yếu sử dụng Linux + git, nhưng tôi tôi cũng tò mò về các giải pháp cho các hệ thống khác. Và chúng ta hãy nói không có CI/Deploy, nhưng tôi không thấy điều này có thể liên quan như thế nào, vì chúng chỉ hoạt động ở giai đoạn sau (tôi muốn các dòng bản quyền có trong VCS, * trước * tôi triển khai). Về năm bản quyền, bất kể định dạng này là 2007-2011 hay 2011, tôi vẫn phải cập nhật nó hàng năm, đúng không? –

Trả lời

4

Thường được coi là thực hành tốt để thêm một số dòng với thông tin tác giả, phiên bản và giấy phép vào đầu tệp nguồn.

Điều đó tùy thuộc. Trước hết có hai (và nhiều hơn nữa) cách để làm điều này:

  • quản lý thông tin cấp phép cho mỗi tập tin
  • quản lý thông tin cấp phép trong một vị trí trung tâm.

Nếu bạn bắt đầu dự án từ đầu, phương pháp mỗi tệp thường dễ thực hiện trong khi vẫn giữ mọi thứ rõ ràng. Khi bạn viết, với thời gian nó ngày càng trở nên khó khăn hơn để theo dõi mọi thứ. Vì vậy, ngày càng có nhiều dự án chuyển sang biến thể vị trí trung tâm.

Phương pháp từng tệp có lợi ích là phạm vi công việc rõ ràng. Thường thì bạn viết tên của ứng dụng trong tập tin-bình luận. Nếu một tập tin được lấy ra vì một lý do nào đó, thông tin vẫn còn trong đó và chuỗi tài liệu không bị hỏng.

Với phương pháp vị trí trung tâm, lợi ích là, điều này thường được phần mềm điều khiển phiên bản của bạn hỗ trợ, ví dụ GIT. Các cam kết có thể được ký bởi người đến và tác giả có thể được trao. Đó là tài liệu người đã viết mã tự động và thông tin đó được lưu trữ ở một vị trí trung tâm: VCS.

Giữ tệp COPYING với gói của bạn, nơi bạn cung cấp thông tin chính ở giữa. Bạn có thể dễ dàng tạo danh sách tác giả qua VCS. Và cho mỗi tập tin bạn có thể tạo một tiêu đề, mà chỉ quy định cụ thể mà phần mềm và nơi để xem xét, chỉ là một phác thảo trần:

/** 
* Flux Deluxe v3.2.0 - Vector Drawing Redefined 
* 
* Copyright 2010, 2012 by it's authors. 
* Some rights reserved. See COPYING, AUTHORS. 
*/ 

Nếu bạn phát hành một phiên bản mới trong một năm mới đó là không có trí tuệ để cập nhật tất cả các tệp.

+1

Câu hỏi của tôi chính xác là cách bạn quản lý "không có trí tuệ" này khi cập nhật tất cả các tệp, mà không cần, tất nhiên, thực hiện nó bằng tay. Có bất kỳ công cụ xung quanh cho điều đó? Bạn có viết regexp của riêng bạn cho mọi thay đổi phiên bản và hy vọng nó không khớp quá nhiều không? Bạn có chỉnh sửa từng tệp bằng tay không? –

+0

Để thay thế văn bản trong (nhiều) tệp bạn có thể sử dụng ['sed'] (http://www.grymoire.com/Unix/Sed.html). Ngoài ra tùy thuộc vào IDE bạn sử dụng ở đó cũng có tìm kiếm và thay thế trong các tệp khá thường xuyên. Đó là những gì tôi có nghĩa là "không có trí tuệ": Multi-File-Search-And-Replace. Nếu các tiêu đề vẫn giữ nguyên (ít nhất là phần chính của nó), nó chỉ là tìm kiếm và thay thế thẳng về phía trước. – hakre

+0

Ok, cảm ơn. Tôi không hài lòng với giải pháp này vì luôn có rủi ro mà nó khớp quá nhiều (thay thế tất cả "Flux Deluxe v.3.2.0" với v.3.2.1? Tệp CHANGELOG của bạn và các thông báo lỗi tương thích của bạn có thể có thứ gì đó chống lại điều đó. ..), vì vậy tôi hỏi nếu có bất kỳ công cụ đặc biệt được viết cho rằng xung quanh. Tôi sẽ chấp nhận "không, tất cả chúng ta đều cuộn regexp của riêng mình" như một câu trả lời. :) –

0

Nếu làm việc với Visual Studio, bạn có thể sử dụng macro và đính kèm lối tắt cho nó. Sau đó, khi tạo một tệp mới, hãy sử dụng lối tắt để thêm tiêu đề. Nếu bạn muốn đảm bảo rằng tiêu đề đã được bao gồm trong mỗi tệp, bạn có thể sử dụng StyleCop.

liên kết sau có thể hữu ích:
http://abhijitjana.net/2010/12/05/add-document-header-for-files-automatically-in-visual-studio/
http://stylecop.codeplex.com/

Trong Eclipse, đó cũng là hỗ trợ vĩ mô, do đó bạn sẽ có thể làm tương tự như đề xuất cho VS. Tuy nhiên, tôi không có bất kỳ kinh nghiệm với điều đó.

Đối với Java, có một thay thế cho StyleCop:
http://stylecop.codeplex.com/

tôi đã không nghe nói về bất kỳ SVN-công cụ điều chỉnh các tập tin riêng của mình. Sử dụng macro trong trình chỉnh sửa của bạn là điều gần nhất với những gì bạn muốn.

+0

Macro hoạt động để tạo tiêu đề lần đầu tiên (cũng như sao chép và dán), nhưng không phải để cập nhật tiêu đề, trừ khi tôi thiếu thứ gì đó. Và họ vẫn yêu cầu số lượng công việc có quy mô như O (n) với số lượng tệp thay vì O (1). –

3
+0

Cảm ơn câu trả lời. Nó có vẻ là một giải pháp tốt cho người dùng Visual Studio. –

Các vấn đề liên quan