Tôi gặp sự cố với móc 'cập nhật'. Trong trường hợp của một chi nhánh mới, nó nhận được một 0000000000000000000000000000000000000000 là 'oldrev'. Và tôi không biết cách xử lý trường hợp đó.Móc nhận/cập nhật Git và chi nhánh mới
Chúng tôi có yêu cầu, mọi thông báo cam kết đều tham chiếu đến vấn đề Jira hợp lệ. Vì vậy, tôi đã cài đặt một móc "cập nhật" trên kho lưu trữ trung tâm của chúng tôi. Cái móc đó có chữ "oldrev" và "newrev". sau đó tôi vượt qua những để "git rev-list" như thế này:
git rev-list $oldrev..$newrev
này mang lại cho tôi danh sách của tất cả các vòng quay, mà tôi sau đó có thể lặp qua, và làm bất cứ điều gì tôi cần phải làm.
Vấn đề là khi người dùng đẩy chi nhánh mới, móc được trả 0000000000000000000000000000000000000000 làm cũ. Và "git rev-list" chỉ đơn giản là phàn nàn với:
fatal: Invalid revision range 0000000000000000000000000000000000000000..21bac83b2
Vậy làm thế nào để tôi có được danh sách của tất cả các vòng quay mà trên đó chi nhánh mới? Tôi đã tìm kiếm trên mạng trong một thời gian và không tìm thấy gì. Các móc ví dụ tôi tìm thấy một trong hai
- không xử lý được vấn đề, và thất bại với các thông báo lỗi trên
- sai cố gắng giải quyết vấn đề bằng cách thiết lập oldrev để "", mà trả về kết quả sai từ rev -list
- chỉ đơn giản là bỏ cuộc khi họ gặp phải cũ đó
Không có âm thanh nào đặc biệt thú vị.
Vậy ai đó có ý tưởng làm thế nào để có được câu trả lời đúng trong trường hợp đó? Tôi đã suy nghĩ về truy vấn git cho "cho tôi tất cả các vòng quay có thể truy cập từ newrev, nhưng không phải từ bất kỳ chi nhánh khác (= tất cả các chi nhánh ngoại trừ một cái mới)". Nhưng ngay cả điều đó sẽ đưa ra câu trả lời sai nếu đã có sự hợp nhất từ nhánh mới với bất kỳ nhánh cũ nào.
Tôi không chắc chắn nếu nó là một cái gì đó kỳ lạ với môi trường của tôi hoặc cập nhật để git, nhưng phủ định là loại bỏ refs trên nhánh hiện tại. Tôi phải làm một cái gì đó như thế này: 'git rev-list $ (git cho-mỗi-ref -format = '% (refname)'" refs/heads/* "| grep -v '$ ref' | sed 's/^/\^/') "$ newrev" ' – mmalone
Để sử dụng trong móc' update' (và 'pre-receive'), như được chỉ định trong câu hỏi, những câu trả lời này phức tạp và tốn kém hơn. Câu trả lời của Joseph dưới đây là câu trả lời đơn giản và hiệu quả nhất; đó phải là câu trả lời đã chọn IMO. – MadScientist
@mmalone bạn nói đúng. Tôi đã phải thêm "| grep -v '$ rev'". Nếu không tôi luôn luôn có kết quả empy – dritan