2013-06-30 26 views
5

tôi sau một ví dụ từ bộ phận CNTT của chúng tôi, và tôi muốn hiểu những gì lệnh này được thực hiện một cách chính xác:Cần phải hiểu lệnh Git/Gerrit (lấy & đẩy)

git fetch origin +refs/changes/*:refs/remotes/origin/changes/* 

Để đưa ra một số khung tham chiếu, đây là một phần của công cụ tích hợp liên tục (CI), và đây là một phần của bước kiểm tra mã để kiểm tra. Các CI build được kích hoạt bằng cách đẩy để Gerrit với:

git push origin HEAD:refs/for/master 

tôi câu hỏi thứ hai, là nếu tôi muốn thúc đẩy sự thay đổi thành một chi nhánh phát triển tôi có thể sử dụng:

git push origin HEAD:refs/for/development 
+0

Bạn đang sử dụng công cụ CI nào? Jenkins? – uncletall

+0

Tôi đang sử dụng Teamcity – Plazgoth

Trả lời

0

Tôi không biết bất cứ điều gì về gerrit. Nhưng tôi có thể nói điều gì đó về lệnh git đầu tiên mà bạn đề cập đến.

Các phần cuối cùng của các lệnh bạn đề cập được gọi là refspecs. Bạn có thể đọc về những gì họ làm trong số Refspec chapter of the Pro Git book. Nói tóm lại:

git fetch origin +refs/changes/*:refs/remotes/origin/changes/* 

này nói rằng, đối với origin từ xa, lấy cam kết của chi nhánh đó, trong kho origin, đang trong refs/changes thư mục trong thư mục git (tức .git/refs/changes/ trong một kho lưu trữ tiêu chuẩn và refs/changes trong một kho chứa trần bình thường). Nó sẽ sao chép các nhánh đó vào thư mục cục bộ .git/refs/remotes/origin/changes/. Cuối cùng, theo hành vi tìm nạp thông thường, nó sẽ sao chép các cam kết thuộc về các nhánh đó vào thư mục .git/object.

Refspec chuẩn là +refs/heads/*:refs/remotes/origin/* để refs/changes trông hơi lạ với tôi. Đó không phải là một thư mục Git chuẩn, nhưng có lẽ đó là một điều Gerrit. Cấu trúc refs/remotes/origin/changes trông giống như changes là một nhánh trong kho lưu trữ cục bộ của bạn.

0

Một kéo điển hình của một bản vá sẽ trông như thế này: git pull ssh://www.example/com:29418/project refs/changes/24/24/2

này sẽ kéo dự án của bạn cộng với bộ vá thứ hai của sự thay đổi 24. Vì vậy, khi bạn kéo tất cả những thay đổi đó có thể là rất nhiều.

Tôi khuyên bạn nên sử dụng Jenkins (CI) cùng với plugin Gerrit và đảm bảo rằng bạn chỉ định choosing strategyGerrit Trigger. Điều này sau đó sẽ đảm bảo rằng bạn xây dựng sẽ kiểm tra bộ thay đổi thích hợp.

Có, bạn có thể đẩy tới chi nhánh phát triển. Tất nhiên bạn cần đảm bảo rằng bạn có quyền chính xác. Tốt nhất là tạo nhánh trong Gerrit trước tiên, bằng cách này bạn không phải cung cấp "tạo tham chiếu" ngay và ngăn chặn việc tạo ra các nhánh do nhầm lẫn bằng lỗi chính tả chẳng hạn.

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