Czy projekt może mieć wiele źródeł?


188

Czy projekt może mieć dwa (lub więcej) „początki” w Git?

Chciałbym wcisnąć jeden projekt zarówno github i Heroku serwerze.

W szczególności ten błąd pojawia się podczas dodawania repozytorium github:

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

8
Możesz mieć tyle zdalnych repozytoriów, ile chcesz, ale musisz nadać im różne nazwy.
Felix Kling

Nazwa repozytorium jest w tym przypadku inna. Czy słowo „pochodzenie” to nazwa, którą można zmienić?
Chris Dutrow

4
Tak, git remote rename <old> <new>: linux.die.net/man/1/git-remote . Ale możesz też nazwać repozytorium Github inaczej ...
Felix Kling


I czy jest możliwe, aby jeden z pilotów był domyślny, więc nie jestem proszony o jawne wpisywanie nazwy tego pilota za każdym razem, gdy naciskam?
detektywi

Odpowiedzi:


275

Możesz mieć tyle pilotów, ile chcesz, ale możesz mieć tylko jednego pilota o nazwie „pochodzenie”. Pilot o nazwie „origin” nie jest w żaden sposób wyjątkowy, poza tym, że jest domyślnym pilotem utworzonym przez Git podczas klonowania istniejącego repozytorium. Możesz skonfigurować drugiego pilota, push do / pull z tego pilota i skonfigurować niektóre gałęzie do śledzenia gałęzi z tego pilota zamiast źródła.

Zamiast tego spróbuj dodać pilota o nazwie „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
Jak wskazuje odpowiedź z najwyższą liczbą głosów na pytanie, które może się powielać - pilot może odnosić się do wielu repozytoriów. Dlatego też można wcisnąć do jednego pilota i aktualizację dwóch lub więcej repozytoriów, nie wiadomo, czy to celem PO jest jednak.
AD7six,

Jakie są jednak praktyczne przykłady tego, dlaczego chcesz to zrobić? Dlaczego miałbyś mieć jeden katalog wskazujący na kilka repozytoriów? Każde repozytorium zwykle ma swój własny
katalog

4
@mightyspaj Prawie każdy, kto wdraża się do Heroku, ma pilota o nazwie origini pilot o nazwie heroku.
meagar

@mightyspaj, Lub jeśli Twój zespół korzysta z widelców i czasami chcesz uzyskać do nich dostęp. Robimy to w naszym zespole pracującym z zespołami w różnych UTC, aby po zatwierdzeniu PR, moglibyśmy bazować / przekazywać w tamtym imieniu za pomocą widelca i moglibyśmy scalić kod teraz, a nie jutro).
Benoit Drapeau,

Czy istnieje sposób na przeniesienie wszystkich lokalnych oddziałów jednocześnie na nowego pilota?
Tanasis

89

Dodatkowa uwaga dla każdego, kto natknie się na to pytanie później, możliwe jest, aby pochodzenie było wysyłane na więcej niż jeden serwer repozytorium git jednocześnie.

Można to osiągnąć za pomocą następującego polecenia, aby dodać kolejny adres URL do zdalnego źródła.

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

8
Aby uzyskać więcej przemyśleń na ten temat, zobacz to pytanie .
moi

3
Ok, więc jak mogę usunąć jedno z tych źródeł bez usuwania ich wszystkich?
Michael

@Michael Możesz edytować ./git/configplik i usunąć plik url w sekcji [zdalne „pochodzenie”]
Pini Cheyni

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

Czy wszystkie piloty muszą mieć tę samą historię zatwierdzania? Co jeśli chcę zepchnąć pewne zmiany do jednego pilota, a nie drugiego
Qasim

44

Oto przykładowy projekt z wieloma pilotami, GitHub i GitLab:

  1. Dodaj zdalne repozytorium dla GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Dodaj zdalne repozytorium dla GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Teraz masz wiele pilotów w projekcie. Podwójne sprawdzenie za pomocągit 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. Jak wypychasz do wielu repozytoriów?

    $ git push github && git push gitlab
    

2
Nie będzie $ git pushnaciskał tylko na wszystkie piloty?
Water Cooler v2

Mamy problem, gdy próbuję wcisnąć github, a następnie automatycznie wcisnąć do gitlab. Czy możesz mi pomóc? Chcę pchać jeden po drugim.
Mitul Marsoniya

jak mam z tym pracować, jeśli mam dwa projekty w gitlab, dwa repozytoria. otrzymuję kod z jednego projektu, a następnie przekazuję go do drugiego projektu?
muzi jack

2

możesz dodać kolejne zdalne konto do swojego repozytorium, podając inną nazwę zamiast pochodzenia. Możesz użyć nazwy takiej jak origin2. więc twoje polecenie git można zmodyfikować jako

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

i do użytku push:

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

Teraz masz 2 źródła.


1
Ta --pushopcja jest bardziej pomocna / dopracowana niż inne dzięki tej opcji.
Dmitri Zaitsev
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.