Tôi mới làm quen với công cụ tự động và tôi đang làm việc trên một dự án C. Tôi muốn thêm dự án của tôi vào kho lưu trữ git. Những tập tin được tạo ra bởi các autotools tôi cần phải theo dõi trong hệ thống kiểm soát phiên bản của tôi và cần được bỏ qua?Những tệp nào được tạo bởi Autotools nên tôi giữ trong kho lưu trữ kiểm soát phiên bản?
Trả lời
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.
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.
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 –
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.
Đó 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.
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
@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
- 1. Những tệp nào trong dự án Java Netbeans nên được đặt dưới sự kiểm soát phiên bản?
- 2. Tôi có nên giữ tệp MANIFEST mà setup.py tạo dưới sự kiểm soát phiên bản không?
- 3. Tôi nên giữ lại các tệp ReSharper nào và tôi nên bỏ qua những tệp nào trong Kiểm soát nguồn?
- 4. Trong phát triển Android, những tệp nào cần được cam kết với một kho lưu trữ?
- 5. Tôi nên kiểm soát phiên bản C# dự án nào?
- 6. Khi sử dụng kiểm soát nguồn, những tệp nào thực sự nên được cam kết?
- 7. Hệ thống kiểm soát phiên bản hoặc kho lưu trữ mã nguồn mở nào lưu trữ mtime, ctime và atime ban đầu của tệp?
- 8. Bzr: Tạo kho lưu trữ được chia sẻ từ kho lưu trữ độc lập hiện có
- 9. Làm cách nào để tránh lưu trữ mật khẩu trong kiểm soát phiên bản?
- 10. Làm thế nào để phiên bản dữ liệu kiểm soát được lưu trữ trong mysql
- 11. Lịch sử kiểm soát phiên bản được lưu trữ và tính toán như thế nào?
- 12. Theo dõi các tệp Excel trong Kiểm soát Phiên bản
- 13. kiểm soát phiên bản trên các tệp lớn
- 14. Kiểm soát phiên bản mã Apex
- 15. Bạn có nên lưu trữ các thủ tục lưu trữ SQL trong Kiểm soát nguồn không?
- 16. Subversion lưu trữ các tệp trong kho lưu trữ như thế nào?
- 17. Làm cách nào để tích hợp kho lưu trữ bitbucket với phiên bản FogBugz được lưu trữ theo yêu cầu?
- 18. Các tệp .class có được đặt dưới sự kiểm soát phiên bản không?
- 19. Tệp Xspace 4 không gian làm việc có được kiểm soát phiên bản không?
- 20. Tôi có nên đăng ký các tệp dự án IDE vào hệ thống kiểm soát phiên bản không?
- 21. Tôi có nên lưu trữ cục bộ CSS được tạo bởi API Google Web Fonts không?
- 22. Cách tìm phiên bản kho lưu trữ Subversion?
- 23. Kiểm soát phiên bản nhanh?
- 24. Kiểm soát nguồn: số phiên bản nào nên được sử dụng cho các chi nhánh?
- 25. Kiểm soát phiên bản "trong đám mây"
- 26. Làm cách nào để chuyển đổi các dự án được kiểm soát nguồn không đơn giản thành một kho lưu trữ git được phiên bản?
- 27. Ghi đè kho lưu trữ git từ xa với kho lưu trữ của tôi
- 28. Làm cách nào để Subversion chỉ giữ phiên bản mới nhất của một tệp?
- 29. Mã cũ/cũ/không sử dụng có nên bị xóa khỏi kho kiểm soát nguồn không?
- 30. thực hành tốt nhất trong việc lưu trữ các tệp không phải nguồn dưới sự kiểm soát phiên bản
Tôi đồng ý. +1 (và đặt câu trả lời của tôi là Community Wiki) – VonC
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
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. –