Câu trả lời:
Tài liệu về Gerrit, đặc biệt là phần "Thay đổi đẩy" , giải thích rằng bạn đẩy đến " refs/for/'branch'
ref ma thuật sử dụng bất kỳ công cụ máy khách Git nào".
Hình ảnh sau đây được lấy từ Giới thiệu đến Gerrit . Khi bạn đẩy đến Gerrit, bạn làm git push gerrit HEAD:refs/for/<BRANCH>
. Điều này đẩy các thay đổi của bạn đến khu vực tổ chức (trong sơ đồ, "Đang chờ thay đổi"). Gerrit không thực sự có một chi nhánh được gọi là <BRANCH>
; nó nằm cho khách hàng git.
Trong nội bộ, Gerrit có triển khai riêng cho ngăn xếp Git và SSH. Điều này cho phép nó cung cấp các refs/for/<BRANCH>
ref "ma thuật" .
Khi nhận được yêu cầu đẩy để tạo một ref trong một trong các không gian tên này, Gerrit sẽ thực hiện logic riêng của mình để cập nhật cơ sở dữ liệu, và sau đó nói dối với khách hàng về kết quả của hoạt động. Một kết quả thành công khiến khách hàng tin rằng Gerrit đã tạo ra ref, nhưng thực tế Gerrit hoàn toàn không tạo ra ref. [ Liên kết - Gerrit, "Chi tiết Gritty" ].
Sau khi bản vá thành công (nghĩa là bản vá đã được đẩy lên Gerrit, [đưa nó vào khu vực tổ chức "Thay đổi đang chờ xử lý"], đã xem xét và đánh giá đã được thông qua), Gerrit đẩy thay đổi từ "Thay đổi đang chờ xử lý" vào " Kho lưu trữ có thẩm quyền ", tính toán nhánh nào sẽ đẩy nó vào dựa trên phép thuật mà nó đã làm khi bạn đẩy tới refs/for/<BRANCH>
. Bằng cách này, các bản vá được đánh giá thành công có thể được lấy trực tiếp từ các nhánh chính xác của Authoritative Repository
.
Để tránh phải chỉ định đầy đủ lệnh git đẩy, bạn có thể thay đổi tệp cấu hình git của mình:
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
Bây giờ bạn có thể chỉ cần:
git fetch gerrit
git push gerrit
Đây là theo Gerrit
remote.origin.push
thay vì phải gõ / dán nó mỗi lần!
git fetch
và git push
với cấu hình @DavidDoria đã đề cập ở trên.