แยกจาก GitHub ถึง Bitbucket


161

ผมทำงานในโครงการที่อยู่บนพื้นฐานของCakePHP , ที่โฮสต์บนGitHub โครงการของฉันจะถูกจัดขึ้นในBitbucket ทั้งสองของพวกเขาใช้คอมไพล์ โดยทั่วไปฉันต้องการสร้าง 'fork' (ฉันไม่รู้ว่าฉันใช้คำศัพท์ที่ถูกต้องหรือไม่เพราะฉันใหม่กับคอมไพล์ ) ของ CakePHP ในที่เก็บ Bitbucket ของฉันเพื่อที่จะได้รับการอัปเดต โดยไม่จำเป็นต้องดาวน์โหลด CakePHP zip / tar และแทนที่โฟลเดอร์จากนั้นคอมมิทและพุช แต่อาจใช้ 'merge' (?)


5
ดูstackoverflow.com/questions/1811730/…สำหรับวิธีการที่ดีสำหรับเวิร์กโฟลว์ประเภทนี้
Dolbz

@Dolbz ดูเหมือนว่าสิ่งที่ฉันต้องการขอบคุณ!
เอนโทรปี

คำตอบ:


144

ไม่สามารถส่ง "คำขอการดึง" ข้ามไซต์ต่าง ๆ ได้ในวันนี้ ฉันได้เพิ่มคำขอคุณสมบัติสำหรับเรื่องนี้ในฉบับติดตาม Bitbucket: # 3288 ฉันขอแนะนำให้คุณเพิ่มตัวเองเป็นผู้ติดตามถ้าคุณต้องการติดตามสิ่งนี้

อย่างไรก็ตามคุณยังสามารถย้ายซอร์สจาก GitHub ไปยัง Bitbucket ได้โดยไม่ต้องดาวน์โหลดไฟล์ zip หรือ tarball คุณสร้างโคลนจาก 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
แล้วเราจะดึงจากต้นน้ำได้อย่างไร
Ruchir Shukla

1
@RuchirShukla: วิธีเดียวกันโดยทั่วไป คุณต้องย้ายการกระทำผ่านเครื่องของคุณเองโดยดึงจากต้นน้ำของคุณ จากนั้นคุณผลักไปที่เว็บไซต์โฮสต์อื่น ๆ ดังนั้นการซิงโครไนซ์ทั้งสอง
Martin Geisler

4
สิ่งนี้ใช้งานได้ดีสำหรับฉันยกเว้นฉันต้องcd cakephpอยู่ระหว่างสองคำสั่ง ชัดเจนสำหรับผู้ที่ไม่ใช่ผู้เริ่มต้นใช่ แต่ผู้เริ่มต้นอาจสงสัยว่าทำไมมันไม่ทำงาน
aaronbartell

คุณสามารถทำวิดีโอ youtube ของสิ่งนี้เพื่อสาธิตได้หรือไม่? ฉันทำซ้ำไม่ได้ ฉันสามารถที่จะทำตามคำแนะนำเหล่านี้ได้ แต่เมื่อฉันผลักและส่งมันก็ยังพยายามที่จะผลักดันมันไปยังต้นแบบแทนที่จะเป็นกิ่งก้านสาขา
ขี้ผึ้ง

forkนี้ไม่ได้ทำงานเป็น สาขาและแท็กจะไม่ถูกคัดลอกไปยัง BitBucket
Joel Karunungan

81

ขั้นตอนการทำงานด้านล่างเพิ่มพื้นที่เก็บข้อมูล GitHub เป็น AA ระยะไกลใหม่ที่เรียกว่าsyncและ bitbucket originระยะไกลเป็น นอกจากนี้ยังเพิ่มสาขาที่เรียกว่าgithubเพื่อติดตามพื้นที่เก็บข้อมูล github และสาขาที่เรียกว่าmasterเพื่อติดตามพื้นที่เก็บข้อมูล 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ติดตาม repo GitHub สาขาmasterสาขา และคุณควรจะมีmasterสาขาท้องถิ่นติดตาม repo bitbucket ( masterสาขาโดยค่าเริ่มต้น)

สิ่งนี้ทำให้ง่ายต่อการดึงgithubสาขาจากนั้นรวมการเปลี่ยนแปลงเหล่านั้นเข้ากับmasterสาขา (ต้องการmasterให้รีบูตมากกว่าการรวม) จากนั้นคุณสามารถกดสาขา (จะดันมันเป็นบิต)


ดูเหมือนจะใช้งานไม่ได้ แต่เป็นความคิดที่ดี ยังไงก็ตามที่จะแก้ไขให้มันทำงานได้
bozdoz

สาขา github ท้องถิ่นติดตามสาขาต้นแบบ github ระยะไกลจากนั้นคุณผลักดันไปยังต้นแบบ bitbucket ระยะไกล? เมื่อไหร่ที่การพุชไปยัง GitHub เกิดขึ้น? @aleemb
bozdoz

1
ใน Git 2.2.1 --set-upstreamเลิกใช้แล้ว ... แต่นี่จะใช้ได้ตราบใดที่คุณสร้างgithubสาขาก่อนที่จะพยายามตั้งค่า repo อัปสตรีม
Ken Prince

3
แทนที่จะทำgit fetchgit branch --track github sync/master
เซ็ตอัพสตรีม

3
ฉันคิดว่าสิ่งที่ขาดหายไปคือgit checkout githubและgit checkout -b masterหลังจากคำสั่งสาขา git คุณจะจบลงด้วยสาขาเหล่านั้น ( git branch -a): GitHub, Master, รีโมท / แหล่งที่มา / ต้นแบบ, รีโมท / ซิงค์ / ต้นแบบ
Klemens Zleptnig

31

หากคุณต้องการให้ repo ของคุณทันสมัยอยู่เสมอให้ใช้รีโมทสองอัน: 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
Joel Karunungan

@ JoelKarunungan จุดที่ดี! git push --all --mirror originที่จะผลักดันทุกอย่างรวมถึงสาขาและแท็กผมคิดว่านี่ควรจะทำงาน: อัปเดตคำตอบแล้ว
Zubin

@Zubin คุณลองนี่ไหม fatal: --all and --mirror are incompatible ยัง: git pull upstream masterโยนข้อผิดพลาดร้ายแรง fatal: Couldn't find remote ref master
Joel Karunungan

14

เมื่อสร้างที่เก็บใหม่ใน BitBucket ให้คลิกที่ปุ่มImport repositoryด้านบนขวา ป้อน https URL ที่พบเมื่อคลิกClone or downloadใน Github สำหรับที่เก็บที่คุณต้องการแยก

ตั้งชื่อให้กับที่เก็บของคุณกำหนดค่าการตั้งค่าความเป็นส่วนตัวและไปที่นั่น!


1
การโคลนนิ่งไม่ใช่การฟอร์กซึ่งแตกต่างกัน
เอนโทร

7
คุณลักษณะนี้มีชื่อว่า 'นำเข้าที่เก็บข้อมูล' บน Bitbucket ณ ตอนนี้
Wild Pottok

1
@entropid a fork เป็นโคลนของ repo ดั้งเดิม ในโลกคอมไพล์
Forking

@ enorl76 ไม่เฉพาะเมื่อพูดถึงการใช้งานทั่วไป
Rig

2
@ enorl76 ใช่เทคนิคมันเป็น แต่ทางแยกเป็นวิธีที่จะทำให้โคลน "เชื่อมต่อ" กับที่เก็บต้นฉบับเพื่อรับการปรับปรุงจากมันและในที่สุดก็ผลักดันมัน ที่นี่คือการรวมกันของ 'ต้นกำเนิด' และลิงก์ 'ต้นน้ำ' มาเพื่อมีบทบาทพื้นฐาน Github และ Bitbucket สร้างชุดเครื่องมือทั้งหมดขึ้นที่ต้นน้ำเพื่อสร้างทางแยกที่มีประสิทธิภาพและเป็นมิตรมากขึ้นเช่น "ขอพุช" สิ่ง :)
Dan Niero

0

ฉันเดาว่าคุณแค่ต้องการดาวน์โหลดที่เก็บกับโปรเจ็กต์ของคุณอย่างง่ายดาย ... และคุณจะไม่สนับสนุน CakePHP ใช่ไหม?

ถ้าเป็นเช่นนั้นคุณเพียงแค่ต้องเพิ่มการอ้างอิงภายนอกไปยัง repo ของคุณ

SVN: externals เทียบเท่าใน GIT?

และต่อมาแม้ว่าคุณต้องการมีส่วนร่วมกับเค้ก PHP คุณสามารถทำได้ที่ repo ดั้งเดิมได้ดี


0

ฉันสังเกตว่าตั้งแต่คำตอบของ @Martin Geisler Bitbucket ได้เปิดใช้งานคุณสมบัติเพื่อนำเข้าที่เก็บจาก github.com

ฉันสามารถนำเข้า repo ส่วนตัวจาก github.com ไปเป็น repo ส่วนตัวบน bitbucket.org ได้สำเร็จ

นี่คือขั้นตอน :

  1. คลิกที่ปุ่มสร้างและเลือกพื้นที่เก็บข้อมูล ('+'> พื้นที่เก็บข้อมูล)
  2. ตอนนี้แทนที่จะสร้างที่เก็บใหม่ให้เลือกที่เก็บข้อมูลการนำเข้าจากมุมด้านขวาบนของคำกริยาที่ปรากฏขึ้น
  3. กรอก URL ของ gitub repo ของคุณและข้อมูลรับรองการตรวจสอบสิทธิ์ของคุณใน modal ใหม่สำหรับการนำเข้าที่เก็บ
  4. แค่นั้นแหละ. ทุกอย่างนำเข้าสู่ bitbucket จาก GitHub อย่างราบรื่น

หมายเหตุลิงค์ที่เก็บข้อมูลนำเข้าที่มุมบนขวาของสกรีนช็อต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.