2013-01-14 39 views
7

Tôi thích sử dụng chỉ đơn giản là git push để đẩy (chỉ) nhánh hiện tại tới luồng được cấu hình. Đối với điều đó tôi đặt git config push.default upstream làm chính xác điều đúng.Đẩy nhánh hiện tại vào Gerrit

Bây giờ tôi đã cố gắng thiết lập điều khiển từ xa phù hợp cho Gerrit, điều này tự động đẩy tới refs/for/*.

Ý tưởng này được thực hiện nó theo cách này:

[remote "gerrit"] 
     url = ssh://host:port/repo 
     push = refs/heads/*:refs/for/* 

Tôi muốn gõ git push gerrit và mong đợi git để đẩy chỉ chi nhánh hiện tại để các ref chính xác.

Thật không may bây giờ git cố gắng đẩy tất cả chi nhánh địa phương cho Gerrit. - Có cách nào để nói với git chỉ đẩy nhánh hiện tại như với số push.default ở trên không?

Cập nhật:

  • Git đẩy chỉ có thể sử dụng một refspec duy nhất.
  • Nếu một refspec rõ ràng được đưa ra trên dòng lệnh này được sử dụng.
  • Nếu không có gì được đưa ra trên dòng lệnh, được xác định bằng điều khiển từ xa.
  • Nếu không có gì được cung cấp với điều khiển từ xa, quá, chỉ khi đó push.default được xem xét.

Đối với Gerrit tôi cần một refspec như 'branch: refs/for/branch' với chi nhánh là nhánh hiện tại.

Câu hỏi:

  • Có tương đương refspec rõ ràng với những gì push.default = thượng nguồn đang làm gì?
  • Có cách nào để định cấu hình git để tạo đồng bằng git push tự động đẩy đến đúng ref/ref?

Hiện tại cách tốt nhất tôi tìm được là gói tất cả mọi thứ trong một tập lệnh riêng biệt như được đề xuất here. Nhưng tôi vẫn không tin rằng nó không phải là có thể chỉ với một refspec phù hợp.

+0

Ok. Chỉ cần kiểm tra các tùy chọn khác nhau tại đây. Tôi đã học được rằng 'push.default' chỉ được xem xét nếu không có refspec được đưa ra. Và nếu bạn cung cấp một refspec (như 'HEAD') thông qua dòng lệnh, điều này sẽ ghi đè refspec được cung cấp với điều khiển từ xa. Do đó nó sẽ chỉ đẩy đến 'ref/heads', mà không phải là những gì bạn muốn. Hấp dẫn. – VonC

Trả lời

1

Theo source, Git hiện đang triển khai push.default = upstream bằng cách tạo một refspec rõ ràng chứa tên rõ ràng.

Có vẻ như hiện tại không có cách nào để xác định hành vi đó bằng một refspec chung duy nhất, và một số tập lệnh (như đề xuất here) mà xây dựng một refspec rõ ràng là cách duy nhất cho bây giờ.

+0

Phản hồi thú vị, chắc chắn chính xác hơn câu trả lời của tôi (giờ đã bị xóa). +1 – VonC

-1

Bạn có thể cấu hình git chỉ gửi nhánh hiện tại tới kho lưu trữ từ xa bằng lệnh git config --global push.default current.

Các tùy chọn khác mà bạn có thể vượt qua để push.default là:

nothing - do not push anything. 
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default. 
upstream - push the current branch to its upstream branch. 
tracking - deprecated synonym for upstream. 
current - push the current branch to a branch of the same name. 

Các cấu hình có thể được nhìn thấy trong git help config lệnh.

CẬP NHẬT: Tuy nhiên, đọc kỹ hơn trang hướng dẫn, push.default "xác định hành động git push nên dùng nếu không có refspec được đưa ra trên dòng lệnh, không có refspec được cấu hình trong điều khiển từ xa, và không có refspec được ngụ ý bởi bất kỳ các tùy chọn được đưa ra trên dòng lệnh "#:. Vì vậy, tôi nghĩ rằng bạn sẽ cần phải sử dụng kịch bản để gửi chỉ các chi nhánh hiện tại khi chỉ định một refspec.

+0

Bạn đã đọc nhận xét của tôi ở trên trước khi đăng? Tôi trả lời như dưới đây (đã xóa, bạn không thể nhìn thấy nó), và có một -1;) – VonC

+0

Bạn đã đọc câu hỏi hoàn toàn chưa? Không, push.default chỉ được xem xét nếu không có refspec được đưa ra, tức là nó chỉ đẩy tới đầu. – michas

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