Câu hỏi git đẩy đồng thời nhiều kho lưu trữ [trùng lặp]


Câu hỏi này đã có câu trả lời ở đây:

Làm sao tôi có thể làm git push để thúc đẩy không chỉ origin mà còn là một kho lưu trữ từ xa khác?

như git push chỉ là bí danh cho git push origin, tôi có thể bí danh git đẩy để đẩy đến 2 kho từ xa cùng một lúc (chỉ với một lệnh)?

Tôi không tìm kiếm một kịch bản không git ở đây nhưng muốn thiết lập điều này cho kho lưu trữ cục bộ của tôi trong git.

Khi tôi thử nó với các kịch bản post-push, tôi đã thất bại.


76
2017-11-23 12:10


gốc


điều này có đáp ứng nhu cầu của bạn không? - klang
thú vị là phải mất gần 4 năm để tìm câu hỏi / câu trả lời trùng lặp - g19fanatic


Các câu trả lời:


Tôi không nghĩ rằng bạn có thể làm điều đó chỉ bằng cách đặt cờ trên git, nhưng bạn có thể sửa đổi tệp cấu hình cho phép bạn đẩy tới nhiều kho lưu trữ từ xa mà không cần nhập tất cả vào (cũng chỉ nhập chúng vào lần đầu tiên và không phải sau khi)

bên trong .git/config bạn có thể thêm nhiều url vào một điều khiển từ xa được xác định:

[remote "all"]
    url=ssh://user@server/repos/g0.git
    url=ssh://user@server/repos/g1.git

nếu bạn git push all bây giờ bạn đẩy tất cả các url từ xa.


119
2017-11-23 12:18



"Hack" từ xa có lẽ là những gì tôi đang tìm kiếm. (Nó không xác định lại git push -> git push origin HEAD bí danh nhưng làm điều tôi muốn nó.) .git/config một lần có thể thêm nhiều urls đến một remote. Cảm ơn. - Kissaki
Một cái gì đó không làm việc cho tôi: stackoverflow.com/questions/15273040/… - ripper234
Thật tuyệt vời ở đó @ g19fanatic. Nó hoạt động như nét duyên dáng :) - d3r1ck
đây là đặc biệt - cambunctious
Nếu hai repo có mật khẩu khác nhau cho cùng một tên người dùng (email) thì sao? - MASh


Không chỉnh sửa thủ công

Bạn có thể thêm nhiều URL vào một nhánh từ xa (ví dụ: all) trực tiếp từ dòng lệnh bằng cách sử dụng git config --add remote.xyz.url với URL khác nhau:

git config --add remote.all.url ssh://user@server/repos/g0.git
git config --add remote.all.url ssh://user@server/repos/g1.git

Hoàn toàn tự động

Nếu bạn siêu lười biếng và không chịu sao chép URL / paster nhiều lần, điều này là dành cho bạn:

function git-add-push-all() {
  while read -r name url method; do
    git config --add remote.all.url "$url"
  done < <(git remote -v | awk '!/^all/ && /push/')
}

git-add-push-all # from git (sub)directory

Một kịch bản đầy đủ bashy là có thể (kiểm tra $name và $method), nhưng awk ngọt ngào và có tình yêu dành cho mọi người.

Đẩy

Sau đó, bạn có thể đẩy tới tất cả từ xa bằng

git push all

Tài liệu tham khảo


52
2017-09-05 13:24



Cảm ơn bạn vì câu trả lời này. Tôi chỉ cần thiết lập này và nó có thể đáng chú ý rằng tôi cần phải rời khỏi ssh: / / trong url (tôi đang sử dụng bitbucket và bluehost) vì vậy lệnh git config của tôi trông như thế này: git config --add remote. all.url user@server/repos/g0.git - MatthewLee
thông tin bổ sung: đầu tiên git config -add sẽ tạo điều kiện tìm nạp và đẩy từ xa, trong khi git config -add sẽ chỉ tạo điều khiển từ xa. - Paul Verschoor
Tôi xin lỗi, làm cách nào người dùng Windows có thể sử dụng tập lệnh tự động của bạn? Cảm ơn. - Саша Черных
@ СашаЧерных thử Bash trên Windows - Édouard Lopez
@ ÉdouardLopez: Tôi có Windows 10 LTSB, tại thời điểm Bash trên Windows không hỗ trợ LTSB. Cảm ơn. - Саша Черных


Bạn cũng có thể nhận url từ các điều khiển từ xa được định cấu hình:

for repo in g0 g1 ...
do
    git config --add remote.all.url `git config remote.$repo.url`
done

nơi g0, g1, ... là tên của điều khiển từ xa của bạn.


0
2018-03-03 15:15