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

161

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

entropid
источник
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).

aleemb
источник
Это не похоже на работу, но это хорошая идея. В любом случае, чтобы исправить это, чтобы это работало?
Боздоз
Локальная ветка 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 для хранилища, которое вы хотите разветвить.

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

shmuli
источник
1
Это клонирование, а не разветвление, а это совсем другое.
энтропид
7
На данный момент эта функция помечена как «Импортировать хранилище» в Bitbucket.
Дикий Потток
1
@entropid a fork - клон оригинального репо. В мире мерзавцев, Форкинг == клонирование
enorl76
@ enorl76 Не особенно, когда дело доходит до общего использования.
Рог
2
@ enorl76 Да, технически это так. Но fork - это способ сохранить клон «подключенным» к исходному репозиторию, чтобы получать от него обновления и в конечном итоге выдвигать его. Именно здесь сочетание исходных и восходящих связей играет основополагающую роль. Затем Github и Bitbucket собрали весь набор инструментов для апстрима, чтобы сделать форк более продуктивным и дружественным, например, «push-запрос» :)
Дэн Ньеро,
0

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

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

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

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

GCB
источник
0

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

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

Вот шаги :

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

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

de1123bu58nk
источник