Чи може проект мати багато джерел?


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детективи

Відповіді:


275

Ви можете мати багато пультів дистанційного керування , як ви хочете, але ви тільки можете мати один пульт під назвою «Походження». Віддалений під назвою "походження" жодним чином не є особливим, за винятком того, що це віддалений за замовчуванням, створений 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

Наведемо кілька практичних прикладів, чому ви хотіли б це зробити? Чому б у вас один каталог був вказаний на кілька сховищ? У кожному сховищі зазвичай є власний виділений dir
dspacejs

4
@mightyspaj Насправді всі, хто розпоряджається на Heroku, мають віддалений дзвінок originта віддалений дзвінок heroku.
мегагар

@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 у розділі [віддалене "походження"
Pini Cheyni

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

Чи повинні всі дистанційні користувачі мати однакову історію фіксації? Що робити, якщо я хочу натиснути певні зобов’язання одному віддаленому, а не іншому
Касим

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натисніть на всі дистанційні?
Водоохолоджувач v2

У нас є проблема, коли я намагаюся натиснути github, а потім автоматично натиснути на gitlab. Чи можете ви мені допомогти? Я хочу натиснути один на одне походження.
Мітул Марсонія

як мені працювати з цим, якщо у мене є два проекти в gitlab, два сховища. я отримую код від одного проекту, а потім підштовхую його до іншого проекту?
muzi jack

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.