2009-05-17 25 views
9

Chúng tôi có một khung ứng dụng web mà chúng tôi muốn sử dụng với Subversion. Chúng tôi đã thử một vài lần trước khi thiết lập, nhưng phần tạo mã của ứng dụng của chúng tôi đang gây ra sự cố.Subversion - xử lý việc tạo mã

Sự cố là mã được tạo từ một nhà phát triển có thể ở tệp mới hơn so với nhà phát triển khác, nhưng nội dung của tệp mới hơn có thể cũ hơn, vì mã và tệp xml là cơ sở cho việc tạo mã đã được cập nhật bởi nhà phát triển nr2. Một giải pháp mà chúng tôi đã xem xét là loại trừ các tệp được tạo mã, nhưng chúng tôi thường nhận các tệp mới được tạo và chúng sẽ tự động được thêm vào kho lưu trữ trừ khi chúng tôi nhớ loại trừ nó và chúng tôi phải kiểm tra theo cách thủ công trong các tệp được tạo mới nhất. Và làm thế nào để bạn biết nếu bạn có tệp được tạo mới nhất?

Bất kỳ đề xuất nào về cách giải quyết vấn đề này trong Subversion?

Trả lời

24

Cách tốt nhất để quyết định xem có nên có gì trong Subversion hay không là hãy nhớ rằng đó là hệ thống điều khiển phiên bản . Nếu bạn không cần nhớ nó thay đổi như thế nào theo thời gian, nó không cần phải ở trong svn. Sử dụng svn:ignore để loại trừ các tệp khỏi việc xem xét đó.

Đó là trường hợp ở đây: bạn không quan tâm cách các tệp được tạo thay đổi theo thời gian, chỉ có mã gốc được sử dụng để tạo chúng. Điều đó có nghĩa là họ nên bị loại trừ khỏi Subversion. Bạn có thể thực hiện điều này bằng một lệnh bắt buộc thực thi trước, ví dụ, tất cả các tệp được tạo mã không bao giờ nên được cam kết. Tôi có một cụm từ yêu thích cho chiến thuật này: "Phiên bản công thức, không phải là bánh."

Và làm thế nào để bạn biết nếu bạn có tệp mới nhất được tạo?

Chính xác; bạn không, bởi vì các tệp được tạo ra phụ thuộc vào nguồn được sử dụng để tạo chúng. Bước tiếp theo của bạn là đảm bảo rằng quá trình xây dựng của bạn tự động tạo các tệp này được cung cấp cho mã nguồn ban đầu, nhưng đó có thể là một câu hỏi StackOverflow riêng biệt nếu bạn không biết cách thực hiện điều đó.

+4

+1. "Phiên bản công thức, không phải là bánh" - rất đẹp! –

4

Bạn nên sử dụng svn:ignore, vì bạn thực sự không muốn tự động tạo nội dung được tạo tự động cho việc lật đổ.

+1

@krosenvold: không chắc chắn tôi đồng ý với điều đó. Nếu bạn muốn khôi phục lại một điểm trong thời gian, không có các tập tin được tạo ra trong SCC làm cho mọi thứ trở nên rất khó khăn. Tôi luôn đặt mã được tạo trong SCC. –

+0

@Mitch, tại sao bạn không thể tạo lại tệp sau khi quay lại? –

+0

Tôi cho rằng nó depnds những gì bạn đang tạo ra chúng .... –

2

Có lẽ tôi đơn giản, nhưng tôi sẽ không lưu trữ các tệp được tạo trong điều khiển phiên bản. Kể từ khi nó được tạo ra nó không làm cho sence để giữ một lịch sử phiên bản của nó.

Với mã và xml để thực hiện việc tạo trong điều khiển phiên bản, bạn luôn có thể tạo mã cho mọi phiên bản.

10

Một giải pháp chúng tôi đã xem xét là để loại trừ các mã được tạo file

Có! Một nghìn lần có! Không bao giờ thực hiện kiểm soát phiên bản các tệp bạn có thể tạo từ các tệp khác. Thay vào đó, hãy thêm các quy tắc tạo vào tệp makefile của bạn (hoặc kịch bản xây dựng khác).

họ sẽ được tự động thêm vào kho

gì được tự động thêm chúng? Theo như tôi có thể nhớ lại, tôi đã luôn luôn phải thêm các tập tin bằng tay. Nếu công cụ tự động thêm là sai, thì có thể sửa chữa công cụ đó là đúng cách để đi?

trừ khi chúng ta nhớ để loại trừ nó

Có bạn công cụ thế hệ thêm một bình luận nói rằng "tập tin autogenerated bởi $ TOOL", và thêm một cái móc lật đổ mà greps các tập tin bình luận đó và từ chối họ. Thực hiện các quy định phù hợp cho các công cụ tạo mã; chẳng hạn như: nếu tệp chứa nhận xét "được tạo tự động", hãy thêm chú thích nếu nó cũng có "từ chối svn ngoại trừ" trong nhận xét trên cùng một dòng.

Và làm thế nào để bạn biết nếu bạn có tệp được tạo mới nhất?

Bằng cách tạo công thức mới nhất, có trong cam kết lật đổ mới nhất.

+0

+1. Sử dụng grep để tự động kiểm tra cho autogenerated-ness là một ý tưởng tốt. –

0

Một chiến lược tốt khác là không viết mã trong các tệp được tạo. Giữ chúng riêng biệt. Sau đó, không có vấn đề ai tạo ra chúng, nó sẽ không thành vấn đề.

Giữ logic của bạn ra khỏi tệp được tạo.

+0

Tôi không nghĩ tác giả đang nói về ** chỉnh sửa thủ công mã nguồn được tạo tự động **, điều gì đó cần tránh như bệnh dịch hạch. –

0

Tên đã tạo tệp như "className.autoGenerated.cs" và thêm đệ quy svn: ignore thuộc tính với mẫu tên tương ứng "* .autoGenerated.cs".

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