Форкинг из GitHub в Bitbucket


161

Я работаю над проектом, основанным на CakePHP , который размещен на GitHub . Мой проект размещен на Bitbucket . Они оба используют git . По сути, я хотел бы создать «форк» (я не знаю, правильно ли я использую термины, поскольку я новичок в git ) CakePHP в моем хранилище Bitbucket, чтобы иметь возможность получать обновления без необходимости загружать все CakePHP zip / tar и заменять папку, затем фиксировать и пушить, но, возможно, с «слиянием» (?).


5
См. Stackoverflow.com/questions/1811730/… для хорошего подхода к этому виду рабочего процесса.
— Долбз

@Dolbz кажется правильным, что мне нужно, спасибо!
— энтропид

Ответы:


144

Сегодня невозможно отправить «запрос извлечения» на разные сайты. Я добавил запрос функции для этого в трекере проблем Bitbucket: # 3288 . Я предлагаю вам добавить себя в качестве последователя, если вы хотите отслеживать это.

Тем не менее, вы все равно можете переместить исходный код из GitHub в Bitbucket без необходимости загружать zip-файлы или архивы. Вы делаете клон из GitHub и отправляете в Bitbucket:

$ git clone https://github.com/cakephp/cakephp
$ cd cakephp
$ git push git@bitbucket.org:mg/cakephp.git master

mg/cakephpСначала я создал пустой Bitit-репозиторий в Bitbucket. Таким образом, вы можете перемещать / извлекать наборы изменений из GitHub в Bitbucket.


3
Тогда как мы можем вытащить из верховья?
— Ручир Шукла

1
@RuchirShukla: так же, в основном. Вы должны перемещать коммиты через свою собственную машину, вытягивая из своего апстрима. Затем вы отправляете это на другой хостинг, тем самым синхронизируя их.
— Мартин Гейслер

4
Это отлично сработало для меня, за исключением того, что мне нужно было cd cakephpмежду двумя командами. Да, конечно, для новичков, но новички могут задаться вопросом, почему это не работает.
— aaronbartell

Можете ли вы сделать видео на YouTube для демонстрации этого? Я не мог повторить это. Я смог выполнить эти инструкции, но когда я нажимал и фиксировал, он все еще пытался передать его мастеру вместо разветвленной ветви.
— воск

Это не работает как fork. Ветви и теги НЕ копируются в BitBucket.
— Джоэл Карунунган

81

Приведенный ниже рабочий процесс добавляет репозиторий github в качестве нового удаленного вызываемого syncи битбакетного удаленного как origin. Он также добавляет ветку, githubкоторая masterвызывается для отслеживания хранилища GitHub, и ветку, которая вызывается для отслеживания хранилища Bitbucket. Предполагается, что у вас есть хранилище bitbucket под названием «myrepository», которое пусто.

Настройка пультов

# setup local repo
mkdir myrepository
cd myrepository
git init

# add  bitbucket remote as "origin"
git remote add origin ssh://git@bitbucket.org/aleemb/myrepository.git

# add github remote as "sync"
git remote add sync https://github.com/aleemb/laravel.git

# verify remotes
git remote -v
# should show fetch/push for "origin" and "sync" remotes

Настройка веток

# first pull from github using the "sync" remote
git pull sync

# setup local "github" branch to track "sync" remote's "master" branch
git branch --track github sync/master

# switch to the new branch
git checkout github

# create new master branched out of github branch
git checkout -b master

# push local "master" branch to "origin" remote (bitbucket)
git push -u origin master

Теперь у вас должна быть локальная githubветка, отслеживающая ветку репозитория github master. И у вас должна быть локальная masterветка, отслеживающая репозиторий bitbucket ( masterветка по умолчанию).

Это позволяет легко выполнить githubветвление, затем объединить эти изменения с masterветкой (хотя перебазировать предпочтительнее слияния), а затем вы можете masterперенести ветку (переместит ее в bitbucket).


Это не похоже на работу, но это хорошая идея. В любом случае, чтобы исправить это, чтобы это работало?
— Боздоз

Локальная ветка github отслеживает удаленную ветку master github, затем вы отправляете на удаленный мастер bitbucket? Когда происходит нажатие на github? @aleemb
— bozdoz

1
В Git 2.2.1 --set-upstreamустарела ... Но это работает, пока вы создаете githubветку, прежде чем пытаться установить репозиторий в восходящем потоке.
— Кен Принс

3
Вместо того, чтобы делать --set-upstream, делайте: git fetchиgit branch --track github sync/master
— Боден Грев

3
Я думаю, что не хватает git checkout githubи git checkout -b masterпосле команды git branch. Вы получите следующие ветки ( git branch -a): github, master, remotes / origin / master, remotes / sync / master
— Klemens Zleptnig

31

Если вы хотите поддерживать репо в актуальном состоянии, используйте два пульта: Github ( upstream) и Bitbucket ( origin), например:

# Clone original CakePHP source code from Github
git clone --mirror https://github.com/cakephp/cakephp
cd cakephp
# Rename remote from `origin` to `upstream`
git remote rename origin upstream
# Add your Bitbucket repo (this is where your code will be pushed)
git remote add origin https://bitbucket/your/repo.git
# Push everything to Bitbucket
git push --mirror origin

Чтобы получить обновления для CakePHP из Github:

git pull upstream master

Чтобы отправить изменения кода в Bitbucket:

git push origin master

Я думаю, что вы имели в виду `git clone mybitibucket / cakephp / cakephp` в первой git команде, верно? Это путь ...
— ribamar

Это просто замечательно! Благодаря тонну! Очень признателен
— Aakanksha

Это тоже не работает. Ветви и теги не включены в Bitbucket.
— Джоэл Карунунган

@JoelKarunungan Хорошая мысль! Для того, чтобы нажимное все, в том числе филиалов и тегов, я думаю , что это должно работать: git push --all --mirror origin. Ответ обновлен.
— Зубин

@ Зубин, ты пробовал это? fatal: --all and --mirror are incompatible Также: git pull upstream masterвыдает фатальную ошибку. fatal: Couldn't find remote ref master
— Джоэл Карунунган

14

При создании нового хранилища в BitBucket, нажмите кнопку Import repositoryв правом верхнем углу. Введите URL https, найденный при нажатии Clone or downloadна Github для хранилища, которое вы хотите разветвить.

Дайте вашему хранилищу имя, настройте параметры конфиденциальности, и все!


1
Это клонирование, а не разветвление, а это совсем другое.
— энтропид

7
На данный момент эта функция помечена как «Импортировать хранилище» в Bitbucket.
— Дикий Потток

1
@entropid a fork - клон оригинального репо. В мире мерзавцев, Форкинг == клонирование
— enorl76

@ enorl76 Не особенно, когда дело доходит до общего использования.
— Рог

2
@ enorl76 Да, технически это так. Но fork - это способ сохранить клон «подключенным» к исходному репозиторию, чтобы получать от него обновления и в конечном итоге выдвигать его. Именно здесь сочетание исходных и восходящих связей играет основополагающую роль. Затем Github и Bitbucket собрали весь набор инструментов для апстрима, чтобы сделать форк более продуктивным и дружественным, например, «push-запрос» :)
— Дэн Ньеро,

0

Я предполагаю, что вы просто хотите легко загрузить репозиторий вместе с вашим проектом ... и что вы НЕ будете вносить свой вклад в cakePHP, верно?

если это так, вам просто нужно добавить внешнюю ссылку на ваш репо.

SVN: внешний эквивалент в GIT?

И позже, даже если вы хотите внести свой вклад в cakePHP, вы можете просто сделать это в оригинальном репо.


0

Я заметил, что после ответа @Martin Geisler Bitbucket включил функцию импорта репозиториев с github.com.

Мне удалось успешно импортировать частное репо с github.com в частное репо на bitbucket.org

Вот шаги :

  1. Нажмите кнопку «Создать» и выберите «Репозиторий» («+»> «Репозиторий»).
  2. Теперь вместо создания нового хранилища выберите хранилище импорта в правом верхнем углу всплывающего окна.
  3. введите новый URL-адрес вашего репозитория github и свои учетные данные для аутентификации в новом модале для импорта репозитория.
  4. Вот и все. Все импортируется в bitbucket из github без проблем.

Обратите внимание на ссылку на репозиторий импорта в правом верхнем углу экрана.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.