2012-04-19 19 views
16

Tôi đã sử dụng luồng git trong một vài tháng và nó đã hoạt động rất tốt. Tôi muốn tự động hóa hoạt động "bump version".Tìm cách tự động hóa "phiên bản bump" với luồng git

Dự án là PHP và footer.php có mã thông báo để thay thế bằng thẻ phát hành hiện tại. Tôi chắc chắn rằng với một số awk'ing của git đăng nhập và tập tin PHP tất cả mọi thứ nên làm việc ra, nhưng tôi giả định một ai đó đã làm điều này trước khi ...

Bất kỳ ý tưởng?

Trả lời

13

Bạn có thể sử dụng the semver gem, có thêm một tập tin .semver vào thư mục gốc của repo git của bạn. Semantic version numbers là một đề xuất cho việc có số phiên bản có cấu trúc/nhất quán/có ý nghĩa, đá quý chỉ giúp dễ dàng triển khai.

Vì vậy, tất cả các bạn cần làm là thêm:

semver inc major|minor|patch 

vào công việc của bạn (bằng tay hoặc kịch bản) để các .semver được cập nhật trong một thông cáo.

Nếu bạn không muốn phụ thuộc Ruby, semver là khá đơn giản, do đó, một chút thử nghiệm sed sẽ có khả năng mang lại một giải pháp làm việc.

1

Đây là mã chúng tôi sử dụng để tăng số phiên bản trong constants.h:

constants='../Include/constants.h' 

# Get the current build number 
currentbuild=`grep PRODUCT_BUILD $constants|sed 's/[^0-9]//g'` 
currentversion=`grep PRODUCT_VERSION $constants|sed 's/[^.0-9]//g'` 

echo "currentbuild=$currentbuild and currentversion=$currentversion" 
newver=$((1+$currentbuild)) 

# Update the build number on-disk: 
cp $constants /tmp/constants 
if sed -e "/PRODUCT_BUILD/ s/[0-9][0-9]*/${newver}/" </tmp/constants> $constants 
then  
    echo "Updated build number from $currentversion.$currentbuild to $currentversion.$newver." 
    cd ../Include 
    # Check it into version control 
    svn ci -m "updated build number to ${currentversion}.${newver} for $buildid in $buildroot" 
else 
    echo "There was a problem updating $constants to build $newver" 
fi  
10

Trong dự án phân chia dòng chảy của tôi, tôi thực sự đã triển khai các móc và bộ lọc, một yêu cầu được thực hiện trong dự án ban đầu nhưng cho đến nay vẫn chưa được triển khai. Với những người bạn có thể tự động cập nhật số phiên bản trong dự án của bạn. Dự án chia hai có thể được tìm thấy ở đây https://github.com/petervanderdoes/gitflow

Đối với một số kịch bản Bash trên phiên bản chạm bạn có thể kiểm tra hai GIST Tôi tạo ra https://gist.github.com/2877083 hoặc https://gist.github.com/2878492

8

Ngoài ra còn có bumpversion (thêm thông tin tại https://github.com/peritus/bumpversion) mà nhằm mục đích thay thế ma thuật sed đó.

Cài đặt với pip install bumpversion, cho biết tệp nào chứa số phiên bản của bạn và bạn có muốn cam kết và gắn thẻ đó không. Nó cũng có khả năng cấu hình cao (với phiên bản ngữ nghĩa như mặc định), vì vậy bạn có thể thêm một tập tin cấu hình khai báo về cách bump các phiên bản cho dự án phần mềm này tới các lựa chọn của bạn.

+0

Đây là một công cụ nhỏ tiện lợi. Cảm ơn bạn – Alex

+0

'bumpversion' dường như đã bị nhà phát triển ban đầu bỏ qua, nhưng có [ngã ba] (https://github.com/c4urself/bump2version) được tích cực duy trì và thêm một số tính năng như thẻ được gắn thẻ. – ostrokach

3

Semver bang trang web:

Với một số phiên bản MAJOR.MINOR.PATCH, thặng dư:

  • phiên bản YẾU khi bạn thực hiện thay đổi API không tương thích,
  • phiên bản NHỎ khi bạn thêm chức năng theo cách tương thích ngược và
  • Phiên bản PATCH khi bạn thực hiện các bản sửa lỗi tương thích ngược.

Nhãn bổ sung để phát hành trước và xây dựng siêu dữ liệu có sẵn dưới dạng tiện ích mở rộng cho MAJOR.MINOR.Định dạng PATCH.

Gitflow sử dụng một quy ước đặt tên cho các chi nhánh, sửa lỗi sống trên cành bắt đầu bằng hotfix/ và tính năng mới được bắt đầu với feature/.

Khi bất kỳ nhánh nào của loại này được hợp nhất thành chi nhánh phát hành, điều này sẽ làm cho số PATCH tăng lên. Nếu một đối tượng địa lý đã được hợp nhất thì cần phải tăng trường MINOR.

Với một bản sửa đổi cụ thể, bạn sẽ có thể xác định liệu một trong các chi nhánh đã được hợp nhất và trường nào sẽ bị sập.

Phần khó khăn là tìm ra một thay đổi đột phá. Trong quá khứ, tôi đã cân nhắc việc sử dụng sự phản chiếu trên mã được biên dịch để xác định xem API có thay đổi hay không, tuy nhiên, tôi sẽ dễ dàng hơn khi sử dụng từ khóa trong các thông báo cam kết để chỉ định các thay đổi đột phá.

0

Bạn có thể tự động hóa phiên bản chạm vào mọi cam kết. Ở đây bạn có thể tìm thấy nó được thực hiện bằng cách sử dụng kịch bản và được xây dựng trong móc git: https://github.com/addonszz/Galileo/tree/develop/githooks

Vỏ scrip chạy là: https://github.com/evandrocoan/.versioning/blob/master/scripts/updateVersion.sh

Các vấn đề về tự động hóa tất cả mọi thứ là làm thế nào để biết liệu bạn đang cập nhật Major, Minor, Patch hoặc Build, khi bạn đang cam kết mọi thứ.

Ý tôi là, để xây dựng, bạn có thể tự động hóa mọi cam kết nhánh phát triển, như được thực hiện trong liên kết ở trên.

Bản vá, bạn có thể móc mọi kết thúc của luồng git. Các liên kết ở trên chỉ thiếu móc kết thúc hotfix để tăng phiên bản vá chạy: ./githooks/updateVersion.sh patch

Nhưng trẻ vị thành niên và lớn không có lừa, tất cả chúng đều được thực hiện trong bản phát hành kết thúc tính năng.

Obs

Tôi tìm thấy một giải pháp cho hooking trước hotfix-cam, đó là về vấn đề: How to pre-hook the gitflow hotfix finish?

0

Nếu tôi hiểu hoạt động 'đụng phiên bản' của bạn một cách chính xác, sau đó bạn có nghĩa là tăng số phiên bản trong số lượng tệp tùy ý khi bạn bắt đầu bản phát hành với git flow release start x.x.x, trong đó phiên bản cũng được thể hiện trong thẻ git.

Kể từ khi dòng git gốc từ Driessen bị ngừng, người kế thừa không chính thức có vẻ là Peter van der Có gitflow-avh (https://github.com/petervanderdoes/gitflow-avh/), có chứa một số lượng lớn các móc dòng chảy git. Xem https://github.com/petervanderdoes/gitflow-avh/tree/develop/hooks để biết danh sách đầy đủ.

tôi đã làm phiên bản chạm vào post-flow-release-start với kịch bản này chút:

VERSION=$1 

# Get rid of version prefix 
STRIPPED_VERSION=`echo $VERSION | cut -d'v' -f 2` 
sed -i '' -E "s/^([ |#|[:alpha:]]*)\[.*\]$/\1[$STRIPPED_VERSION]/1" ./README.md 
sed -i '' -E "s/^([\t| ]*\"version\":)\".*\"/\1\"$STRIPPED_VERSION\"/1" ./package.json 
git commit -a -m "version $STRIPPED_VERSION" 

exit 0 

Nó là một chút cứng nhắc, bởi vì hai tập tin được mã hóa (README.md và package.json). Bạn có thể thực hiện tìm kiếm phiên bản cũ từ thẻ cuối cùng và sau đó repleace nó cho tất cả các tệp được định cấu hình trong vòng lặp.

Cẩn thận:
OSX yêu cầu hậu tố cho sed -i, bạn có thể sử dụng dấu ngoặc kép trống.Ngoài ra, thông số regex mở rộng cho sed được đặt tên khác trên Linux.

1

Bạn cũng có thể có một cái nhìn tại repo của tôi cho bumpversion của nó hiện đang làm cho các tập tin cài đặt python mà có thể được sửa đổi Using-bumpversion-package

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