2011-11-23 26 views
7

Tôi bắt đầu chơi xung quanh với các móc git, và tôi muốn tạo một nhánh để ngăn chặn một nhà phát triển tạo một nhánh mới khi trên một nhánh cụ thể. Quá trình hiện tại công ty chúng tôi có nghĩa là để trông như thế này:Git hook để ngăn chặn việc tạo các nhánh mới từ các nhánh cụ thể

git checkout master 
git fetch 
git reset --hard origin/master 
git checkout -b [branch name] 
do awesome things. 

Tuy nhiên, thỉnh thoảng khi di chuyển một cách nhanh chóng, một số nhà phát triển kết thúc bắt đầu chi nhánh mới này từ một repo dàn. Mà gây đau buồn. Vì vậy, tôi muốn tạo một móc để ngắt khi một nhà phát triển bắt đầu tạo một chi nhánh mới, kiểm tra chi nhánh nào họ đang sử dụng và exit 1 nếu chi nhánh không phải là master (hoặc thường chỉ dừng hành động đó). nếu tên chi nhánh là staging) hoặc cho phép khác.

Edit:

Như tôi đã tìm kiếm thêm về điều này, tôi nhận ra tôi muốn có một cái móc tiền thanh toán, mà không xuất hiện để tồn tại. Trừ khi ai đó có một ý tưởng tốt hơn, tôi sẽ tiến hành in một cảnh báo rất lớn trong một móc sau khi kiểm tra nếu kịch bản trên đi qua.

+0

Một lần nữa, tại sao bạn muốn ngăn chặn sự phân nhánh? – jman

+1

Chi nhánh phân nhánh của chúng tôi chứa rất nhiều mã mà chúng tôi không muốn bị đẩy vào sản xuất, nhất thiết. – hookedonwinter

Trả lời

0

Tôi sẽ nắm bắt điều này trên mặt repo may mắn. Nếu một dev bắt đầu một chi nhánh trên một cái gì đó khác với một cam kết đó là tắt của chủ mới nhất, từ chối đẩy chi nhánh. Họ có thể sửa chữa bằng cách rebasing off của chủ và đẩy một lần nữa. Đảm bảo thông báo lỗi của bạn đủ mô tả để họ biết cách chỉnh sửa tình huống của họ.

Hơn nữa, cập nhật tổng thể của bạn mà không kiểm tra nó ra với:

git fetch 
git push . origin/master:master 

Sau đó tạo một nhánh của thuyền trưởng mới nhất:

git checkout -b somecoolfeature master 

Bạn không cần phải thậm chí có thầy địa phương của bạn cập nhật:

git fetch 
git checkout -b somecoolfeature origin/master 
do awesome stuff :) 
1

Đối với phía máy khách, bạn có thể tạo bài đăng -kiểm tra móc sử dụng chi nhánh git git - được vuốt để xem các chi nhánh được hợp nhất trong nhánh hiện tại. Nếu nhánh bạn muốn ngăn chặn phân nhánh được hợp nhất trong nhánh hiện tại thì bạn sẽ ném lỗi.

Mã trong bach sẽ trông như thế này:

 
#!/bin/sh 

getBranchName() 
{ 
    echo $(git rev-parse --abbrev-ref HEAD) 
} 

getMergedBranches() 
{ 
    echo $(git branch --merged) 
} 

if [ "$(getBranchName)" != "dev" ]; then 
    if [[ $(getMergedBranches) == *"dev"* ]]; then 
     echo "Don't create branches from the dev branch!" 
     exit 1 
    fi 
fi 
Các vấn đề liên quan