Có cách nào để kích hoạt móc sau khi một chi nhánh mới đã được kiểm tra trong Git không?Có cách nào để kích hoạt móc sau khi một chi nhánh mới đã được kiểm tra trong Git không?
Trả lời
Nếu một trong những móc sẽ không làm điều đó tôi sẽ ngạc nhiên trước
http://schacon.github.com/git/githooks.html
Có lẽ đây nhất:
hậu kiểm
móc này được gọi khi a git-checkout được chạy sau khi có cập nhật thông tin công việc. Móc là được cung cấp ba tham số: ref của HEAD trước, ref của HEAD mới (có thể hoặc không thay đổi), và cờ cho biết thanh toán là thanh toán chi nhánh (thay đổi nhánh) , cờ = 1) hoặc tệp thanh toán (truy xuất tệp từ chỉ mục , cờ = 0). Móc này không thể ảnh hưởng đến kết quả của git-checkout.
Một móc git là một kịch bản được đặt ở một vị trí đặc biệt của kho lưu trữ của bạn, vị trí đó là:
.git/móc
Các kịch bản có thể được bất cứ loại nào mà bạn có thể thực hiện trong môi trường của bạn tức là bash, python, ruby, v.v.
Móc được thực hiện sau khi thanh toán là post-checkout. Từ các tài liệu:
... Các móc được đưa ra ba thông số ...
Ví dụ:
Tạo móc (script):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
Nội dung mẫu móc:
#!/bin/bash
set -e
printf '\npost-checkout hook\n\n'
prevHEAD=$1
newHEAD=$2
checkoutType=$3
[[ $checkoutType == 1 ]] && checkoutType='branch' ||
checkoutType='file' ;
echo 'Checkout type: '$checkoutType
echo ' prev HEAD: '`git name-rev --name-only $prevHEAD`
echo ' new HEAD: '`git name-rev --name-only $newHEAD`
Lưu ý: Các công việc trong dòng đầu tiên chỉ ra loại kịch bản.
Tập lệnh này (git hook) sẽ chỉ chụp ba thông số được truyền và in chúng theo định dạng thân thiện với con người.
Các post-checkout
hook nhận ba thông số:
- Ref của TRỤ trước
- Ref của TRỤ mới
- Cho dù đây là một kiểm tra tập tin (
0
) hoặc chi nhánh thanh toán (1
)
Bạn có thể sử dụng thực tế rằng một chi nhánh được tạo từ HEAD hiện tại sẽ có cùng giá trị cho các tham số 1 và 2.
cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then
echo "New branch created. (Probably)."
fi
EOF
chmod u+x .git/hooks/post-checkout
Hạn chế:
- Kiểm tra ra một chi nhánh hiện có mà sẽ xảy ra là tại các HEAD giống như các HEAD hiện tại sẽ đánh lừa nó.
- Tạo chi nhánh mới không từ HEAD hiện tại sẽ không được phát hiện.
Tương tự như những người khác nhưng xác minh rằng chi nhánh đã được kiểm tra một lần.
#!/bin/bash
# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi
BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`
#if the refs of the previous and new heads are the same
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2" ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
git push origin ${BRANCH_NAME}
fi
Điều này giúp tôi đi đúng hướng, cảm ơn rất nhiều! Kể từ khi nó rere reflog để đếm checkouts tôi tin rằng một gotcha sẽ là nếu một chi nhánh đã tồn tại trước đó và một chi nhánh mới với cùng tên đã được tạo ra, chi nhánh đó sẽ không được công nhận là mới. Đó có thể là hành vi mong muốn hoặc một vấn đề tùy thuộc vào trường hợp sử dụng nhưng tôi chỉ nghĩ rằng tôi muốn đề cập đến nó. – Pwnrar
- 1. Móc nhận/cập nhật Git và chi nhánh mới
- 2. Móc git khi một chi nhánh mới được tạo và/hoặc được đẩy
- 3. đẩy chi nhánh 'không được kiểm tra'
- 4. Viết một móc git sau khi nhận để xử lý một chi nhánh cụ thể
- 5. chi nhánh git (không có chi nhánh)
- 6. Git: chi nhánh mới không bị đẩy
- 7. Móc Drupal được kích hoạt sau khi nút được tạo
- 8. Bạn có cần tạo chi nhánh để kiểm tra một phiên bản git cụ thể không?
- 9. Tìm tên chi nhánh Git trong móc hậu cập nhật
- 10. Tạo chi nhánh git sau khi thay đổi đã được thực hiện để làm chủ
- 11. Khi nào chi nhánh trong git?
- 12. Git: tạo ra chi nhánh mới từ một chi nhánh sai
- 13. Cách dễ dàng, không đau để kiểm tra các móc kim loại mới (đang hoạt động)
- 14. Làm cách nào để kích hoạt macro chạy sau khi nhận được thư mới trong Outlook?
- 15. GIT - Tôi đã chi nhánh từ đâu?
- 16. Chỉ có nhánh chính mới hiển thị sau khi nhân bản một mã Git repo
- 17. chi nhánh luồng git đã phân tách
- 18. Cam kết thay đổi đối với một chi nhánh khác với chi nhánh hiện tại đã kiểm tra với subversion
- 19. tạo một chi nhánh svn mới với git-svn
- 20. Git: không thể chuyển sang chi nhánh mới từ xa
- 21. git/Gerrit ngăn chặn phát triển chi nhánh được sáp nhập vào chi nhánh ổn định/kiểm tra
- 22. Git - Làm thế nào để xem chi nhánh có EVER được sáp nhập vào một chi nhánh khác?
- 23. Git: Tôi có thể chuyển thư mục làm việc của mình đến một chi nhánh mới mà không cam kết vào chi nhánh hiện tại không?
- 24. git hooks: có móc móc không?
- 25. Git Hook: Thực hiện hành động khi một chi nhánh được nâng cao
- 26. Làm cách nào để tạo chi nhánh Git mới từ một cam kết cũ?
- 27. Git hook để ngăn chặn việc tạo các nhánh mới từ các nhánh cụ thể
- 28. Git: Không thể nhìn thấy mới chi nhánh từ xa
- 29. Tạo chi nhánh git dựa trên một chi nhánh khác
- 30. git sáp nhập chi nhánh trong một kho trống
Bạn có biết cách nào để biết đây là thanh toán tạo chi nhánh hay không (bên cạnh việc xem xét bản chỉnh sửa của HEAD mới)? – pkoch
Có vẻ như bạn nên hỏi một câu hỏi hoàn toàn mới. Nếu bạn làm như vậy, hãy gửi cho tôi liên kết và tôi sẽ xem liệu tôi có thể trợ giúp không. Vấn đề mà bạn đang cố gắng giải quyết là gì? – givanse
Nếu một cam kết là đầu của một số chi nhánh, 'name-rev' chỉ cung cấp cho tên mà đến theo thứ tự bảng chữ cái đầu tiên. Vì vậy, sau khi kiểm tra một chi nhánh với một tên theo thứ tự bảng chữ cái đứng trước tên của nhánh ban đầu, dòng 'prev HEAD' sẽ đặt tên cho nhánh mới. Giải pháp thay thế: 'thisBranchName = $ (git rev-parse --abbrev-ref HEAD); cho chi nhánh bằng $ (git branch --color = never --contains $ 1 | sed -e 's /^..//'); làm nếu ["$ (git show-ref -s $ branch)" == $ 1] && ["$ branch"! = "$ thisBranchName"]; sau đó parentBranchName = $ branch; ngắt; fi; done' – Ansa211