Может ли проект иметь несколько источников?


188

Может ли проект иметь два (или более) «источника» в Git?

Я хотел бы перенести один проект на github и сервер Heroku .

В частности, эта ошибка появляется при добавлении репозитория github:

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

8
У вас может быть столько удаленных репозиториев, сколько вы хотите, но вы должны дать им разные имена.
— Феликс Клинг

Имя хранилища в этом случае другое. Является ли слово «происхождение» именем, которое можно изменить?
— Крис Датроу

4
Да, git remote rename <old> <new>: linux.die.net/man/1/git-remote . Но вы также можете назвать хранилище Github по-другому ...
— Феликс Клинг


И возможно ли сделать один из пультов по умолчанию, чтобы меня не просили явно писать имя этого пульта каждый раз, когда я нажимаю?
— 40 детективов

Ответы:


276

У вас может быть столько пультов, сколько вы хотите, но у вас может быть только один пульт с именем «origin». Удаленный, называемый "origin", не является чем-то особенным, за исключением того, что он является удаленным по умолчанию, созданным Git при клонировании существующего репозитория. Вы можете настроить второй пульт, нажать / вытащить этот пульт и настроить некоторые ветви для отслеживания ветвей с этого пульта вместо источника.

Попробуйте вместо этого добавить пульт под названием "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
Как указано в ответе с наибольшим количеством голосов за вопрос, который возможно дублирует этот - удаленный может ссылаться на несколько хранилищ. Поэтому вы можете подключиться к одному удаленному устройству и обновить два или более репозитория, хотя не ясно, является ли это целью ОП.
— AD7six

Каковы некоторые практические примеры того, почему вы хотели бы сделать это, хотя? Зачем вам указывать один каталог на несколько репозиториев? Каждый репозиторий обычно имеет свой собственный
— каталог

4
@mightyspaj Практически каждый, кто развертывается в Heroku, имеет удаленный вызов originи удаленный вызов heroku.
— meagar

@mightyspaj, или, если ваша команда использует вилки, и вы иногда хотите получить к ним доступ. Мы делаем это в нашей команде, работая с командами в разных UTC, чтобы, когда мы утверждаем PR, мы могли перебазировать / выдвигать от имени, используя там fork, и можем объединять код сейчас, а не завтра).
— Бенуа Драпо

Есть ли способ перенести все локальные ветви сразу на новый пульт?
— Танасис

89

Как примечание для любого, кто позже натолкнется на этот вопрос, можно получить исходный пуш на более чем один сервер git-репозитория одновременно.

Это можно сделать с помощью следующей команды, чтобы добавить еще один URL-адрес в удаленный источник.

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

8
Для большего количества размышлений об этом, смотрите этот вопрос .
— Мой

3
Итак, как мне удалить один из этих источников, не удаляя их все?
— Майкл

@Michael Вы можете отредактировать ./git/configфайл и удалить файл url в разделе [remote "origin"]
— Pini Cheyni

8
@ Майклgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
— Ариг Аминуддин

Должны ли все пульты иметь одинаковую историю коммитов? Что, если я хочу выдвинуть определенные коммиты на один пульт, а не на другой
— Касим

44

Вот пример проекта с несколькими пультами, GitHub и GitLab:

  1. Добавить удаленное репо для GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Добавить удаленное репо для GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Теперь у вас есть несколько пультов в проекте. Двойная проверка с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. Как вы продвигаетесь к нескольким репозиториям?

    $ git push github && git push gitlab
    

2
Не будет ли просто $ git pushнажать на все пульты?
— Water Cooler v2

У нас есть проблема, когда я пытаюсь нажать github, а затем автоматически нажать gitlab. Можете ли вы помочь мне? Я хочу толкать один за другим происхождения.
— Mitul Marsoniya

Как мне работать с этим, если у меня есть два проекта в Gitlab, два хранилища. получить код из одного проекта, а затем отправить его в другой проект?
— Музи Джек

2

Вы можете добавить другую удаленную учетную запись в свой репозиторий, указав другое имя вместо источника. Вы можете использовать имя, например origin2. так что ваша команда git может быть изменена как

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

и для использования толчка:

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

Теперь у вас есть 2 происхождения.


1
Этот ответ более полезен / уточнен, чем другие, благодаря этой --pushопции.
— Дмитрий Зайцев
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.