2010-07-20 24 views

Trả lời

59

Bạn không nên giữ bất kỳ tệp nào trong điều khiển phiên bản không được chỉnh sửa bằng tay. Điều đó có nghĩa là bất kỳ tệp được tạo nào đều phải được bỏ qua bởi hệ thống kiểm soát phiên bản. Tôi về cơ bản đưa chỉ sau dưới sự kiểm soát phiên bản:

  • configure.ac
  • Makefile.am
  • tài liệu file như AUTHORS, NEWS, vv
  • Makefile.am trong thư mục con

Để giải quyết điểm có phiên bản "sẵn sàng để cài đặt" do Sch arron, một số người bao gồm một tập lệnh trong thư mục gốc của dự án, được gọi là bootstrap hoặc autogen.sh, bạn chạy một lần khi bạn kiểm tra một bản sao mới. Bạn có thể xem ví dụ tại một trong các dự án của tôi here.Đối với một dự án đơn giản hơn, autogen.sh của bạn thực sự chỉ cần bao gồm một dòng:

autoreconf --install || exit 1 

mặc dù một số người thích để chạy ./configure tự động vào cuối autogen.sh.

Tại sao không theo dõi tất cả các tệp được tạo trong kiểm soát phiên bản? Bởi vì nội dung của chúng phụ thuộc vào máy bạn đang xây dựng, phiên bản của các autotools bạn tạo ra chúng, và giai đoạn của mặt trăng. Bất cứ khi nào có bất kỳ thay đổi nào trong số này, các tệp autotools được tạo sẽ thay đổi và bạn sẽ nhận được nhiều rác trong các cam kết của mình.

Ngoài ra, bất kỳ ai kiểm tra mã của bạn không được kiểm soát phiên bản để xây dựng nó phải được cài đặt các công cụ phát triển phù hợp, vì vậy bạn không cần phải lo lắng về những người gặp rắc rối vì thiếu tự động.

gì VonC nói về các dự án C đến với một tập tin configure để tạo ra Makefile s là đúng đối với đang phân phối nguồn (các .tar.gz tập tin mà bạn nhận được khi bạn gõ make dist) nhưng không nhất thiết phải cho tươi kiểm tra ra bản sao từ bản điều khiển.

+0

Tôi đồng ý. +1 (và đặt câu trả lời của tôi là Community Wiki) – VonC

+1

Nếu bạn thêm bất kỳ macro tùy chỉnh nào trong thư mục m4, thì cũng phải thêm vào đó. – ext

+0

Cảm ơn câu trả lời và các mẹo :) Mặc dù tôi muốn dự án của mình ở định dạng có thể cài đặt trực tiếp nhưng tôi tin rằng tạo một tập lệnh như autogen.sh là một lựa chọn tốt hơn. –

-2

Nói chung, bạn không nên giữ bất kỳ tệp được tạo nào trên kho lưu trữ (nếu không bạn sẽ thấy các thay đổi và phải cam kết/hoàn nguyên chúng). Tuy nhiên, nếu bạn muốn có phiên bản "sẵn sàng để cài đặt" được thêm (= được gắn thẻ) vào kho lưu trữ của bạn, tôi sẽ recommand để giữ cấu hình và các tệp Makefile. Họ là một trong những cần thiết cho một cài đặt, mà nên làm việc mà không có autotools.

+9

Bạn hoàn toàn không thể đặt Makefile trong kho lưu trữ. Có một số cuộc tranh luận về việc có hay không bao gồm Makefile.in trong repo (không nên, vì các phiên bản 'sẵn sàng xây dựng' chỉ cần tồn tại dưới dạng tarballs) nhưng hoàn toàn sai khi đặt Makefiles trong repo. Toàn bộ điểm của kịch bản cấu hình là xây dựng Makefile's (et al) cụ thể cho một máy cụ thể, và Makefile có trách nhiệm khác nhau tùy thuộc vào nền tảng. Không có gì được tạo bởi cấu hình có thể nằm trong repo –

11

Lưu ý: Tôi đồng ý với ptomato 'ss answer và để câu trả lời này là Community Wiki.
Điều này có ý nghĩa đối với việc phân phối mã nguồn, nhưng dự án của bạn có thể không phải là một.
Vì mục đích phát triển, câu trả lời của ptomato có ý nghĩa hơn.


Tất cả các dự án C thường đi kèm với tệp cấu hình có thể tạo Makefile thực tế được sử dụng để biên dịch.

Vì vậy, khi bạn xem xét chuỗi autotool, tôi khuyên bạn nên phiên bản tất cả các tệp được tạo thành tệp cấu hình, vì chúng thường là hoạt động tạo một lần.

http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Autoconf.svg/309px-Autoconf.svg.png

Đó có nghĩa là bất cứ ai với một kiểm tra ra bản sao của dự án phiên bản của bạn ngay lập tức có thể bắt đầu:

./configure 
make 
make install 

Vì vậy, trong khi nó nói chung là đúng bạn không nên phiên bản bất kỳ tập tin được tạo ra, bạn có thể lưu trữ những người đó đặc biệt nếu người đọc khác từ dự án đó có thể:

  • không được tạo lại các tệp đó (cho kết quả giống hệt nhau)
  • bắt đầu ngay lập tức để định cấu hình và biên dịch.
+3

Tôi nghĩ bạn đang nhầm lẫn về phân phối mã nguồn là gì - mỗi dự án có một, nhưng nó không giống như những gì được giữ trong điều khiển phiên bản. Phân phối mã nguồn phải bao gồm các tệp mà _users_ cần xây dựng dự án; kiểm soát phiên bản phải chứa các tệp mà _developers_ cần xây dựng dự án. – ptomato

+1

@ptomato: một lần nữa, tôi đồng ý. Vấn đề là, tôi tiếp tục biên dịch lại dự án phân phối mã nguồn những ngày này (nhưng tôi không phát triển chúng). Do đó tầm nhìn "sai lệch" của tôi về những gì có thể có trong VCS. – VonC

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