2010-02-09 31 views
128

Tôi có một chi nhánh mà tôi muốn chuyển sang một kho lưu trữ Git riêng biệt, và lý tưởng là giữ lịch sử của nhánh đó trong tiến trình. Cho đến nay tôi đã xem xét git filter-branch, nhưng tôi không thể tìm hiểu xem nó có thể làm những gì tôi muốn làm.Làm cách nào để di chuyển chi nhánh Git ra khỏi kho lưu trữ của chính nó?

Làm cách nào để trích xuất chi nhánh Git ra khỏi kho lưu trữ của chính nó?

Trả lời

207

Bạn có thể chỉ cần đẩy nhánh vào kho lưu trữ mới. Tất cả lịch sử của nó sẽ đi cùng với nó. Sau đó, bạn có thể chọn xóa chi nhánh khỏi kho lưu trữ ban đầu hay không.

ví dụ:

git push url://to/new/repository.git branch-to-move:new-branch-name 

Đối với một kho lưu trữ mới, tên chi nhánh mới thường là chính.

Tạo kho lưu trữ mới, trống có thể được thực hiện với git init.

+12

Chỉ trong trường hợp ai đó tự hỏi, tôi đã thay thế URL bằng đường dẫn đến thư mục kho lưu trữ Git và nó hoạt động hoàn hảo. – Aupajo

+41

Bạn cũng có thể đặt tên chi nhánh trong kho lưu trữ mới: 'git push url: //to/new/repository.git branch-to-move: new-branch-name' –

+4

Nhận xét trên của Yves ở trên là chính xác, nếu không bạn sẽ không có master trong đó và quá trình nhân bản sẽ kết thúc 'warning: HEAD từ xa đề cập đến ref không tồn tại, không thể checkout.'. Nếu đã ở giai đoạn đó, chỉ cần đi với 'git checkout -b branch-to-move' và bạn an toàn hoặc bạn chỉ cần đi với' git checkout -b master' để có nhánh master của bạn :) –

12

này sẽ giữ lại lịch sử của tất cả các chi nhánh, nhưng làm cho điểm bản sao của mình vào một chi nhánh cụ thể:

git clone -b newbranch CurrentRepo NewRepo 

này không 'di chuyển' bất cứ điều gì, chỉ làm cho một bản sao.

+2

Đáng chú ý rằng 'bản sao -b' là mới. Nó đòi hỏi git> = 1.6.5 (phát hành tháng 10 năm 2009). –

+0

Tôi gặp khó khăn khi làm việc này, nhưng đó là trước khi tôi nhìn thấy thông điệp từ Charles Bailey. – Aupajo

Các vấn đề liên quan