Перехід від 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.