Перехід від GitHub до Bitbucket


161

Я працюю над проектом на основі CakePHP , який розміщений на GitHub . Мій проект розміщується на Bitbucket . Вони обидва використовують git . В основному я хотів би створити "вилку" (я не знаю, чи використовую я правильні умови, оскільки я новак в git ) CakePHP в моєму сховищі Bitbucket, щоб мати можливість отримувати оновлення без необхідності завантажувати всі ZIP-каталог CakePHP і замінювати папку, потім виконувати і натискати, але, можливо, з "об'єднанням" (?).


5
Дивіться stackoverflow.com/questions/1811730/… про хороший підхід до такого типу робочого процесу.
Dolbz

@Dolbz здається правильно, що мені потрібно, дякую!
entropid

Відповіді:


144

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

Однак ви все одно можете перемістити джерело з GitHub до Bitbucket, не завантажуючи жодних поштових файлів або тарболів. Ви робите клон з GitHub і натискаєте на Bitbucket:

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

mg/cakephpСпершу я створив порожнє сховище Git у Bitbucket. Таким чином, ви можете натискати / тягнути набори змін із GitHub до Bitbucket.


3
Тоді Як ми можемо витягнути з верхнього течії?
Ручір Шукла

1
@RuchirShukla: так само, в основному. Ви повинні переміщати комітети через власну машину, потягнувши з верхнього течії. Потім ви натискаєте це на інший сайт хостингу, тим самим синхронізуючи їх.
Мартін Гейслер

4
Це спрацювало для мене чудово, за винятком того, що мені потрібно було cd cakephpміж двома командами. Так, очевидно, для початківців, але початківцям може бути цікаво, чому це не працює.
aaronbartell

Чи можете ви зробити відео на цьому YouTube, щоб продемонструвати? Я не міг його повторити. Я зміг виконати ці вказівки, але коли я натискаю і виконую, я все ще намагаюся підштовхнути його до майстра замість роздвоєної гілки.
Віск

Це не працює як fork. Гілки та теги НЕ копіюються в BitBucket.
Joel Karunungan

81

Наведений нижче робочий процес додає сховище github у вигляді нового віддаленого syncвиклику та віддаленого Bitbucket як origin. Він також додає гілку, яка називається githubдля відстеження сховища github, і гілку, яку називаютьmaster для відстеження сховища бітбукета. Він передбачає, що у вас є сховище бітбукетів під назвою "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 repo master. І у вас повинна бути локальна masterгілка, яка відстежує ретобу бітбукета ( masterгілка за замовчуванням).

Це дозволяє легко здійснити тягнення на githubгілці, потім об'єднати ці зміни на masterгілку (хоч перезавантажити перевагу над злиттям), а потім ти можеш натиснути masterгілку (підштовхнеш її до бітбукета).


Це, здається, не працює, але це гарна ідея. Все-таки виправити це, щоб він працював?
bozdoz

Місцева гілка github відстежує віддалену головну гілку github, потім ви натискаєте на віддалений майстер bitbucket? Коли відбувається поштовх до github? @aleemb
bozdoz

1
У Git 2.2.1 --set-upstreamзастаріло ... Але це працює до тих пір, поки ви створите githubгілку, перш ніж намагатися встановити репо-версію за потоком.
Кен Принс

3
Замість того щоб робити --set-upstream do: git fetchіgit branch --track github sync/master
Бодін Грев

3
Думаю, чого не вистачає - це git checkout githubі git checkout -b masterпісля команди гіти git. Ви закінчите з цими гілками ( git branch -a): github, master, Remotes / origin / master, remote / 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

Це просто чудово! Дякую тонну! Дуже вдячний
Аааккша

Це також не працює. Гілки та теги не включаються в Bitbucket.
Джоел Карунунган

@JoelKarunungan Добрий момент! Для того, щоб нажимное все, в тому числі філій та тегів, я думаю , що це повинно працювати: git push --all --mirror origin. Відповідь оновлено.
Зубін

@Zubin ти це пробував? fatal: --all and --mirror are incompatible Також: git pull upstream masterкидає фатальну помилку. fatal: Couldn't find remote ref master
Joel Karunungan

14

Створюючи нове сховище в BitBucket, натисніть кнопку Import repositoryвгорі праворуч. Введіть URL-адресу https, знайдену при натисканніClone or download на Github для сховища, яке ви хочете роздрібнити.

Дайте ім’я своєму сховищу, налаштуйте налаштування конфіденційності, і там ви йдете!


1
Це клонування, а не розпушування, що різна річ.
ентропід

7
Ця функція в Bitbucket позначена як "Імпорт сховища".
Дикий Поток

1
@entropid fork - це клон оригінального репо. У світі git Forking == клонування
enorl76

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

2
@ enorl76 так, технічно це так. Але fork - це спосіб тримати клон «підключеним» до оригінального сховища, щоб отримати оновлення від нього та врешті-решт натиснути на нього. Саме тут поєднання принципів "походження" та "вище за течією" відіграють фундаментальну роль. Потім Github і Bitbucket побудували весь набір інструментів навколо верхнього течії, щоб зробити вилки більш продуктивними та дружніми, як, наприклад, річ "push push" :)
Dan Niero

0

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

якщо так, то вам просто потрібно додати зовнішнє посилання на ваше репо.

SVN: еквівалент зовнішніх даних у GIT?

І пізніше, навіть якщо ви хочете внести свій внесок у cakePHP, ви можете це зробити на початковому репо-файні просто чудово.


0

Я помітив, що з моменту відповіді @Martin Geisler, ввімкнув функцію імпорту репозиторіїв з github.com

Я вдалося імпортувати приватне репо з github.com у приватне репо на bitbucket.org

Ось такі кроки :

  1. Натисніть кнопку Створити та виберіть Репозиторій ('+'> Репозиторій)
  2. Тепер замість створення нового сховища виберіть імпорту у верхньому правому куті модального модуля, що спливає.
  3. заповніть URL-адресу вашого github repo та свої автентифікаційні дані для нового способу імпорту сховища.
  4. Це воно. Все імпортується в бітбукет з github.

Зверніть увагу на посилання на імпорт сховища в правому верхньому куті екрана

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.