Làm thế nào để ngăn Magit hỏi nơi đẩy một nhánh cây?


10

Khi gọi magit-push-currentvới P Pbộ đệm trạng thái, hãy Magit 2.1.0hỏi tôi nơi để đẩy nhánh vào lần đầu tiên, khi không đặt ngược dòng.

Làm thế nào nó có thể cho phép tự động tạo ra tên như trước đây để làm?


2
Trong trường hợp bạn không biết, tên được tạo tự động là một trong những tùy chọn hoàn thành. Vì vậy, lần đầu tiên bạn đẩy some-branch-nameđến originđiều khiển từ xa, bạn có thể chỉ cần gõ o TAB s TABvà bạn sẽ có được tên bạn muốn.
Malabarba 7/07/2015

Oh ok tôi không biết, cảm ơn bạn. Vấn đề là tôi có rất nhiều nhánh bắt đầu với cùng một tiền tố, không tiện dụng lắm, tôi cũng luôn đặt các nhánh từ xa có cùng tên với các nhánh cục bộ.
z1naOK9nu8iY5A

Câu trả lời:


8

Cập nhật: "Chi nhánh đẩy" được đề cập dưới đây đã được triển khai ngay bây giờ. Xem tài liệu về phân nhánh để biết thêm thông tin.

Bạn phải thiết lập nhánh ngược dòng một lần. Một khi bạn đã hoàn thành việc P Pđó bạn sẽ nhận được danh sách các thay đổi chưa được xử lý và chưa được xử lý trong bộ đệm trạng thái (miễn là có bất kỳ).

Có nhiều cách khác nhau để thiết lập nhánh ngược dòng. Bạn có thể sử dụng công --set-upstreamtắc từ cửa sổ bật lên đẩy : P -u P. Hoặc sử dụng lệnh thiết lập ngược dòng và không làm gì khác : b u.

Ngoài ra Magit hiện tự động đặt nhánh ngược dòng khi tạo một nhánh mới, với điều kiện "điểm bắt đầu" là tên nhánh. Điều này làm việc cho "thượng nguồn" địa phương và từ xa. Nhưng lưu ý rằng nếu bạn chọn một chi nhánh địa phương làm điểm bắt đầu, thì điều đó sẽ không giúp bạn đẩy. Đẩy từ kho lưu trữ hiện tại sang kho lưu trữ hiện tại rõ ràng là không có ý nghĩa và không được phép.

Vì vậy, khi nhánh "ngược dòng" trên thực tế là một nhánh cục bộ khác, thì nó P Phoạt động như thể không có nhánh ngược dòng nào được cấu hình và hoạt động chính xác như thế P e. Tương tự là trường hợp nếu không có cấu hình ngược dòng nào được cấu hình cả.

Điều này do một hạn chế trong Git: người ta chỉ có thể liên kết một nhánh khác với một số nhánh và sau đó nhánh đó được gọi là "nhánh ngược dòng". Sẽ tốt hơn nếu có ít nhất một chi nhánh "thượng nguồn" và "xuất bản". Tôi dự định thực hiện điều đó trong Magit cuối cùng. Xem vấn đề # 1485 .

Vì vậy, nếu bạn muốn có thể đẩy chỉ bằng P Pthì nhánh "ngược dòng" phải là ví dụ "origin / master", không phải "master".


Tôi đang xem xét thêm một biến thể đẩy luôn luôn chạy git pushmà không có bất kỳ đối số. Những gì mà sau đó sẽ phụ thuộc hoàn toàn vào cấu hình Git.


Tôi đã phân nhánh từ mastervà nó không được thiết lập ngược dòng, tôi có thể phân nhánh từ đó origin/masterđể tự động ngược dòng không?
z1naOK9nu8iY5A 7/07/2015

Xem câu trả lời cập nhật.
tarsius 7/07/2015

1
Phân nhánh từ origin/masterthiết lập origin/masterlà thượng nguồn, nhưng tôi đã dự kiến ​​sẽ có origin/branch-namethượng nguồn.
z1naOK9nu8iY5A

Nếu đó là những gì bạn muốn thì tốt nhất nên thực hiện trong quá trình đẩy. P -p P <... completion ...> RETLưu ý rằng origin/branch-nameđược cung cấp dưới dạng một ứng cử viên hoàn thành, vì vậy bạn không cần phải loại nó ra.
tarsius 7/07/2015

2
Điều này thật đau đớn khi bạn đang sử dụng gitflow và kéo các yêu cầu để xem lại mã, với một nhánh cho mỗi tính năng, bởi vì bạn thường chỉ đẩy một lần và luôn tạo một nhánh từ xa có cùng tên với nhánh cục bộ. Đẩy đến một nhánh có tên khác sẽ là một kết thúc chạy xung quanh việc xem xét mã.
Barry Kelly

3

Tôi sử dụng lời khuyên sau đây sẽ tự động kích hoạt --set-upstreamkhi chi nhánh hiện tại chưa có dòng ngược:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

Kết hợp với hoàn thành ido, điều này cho phép đẩy một nhánh mới với P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)

Điều này thật tuyệt! Cảm ơn rât nhiều!
z1naOK9nu8iY5A

0

Tôi chỉ tạo chi nhánh mới b cvà sau đó chỉnh sửa .git/configtệp để trỏ đến origin/branchchứ không phải loay hoay với tất cả các công cụ 2 phép thuật, dường như không hoạt động.

Thay đổi:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

Đến

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

Điều này hoạt động, trong khi tôi vẫn chưa tìm thấy một sự kết hợp quan trọng trong magit2 để thực hiện điều tương tự. Cố gắng đặt điều khiển từ xa không hoạt động vì nó chưa tồn tại trên nguồn gốc.


1
Có thể thiết lập ngược dòng bằng cách sử dụng bu. Nhưng điều đó sử dụng git branch --set-upstream-tovà như bạn biết, Git không thể đặt một nhánh không tồn tại là thượng nguồn và vì vậy Magit cũng không thể.
tarsius

@tarsius magit 1 dường như làm những gì tôi cần nó. Tôi chỉ đang cố gắng để lấy lại một số lợi ích của quy trình công việc đó.
David N. Welton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.