Chuyển từ GitHub sang Bitbucket


160

Tôi đang làm việc trên một dự án dựa trên CakePHP , được lưu trữ trên GitHub . Dự án của tôi đang được lưu trữ trên Bitbucket . Cả hai đều sử dụng git . Về cơ bản tôi muốn tạo ra một 'ngã ba' (Tôi không biết nếu tôi đang sử dụng các điều khoản đúng, vì tôi là người mới đến git ) của CakePHP trong kho Bitbucket của tôi, để có thể nhận được các bản cập nhật mà không cần phải tải xuống tất cả các zip / tar CakePHP và thay thế thư mục, sau đó cam kết và đẩy, nhưng có thể bằng một 'hợp nhất' (?).


5
Xem stackoverflow.com/questions/1811730/ cấp để biết cách tiếp cận tốt với loại quy trình này.
Dolbz

@Dolbz có vẻ đúng những gì tôi cần, cảm ơn bạn!
entropid

Câu trả lời:


143

Hôm nay không thể gửi "yêu cầu kéo" trên các trang web khác nhau. Tôi đã thêm một yêu cầu tính năng cho việc này trong trình theo dõi vấn đề Bitbucket: # 3288 . Tôi đề nghị bạn thêm mình làm người theo dõi nếu bạn muốn theo dõi điều này.

Tuy nhiên, bạn vẫn có thể di chuyển nguồn từ GitHub sang Bitbucket mà không phải tải xuống bất kỳ tệp zip hoặc tarball nào. Bạn tạo một bản sao từ GitHub và đẩy lên Bitbucket:

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

Tôi đã tạo mg/cakephpnhư một kho lưu trữ Git trống trong Bitbucket trước tiên. Bằng cách đó, bạn có thể đẩy / kéo các thay đổi từ GitHub sang Bitbucket.


3
Sau đó, làm thế nào chúng ta có thể kéo từ thượng nguồn?
Ruchir Shukla

1
@RuchirShukla: cách tương tự, về cơ bản. Bạn phải di chuyển các cam kết thông qua máy của riêng bạn bằng cách kéo từ thượng nguồn của bạn. Sau đó, bạn đẩy nó sang trang lưu trữ khác, từ đó đồng bộ hóa cả hai.
Martin Geisler

4
Điều này làm việc rất tốt cho tôi ngoại trừ tôi cần phải cd cakephpở giữa hai lệnh. Rõ ràng cho những người không mới bắt đầu, vâng, nhưng những người mới bắt đầu có thể tự hỏi tại sao nó không hoạt động.
aaronbartell

Bạn có thể làm một video youtube về điều này để chứng minh? Tôi không thể sao chép nó. Tôi đã có thể thực hiện các hướng dẫn này nhưng khi tôi đẩy và cam kết, nó vẫn cố gắng đẩy nó đến chủ thay vì nhánh rẽ nhánh.
Sáp

Điều này không hoạt động như một fork. Chi nhánh và Thẻ KHÔNG được sao chép sang BitBucket.
Joel Karunungan

81

Quy trình công việc dưới đây thêm kho lưu trữ github dưới dạng một điều khiển từ xa mới được gọi syncvà từ xa bitbucket là origin. Nó cũng thêm một nhánh được gọi githubđể theo dõi kho lưu trữ github và một nhánh được gọi masterđể theo dõi kho lưu trữ bitbucket. Nó giả định rằng bạn có một kho lưu trữ bitbucket được gọi là "myreposeective" trống.

Thiết lập điều khiển từ xa

# 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

Thiết lập chi nhánh

# 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

Bây giờ bạn nên có githubchi nhánh địa phương theo dõi chi nhánh của github repo master. Và bạn nên có masterchi nhánh địa phương theo dõi repo bitbucket ( masterchi nhánh theo mặc định).

Điều này giúp bạn dễ dàng thực hiện thao tác kéo lên githubnhánh, sau đó hợp nhất các thay đổi đó lên masternhánh (mặc dù rebase được ưu tiên hơn hợp nhất) và sau đó bạn có thể đẩy masternhánh (sẽ đẩy nó lên bitbucket).


Điều này dường như không hoạt động nhưng đó là một ý tưởng tốt. Dù sao để sửa chữa nó để làm cho nó hoạt động?
bozdoz

Chi nhánh github cục bộ theo dõi chi nhánh github từ xa, sau đó bạn đẩy sang chủ bitbucket từ xa? Khi nào sự đẩy đến github xảy ra? @aleemb
bozdoz

1
Trong Git 2.2.1 --set-upstreamkhông được dùng nữa ... Nhưng điều này không hoạt động miễn là bạn tạo githubchi nhánh trước khi thử đặt repo ngược dòng.
Hoàng tử Ken

3
Thay vì làm - đặt ngược dòng làm: git fetchgit branch --track github sync/master
Beaudinn Greve

3
Tôi nghĩ những gì còn thiếu là git checkout githubgit checkout -b mastersau lệnh git nhánh. Bạn sẽ kết thúc với các nhánh đó ( git branch -a): github, master, remote / origin / master, remote / sync / master
Klemens Zleptnig

31

Nếu bạn muốn cập nhật repo của mình, hãy sử dụng hai điều khiển từ xa: Github ( upstream) và Bitbucket ( origin) như thế này:

# 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

Để lấy các bản cập nhật cho CakePHP từ Github:

git pull upstream master

Để đẩy các thay đổi mã của bạn sang Bitbucket:

git push origin master

Tôi nghĩ bạn có nghĩa là 'git clone mybitibucket / cakephp / cakephp `trong git lệnh đầu tiên , phải không? Đây là con đường để đi ....
ribamar

Điều này thật tuyệt! Cảm ơn rất nhiều! Được đánh giá cao
Aakanksha

Điều này cũng không hoạt động. Chi nhánh và Thẻ không được bao gồm trong Bitbucket.
Joel Karunungan

@JoelKarunungan Điểm tốt! Để đẩy tất cả mọi thứ, bao gồm các nhánh và thẻ, tôi nghĩ rằng điều này nên hoạt động : git push --all --mirror origin. Trả lời cập nhật.
Zubin

@Zubin bạn đã thử điều này? fatal: --all and --mirror are incompatible Ngoài ra: git pull upstream masterNém một lỗi nghiêm trọng. fatal: Couldn't find remote ref master
Joel Karunungan

15

Khi tạo một kho lưu trữ mới trong BitBucket, nhấp vào nút Import repositoryở trên cùng bên phải. Nhập url https được tìm thấy khi nhấp Clone or downloadvào Github cho kho lưu trữ mà bạn muốn rẽ nhánh.

Đặt tên cho kho lưu trữ của bạn, định cấu hình cài đặt quyền riêng tư của bạn và bạn sẽ đến đó!


1
Đó là nhân bản, không giả mạo, đó là điều khác biệt.
entropid

7
Tính năng này được gắn nhãn 'Nhập kho' trên Bitbucket, tính đến thời điểm hiện tại.
Pottok hoang dã

1
@entropid một ngã ba là một bản sao của repo gốc. Trong thế giới git, Forking == nhân bản
enorl76

@ enorl76 Không đặc biệt khi nói đến sử dụng chung.
Rig

2
@ enorl76 đúng là về mặt kỹ thuật. Nhưng ngã ba là một cách để giữ bản sao "kết nối" với kho lưu trữ ban đầu để có được cập nhật từ nó và cuối cùng thúc đẩy nó. Đây là nơi kết hợp các liên kết 'nguồn gốc' và 'ngược dòng' đóng vai trò cơ bản. Github và Bitbucket sau đó đã xây dựng tất cả một bộ công cụ xung quanh thượng nguồn để làm cho fork trở nên hiệu quả và thân thiện hơn, như điều "yêu cầu đẩy" :)
Dan Niero

1

Tôi đã nhận thấy rằng vì câu trả lời của @Martin Geisler, Bitbucket đã kích hoạt một tính năng để nhập kho từ github.com

Tôi đã có thể nhập thành công một repo riêng từ github.com vào một repo riêng trên bitbucket.org

Dưới đây là các bước :

  1. Nhấp vào nút Tạo và chọn Kho lưu trữ ('+'> Kho lưu trữ)
  2. Bây giờ, thay vì tạo một kho lưu trữ mới hãy chọn một kho lưu trữ nhập từ góc trên cùng bên phải của phương thức bật lên.
  3. điền URL github repo của bạn và thông tin xác thực của bạn vào phương thức mới để nhập kho lưu trữ.
  4. Đó là nó. Mọi thứ nhập vào bitbucket từ github một cách trơn tru.

Lưu ý liên kết kho lưu trữ nhập ở góc trên bên phải của ảnh chụp màn hình


0

Tôi đoán bạn chỉ muốn dễ dàng tải xuống kho lưu trữ với dự án của bạn ... và rằng bạn sẽ KHÔNG đóng góp cakePHP, đúng không?

nếu vậy, bạn chỉ cần thêm một tham chiếu bên ngoài vào repo của bạn.

SVN: bên ngoài tương đương trong GIT?

Và sau này, ngay cả khi bạn muốn đóng góp cho cakePHP, bạn chỉ có thể làm như vậy ở repo ban đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.