Khi gọi magit-push-current
với P P
bộ đệm trạng thái, hãy Magit 2.1.0
hỏ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?
Khi gọi magit-push-current
với P P
bộ đệm trạng thái, hãy Magit 2.1.0
hỏ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?
Câu trả lời:
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đó và 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-upstream
tắ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 push
mà 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.
master
và 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?
origin/master
thiết lập origin/master
là thượng nguồn, nhưng tôi đã dự kiến sẽ có origin/branch-name
thượng nguồn.
P -p P <... completion ...> RET
Lư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.
Tôi sử dụng lời khuyên sau đây sẽ tự động kích hoạt --set-upstream
khi 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)
Tôi chỉ tạo chi nhánh mới b c
và sau đó chỉnh sửa .git/config
tệp để trỏ đến origin/branch
chứ 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.
bu
. Nhưng điều đó sử dụng git branch --set-upstream-to
và 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ể.
some-branch-name
đếnorigin
điều khiển từ xa, bạn có thể chỉ cần gõo TAB s TAB
và bạn sẽ có được tên bạn muốn.