2010-03-19 28 views
5

Tôi đang ở một vị trí mà tôi là người duy nhất sử dụng git, mọi người khác đang sử dụng svn. Tôi đã sử dụng 'git svn' để kết nối với nhóm svn và chủ yếu là nó hoạt động tốt. Gần đây, tôi đã bắt đầu một dự án ban đầu trên riêng của tôi, riêng biệt repo git và bây giờ tôi cần phải kết hợp các công cụ từ nó vào svn. Tuy nhiên, tôi vẫn muốn tiếp tục tinh chỉnh việc triển khai trong sự riêng tư của riêng tôi giữa các bản phát hành.Cherry-hái từ git để svn (hoặc, Làm thế nào để giữ một lịch sử dự án trong git và phát hành trong svn)

Vì vậy, cách nào đơn giản nhất để chọn một số cam kết từ repo riêng của tôi cho repo svn-nhân bản? Yêu cầu là giữ toàn bộ lịch sử cục bộ và chỉ có một cam kết svn cho mỗi lựa chọn. Hoặc là có một số squashing để được thực hiện?

Là một phương pháp để đạt được điều này, có cách nào để có được repo tư nhân như một nguồn gốc cho repo svn-nhân bản?

Trả lời

2

Bạn có thể thử git graft cam kết từ repo Git của bạn với cam kết của git-svn repo trước git dcommit repo git svn.

Cam kết từ repo của bạn có thể bị cô lập trong một nhánh đặc biệt, khi all kind of squashing có thể diễn ra để xuất lịch sử rõ ràng hơn.

1

Nếu bạn là người duy nhất sử dụng git repo tại thời điểm này, bạn có thể xem xét việc rebasing tất cả công việc của bạn trên bản sao subversion trống mà bạn đã tạo. Sau đó, thiết lập một chi nhánh để giữ push của bạn trở lại subversion, squash mỗi bản phát hành vào nó và cam kết nó trở lại SVN.

Để có giải pháp chuyên sâu hơn, hãy cân nhắc sử dụng trực tiếp git commit-tree - cung cấp cho cây bạn muốn cam kết (tìm thấy bằng cách chạy git show --format=raw HEAD và xem dòng thứ hai ("cây")). bất cứ điều gì hiện đang trong lật đổ) và thông điệp tường trình đúng trên stdin. Điều này đang sử dụng hệ thống ống nước trực tiếp, bạn có thể muốn viết một kịch bản để làm điều đó cho bạn ... Hiệu ứng là bạn đã tạo một cam kết mới chứa nội dung tệp của một cam kết hiện có (so sánh với lựa chọn anh đào, diff được thêm vào bởi cam kết hiện có, thay vì sao chép cây).

+0

Vâng, tôi hiện là người dùng git duy nhất. Sẽ rebasing ngụ ý rằng tất cả các công việc trong tương lai sẽ được thực hiện trong svn nhân bản? Các repo svn nhân bản là gì, nhưng trống rỗng ... Mặc dù, điều đó có thể không thay đổi bất cứ điều gì. Vì vậy, trong ngắn hạn, tôi có thể rephrase rằng dự án của tôi thực sự là một tiểu dự án được sáp nhập vào một thân cây duy nhất có chứa nhiều dự án liên quan trong thư mục riêng của họ. Quay lại đầu trang ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| – Jawa

+0

Không có lý do gì để thực hiện công việc trong repo được nhân bản trực tiếp từ lật đổ, nhưng bạn muốn làm việc trên các nhánh có bản sao lật đổ như cha mẹ của chúng. Bạn có thể đạt được điều này bằng cách kéo các nhánh được rebased trở lại kho lưu trữ công việc của bạn và sử dụng 'git branch -f' để thiết lập các nhánh đang hoạt động của bạn để trỏ vào các tham chiếu đã được rebased của bạn. –

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