Để tích hợp phiên bản git như số xây dựng hay không?


12

Một đồng nghiệp và tôi đã thay phiên nhau tranh luận / thảo luận về các vấn đề / giá trị của việc tích hợp một phiên bản có nguồn gốc từ kho git hiện tại vào mã của chúng tôi bất cứ khi nào nó được xây dựng.

Chúng tôi nghĩ rằng công đức bao gồm:

  • Không cần phải lo lắng về lỗi của con người trong việc cập nhật số phiên bản
  • Truy xuất nguồn gốc giữa những gì chúng ta tìm thấy trong một thiết bị và mã nguồn được lấy từ

Các vấn đề đã phát sinh (đối với chúng tôi) bao gồm:

  • Các hệ thống xây dựng có nguồn gốc IDE (ví dụ MPLABX) có thể khiến bạn khó tìm ra nơi để đặt các loại móc này vào (và cuối cùng nó có thể trở nên khá nhảm nhí)
  • Nhiều công việc hơn để thực sự tích hợp điều này vào tập lệnh xây dựng / makefiles
  • Kết hợp với một cách tiếp cận xây dựng cụ thể (ví dụ: nếu một người xây dựng bằng XCode và MPLABX khác) có thể tạo ra những bất ngờ xuôi dòng

Vì vậy, chúng tôi tò mò nơi những người khác đã tham gia vào cuộc tranh luận này. Thật dễ dàng để cuộc thảo luận trở thành giai thoại. Có rất nhiều người ngoài kia đang khăng khăng tự động hóa từ đầu đến cuối, treo số lượng công việc trước và khớp nối mà nó tạo ra. Và có rất nhiều người khác ở phía bên kia của cuộc tranh luận, họ chỉ làm những việc dễ nhất làm việc và sống với rủi ro.

Có một câu trả lời hợp lý cho phía nào là tốt nhất để hạ cánh trên?

Câu trả lời:


15

Chúng tôi sử dụng mô tả git với các thẻ phiên bản. Dòng chảy về cơ bản là:

  • tạo thẻ cho phiên bản chúng tôi đang làm việc (ví dụ v1.1.2)
  • mỗi lần chạy git describe
  • Khi chúng tôi giao hàng, sử dụng tên thẻ

git describecung cấp tên thẻ, số lần xác nhận kể từ thẻ và hàm băm của thẻ. Một thẻ mẫu trông giống như:

v1.1.2-6-a3b27gae

Điều này có lợi ích là các nhà phát triển nhận được băm, vì vậy nếu có gì đó phá vỡ giữa các bản dựng, nhà phát triển có thể dễ dàng làm thay đổi các thay đổi. Nó cũng đơn giản để quản lý; chỉ cần nhóm trưởng của bạn tạo và đẩy thẻ trên một nhánh lỗi mới và hệ thống xây dựng của bạn sẽ giải quyết phần còn lại.

Chúng tôi loại bỏ hàm băm (và số bản dựng) vì nó giúp người dùng dễ hiểu số phiên bản của chúng tôi hơn. Chúng tôi thấy rằng điều này mang lại cho chúng tôi những điều tốt nhất của cả hai thế giới, trong khi vẫn cung cấp đủ thông tin liên quan khi thiết kế một bản phát hành.

Hiện tại, chúng tôi có một phiên bản phức tạp hơn một chút về điều này, nhưng ý tưởng vẫn còn.


1
Chỉ cần lưu ý: hàm băm trong it describe(phần cuối của chuỗi) không phải là cset-id của thẻ, mà là hàm băm của bộ thay đổi mà chúng tôi mô tả . Ở dạng dễ đọc của con người v1.1.2-6-a3b27gaesẽ là "Sáu thay đổi sau khi thay đổi, được gắn thẻ là v1.1.2-6, có các thay đổi ngắn băm a3b27gae"
Lazy Badger

@LazyBadger - Chính xác. Bản thân hàm băm cho thẻ ít hữu ích hơn, vì bạn có thể dễ dàng git checkout v1.1.2hoặc liệt kê cam kết của thẻ git rev-list v1.1.2 | head -n 1.
beatgammit

6

Chúng tôi từng là một cửa hàng SVN nên toán học này rất dễ - số xây dựng là SVN rev và đó là điều đó. Chúng tôi đã cố gắng duy trì điều này khi chúng tôi bắt đầu chuyển sang DCVSes và thấy rằng nó đã thất bại vì một vài lý do.

Đầu tiên, ai biết nếu rev ​​69bc333bc8d8 là trước, sau hay đồng thời với rev 25b0f0d1052c? Có rất ít bối cảnh so với hệ thống SVN khi bạn ít nhất biết 101 là sau 100. Thứ hai, bản chất của kiểm soát nguồn DCVS làm cho mọi thứ không tuyến tính theo nhiều cách khi các bản dựng tiếp theo có thể không tiến lên cùng một quả bóng.

Cuối cùng chúng tôi đã quyết định sử dụng một máy chủ xây dựng để phân phối số lượng bản dựng cho mọi thứ vì nó có khả năng hiển thị và khả năng xử lý phù hợp.


2

Tôi sử dụng sơ đồ sau cho hệ thống xây dựng phòng thu trực quan của C # DLL để tự động tạo số phiên bản (Trước đây chúng tôi có vấn đề với việc triển khai không được thực hiện chính xác nên cần một cách rõ ràng để đảm bảo triển khai phiên bản chính xác đã xảy ra).

  • Chính - Mã hóa cứng 1, thường được xác định bởi phía doanh nghiệp
  • Nhỏ - Mã hóa cứng 0, thường được xác định bởi phía doanh nghiệp
  • Sửa đổi - Số ngày kể từ ngày 1 tháng 1 năm 2010 (hoặc bất kỳ ngày bắt đầu tùy ý nào khác)
  • Xây dựng - Một nửa số giây kể từ Nửa đêm (Vì đó là số không dấu 16 bit)

Lưu ý rằng điều này giả sử bạn có 2 số không dấu 16 bit có thể chơi được. Tạo một hệ thống tương đương sử dụng số lượng nhỏ hơn cũng có thể được thực hiện.

Cũng lưu ý rằng các trường không phải là số có thể hữu ích nếu bạn có thể đính kèm chúng dưới dạng siêu dữ liệu. Ví dụ: thêm số phiên bản git làm số Phiên bản thông tin.


2

Tôi trực tiếp liên kết đầu ra của trạng thái git, đăng nhập và tìm khác biệt để thực thi. Sau đó, có một tùy chọn để in đó. Ưu điểm là bạn không chỉ có thể tìm ra nhánh nào mà nhị phân của bạn được xây dựng từ đó, mà còn bao gồm cả những thay đổi mã nguồn không được cam kết. Vui lòng xem:

https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state

Bạn sẽ có thể sử dụng 3 tệp đó để tạo ra lib lib trạng thái SCM của riêng bạn.


0

Tôi muốn giới thiệu việc sử dụng Autorevision .

Bạn có thể nhận đầu ra ở nhiều định dạng khác nhau, ví dụ như tiêu đề kiểu c .

Ngoài ra còn có một vài ví dụ (trong thư mục đóng góp) về cách bạn có thể kết nối mọi thứ để bất kể ai đang xây dựng và họ đang làm như thế nào, họ sẽ luôn nhận được thông tin phiên bản giống nhau, ngay cả khi họ đang xây dựng từ một tarball.

Ngoài ra, vì ngoài gitAutorevision hoạt động với svnhgnó giúp dễ dàng chuyển khỏi svn mà không phải thay đổi quá nhiều khi bạn đã thiết lập xong.


Thật không may, tài liệu Autorevision dường như không đưa ra bất kỳ khuyến nghị. Bạn sử dụng / kết hợp thông tin nào từ tiêu đề được tạo tự động sửa đổi để xây dựng chuỗi phiên bản phần mềm độc đáo và rõ ràng?
Silicomancer

Nó phụ thuộc vào mức độ con người bạn có thể đọc được : <VCS_TAG>-<VCS_SHORT_HASH>, <VCS_TAG>-<VCS_TICK>hoặc thậm chí <VCS_ACTION_STAMP>tất cả nên hoạt động. Nếu bạn muốn có một danh sách đầy đủ về những biểu tượng đó là gì thì tôi khuyên bạn nên kiểm tra trang man .
dak180
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.