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


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.