Git kéo từ một kho lưu trữ khác


95

Tôi có một kho lưu trữ được gọi Genericlà một ứng dụng chung. Tôi đã tách nó thành một kho lưu có tên Acme, chỉ được xây dựng dựa trên Generickho lưu trữ ứng dụng được lưu trữ và thêm thương hiệu Acme Co vào đó.

Nếu tôi thực hiện các thay đổi đối với chức năng cốt lõi Generic, tôi muốn cập nhật Acmekho lưu trữ với những thay đổi mới nhất mà tôi đã thực hiện đối với chức năng cốt lõi trong đó Generic. Làm thế nào tôi sẽ làm điều đó?

Theo như tôi có thể nói, về cơ bản tôi đang cố gắng hợp nhất những thay đổi được thực hiện trong kho lưu trữ ngược dòng vào fork hiện tại.

Nếu điều đó có ý nghĩa, tôi đang cố gắng làm điều này vì tôi có một ứng dụng chung mà sau đó tôi xây dựng và xây dựng thương hiệu cho từng khách hàng (như Acmetrong ví dụ này). Nếu có cách nào tốt hơn để thực hiện việc này, hãy cho tôi biết.

Câu trả lời:


135

Đưa ra lệnh sau trong Acmerepo của bạn . Nó thêm một kho lưu trữ từ xa mới có tên upstreamtrỏ đến kho Generic.

git remote add upstream https://location/of/generic.git

Sau đó, bạn có thể hợp nhất bất kỳ thay đổi nào được thực hiện Genericthành nhánh hiện tại Acmebằng lệnh sau:

git pull upstream

Nếu bạn chỉ muốn nó tải xuống các thay đổi mà không tự động hợp nhất, hãy sử dụng git fetchthay vì git pull.

Nếu bạn muốn vô hiệu hóa tính năng đẩy tới kho lưu trữ đó, hãy đặt URL đẩy thành URL không hợp lệ bằng cách sử dụng một cái gì đó như

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git bây giờ sẽ hét vào mặt bạn về việc không thể tìm thấy repo nếu bạn cố gắng đẩy đến upstream(và xin lỗi về Rickroll, nhưng đó là chuỗi ngẫu nhiên đầu tiên nảy ra trong đầu tôi).


6
Cảm ơn vô cùng. Chỉ một điều khác: có cách nào tôi có thể đặt điều khiển từ xa này ở chế độ chỉ đọc, để cuối cùng tôi không vô tình đẩy đến nó không?
Libbux

1
Tôi bắt đầu trả lời nhưng tôi thấy McLovin đã chỉnh sửa câu trả lời của mình để bao gồm điều đó.
Frankie Simon

4
Kể từ git 2.9, bạn sẽ cần chỉ định cờ --allow-không liên quan-lịch sử. Xem stackoverflow.com/a/37938036/3799847
sfinks_29

5
Tôi cần phát hànhgit pull --allow-unrelated-histories upstream master
Alec Jacobson

Tôi đã thử điều đó nhưng git pull upstreamchỉ bị treo ... bất kỳ ý tưởng nào?
Paulo Carvalho

6

Để kéo một nhánh cụ thể từ các repo khác nhau, bạn có thể sử dụng lệnh git dưới đây.

git pull <git_url> <branch> --allow-unrelated-histories
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.