Một dự án có thể có nhiều nguồn gốc?


188

Một dự án có thể có hai (hoặc nhiều) "nguồn gốc" trong Git không?

Tôi muốn đẩy một dự án duy nhất lên cả github và máy chủ Heroku .

Cụ thể, lỗi này xuất hiện khi thêm kho github:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.

8
Bạn có thể có nhiều kho từ xa như bạn muốn, nhưng bạn phải đặt cho chúng các tên khác nhau.
Felix Kling

Tên kho lưu trữ là khác nhau trong trường hợp này. Là từ "nguồn gốc" một tên có thể được thay đổi?
Chris Dutrow

4
Đúng , git remote rename <old> <new>: linux.die.net/man/1/git-remote . Nhưng bạn cũng có thể đặt tên cho kho lưu trữ Github theo cách khác ...
Felix Kling


Và có thể biến một trong các điều khiển từ xa thành mặc định để tôi không được yêu cầu viết rõ ràng tên của điều khiển từ xa đó mỗi khi tôi đang đẩy?
40

Câu trả lời:


275

Bạn có thể có nhiều điều khiển từ xa như bạn muốn, nhưng bạn chỉ có thể có một điều khiển từ xa có tên là "nguồn gốc". Điều khiển từ xa được gọi là "origin" không có gì đặc biệt, ngoại trừ đó là điều khiển từ xa mặc định được tạo bởi Git khi bạn sao chép một kho lưu trữ hiện có. Bạn có thể định cấu hình một điều khiển từ xa thứ hai, đẩy đến / kéo từ điều khiển đó và thiết lập một số nhánh để theo dõi các nhánh từ điều khiển đó thay vì nguồn gốc.

Thay vào đó, hãy thử thêm một điều khiển từ xa gọi là "github":

$ git remote add github https://github.com/Company_Name/repository_name.git

# push master to github
$ git push github master

# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch

# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch

4
Như được chỉ ra bởi câu trả lời có số phiếu cao nhất cho câu hỏi mà câu hỏi này có thể trùng lặp - một điều khiển từ xa có thể đề cập đến nhiều kho lưu trữ. Do đó, bạn có thể đẩy đến một điều khiển từ xa và cập nhật hai hoặc nhiều kho lưu trữ, không rõ liệu đó có phải là mục tiêu của OP hay không.
AD7six

Một số ví dụ thực tế về lý do tại sao bạn muốn làm điều này, mặc dù? Tại sao bạn có một thư mục được chỉ vào một số kho lưu trữ? Mỗi kho lưu trữ thường có thư mục riêng dành riêng
dspacejs

4
@mightyspaj Khá nhiều người triển khai Heroku có một điều khiển từ xa được gọi originvà một điều khiển từ xa được gọi heroku.
meagar

@mightyspaj, Hoặc nếu nhóm của bạn đang sử dụng dĩa và đôi khi bạn muốn truy cập chúng. Chúng tôi làm điều đó trong nhóm của chúng tôi làm việc với các nhóm trong các UTC khác nhau để khi chúng tôi phê duyệt PR, chúng tôi có thể khởi động lại / đẩy vào đó bằng cách sử dụng ngã ba đó và có thể hợp nhất mã ngay bây giờ, không phải ngày mai).
Benoit Drapeau

Có cách nào để đẩy tất cả các chi nhánh địa phương cùng một lúc sang điều khiển mới không?
Tanocation

89

Như một lưu ý phụ cho bất kỳ ai vấp phải câu hỏi này sau đó, có thể có nguồn gốc đẩy đến nhiều hơn một máy chủ kho lưu trữ git tại một thời điểm.

Bạn có thể đạt được điều này bằng cách sử dụng lệnh sau để thêm URL khác vào điều khiển từ xa gốc.

git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git

8
Để biết thêm suy nghĩ về điều này, xem câu hỏi này .
moi

3
Ok, vậy làm cách nào để xóa một trong những nguồn gốc này mà không xóa tất cả chúng?
Michael

@Michael Bạn có thể chỉnh sửa ./git/configtệp và xóa tệp url trong phần [nguồn gốc "từ xa]
Pini Cheyni

8
@ Michaelgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
Afrig Aminuddin

Tất cả các điều khiển từ xa có cùng lịch sử cam kết? Điều gì sẽ xảy ra nếu tôi muốn đẩy một số cam kết nhất định sang một điều khiển từ xa chứ không phải điều khiển khác
Qasim

44

Đây là một dự án mẫu với nhiều điều khiển từ xa, GitHub & GitLab:

  1. Thêm repo từ xa cho GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Thêm repo từ xa cho GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Bây giờ bạn có nhiều điều khiển từ xa trong dự án. Kiểm tra kỹ vớigit remote -v

    $ git remote -v
    github https://github.com/Company_Name/repository_name.git (fetch)
    github https://github.com/Company_Name/repository_name.git (push)
    gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
    gitlab https://gitlab.com/Company_Name/repository_name.git (push)
    
  4. Làm thế nào để bạn đẩy đến nhiều kho lưu trữ?

    $ git push github && git push gitlab
    

2
Sẽ không chỉ $ git pushđẩy đến tất cả các điều khiển từ xa?
Máy làm mát nước v2

Chúng tôi có vấn đề khi tôi cố gắng đẩy github sau đó tự động đẩy sang gitlab. Bạn có thể vui lòng giúp tôi không ? Tôi muốn đẩy từng nguồn gốc một.
Mitul Marsoniya

Làm thế nào để tôi làm việc với điều này nếu tôi có hai dự án trong gitlab, hai kho lưu trữ. Tôi nhận được mã từ một dự án sau đó đẩy nó sang dự án khác?
jack muzi

2

bạn có thể thêm một tài khoản từ xa khác vào kho lưu trữ của mình thông qua việc đặt tên khác thay vì nguồn gốc. Bạn có thể sử dụng tên như origin2. vì vậy lệnh git của bạn có thể được sửa đổi thành

git remote add origin2 https://github.com/Company_Name/repository_name.git

1
git remote add origin2 https://github.com/Company_Name/repository_name.git

và để sử dụng đẩy:

git push -u origin2 master

1
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git

Bây giờ bạn có 2 nguồn gốc.


1
Câu trả lời này hữu ích / tinh tế hơn những câu hỏi khác nhờ vào --pushtùy chọn.
Dmitri Zaitsev
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.