2011-02-02 41 views
5

Tôi đang cố gắng tách một repo git bằng cách sử dụng công thức described in this question, nhưng git repo đang được hỏi là rất lớn và có hàng nghìn commit, vì vậy dòng lệnh giới hạn khi tôi cố gắng chạy lệnh như được mô tả và bộ lọc cam kết không thành công. Nếu tôi cố gắng thực hiện nó trong các giai đoạn (đầu tiên áp dụng bộ lọc chỉ mục, sau đó commit filter), bộ lọc chỉ hoạt động tốt, nhưng bộ lọc commit bị kẹt và bắt đầu sử dụng lượng bộ nhớ khổng lồ (3G +) vì vậy tôi phải giết nó. Bất kỳ ý tưởng làm thế nào để làm điều này? Có lẽ tôi đang làm điều gì sai ở đây?Chia nhỏ git repo

Đối với những người không đọc câu hỏi khác, nhiệm vụ là chia vài thư mục từ một repo rất lớn thành repo khác, trong khi vẫn giữ lịch sử liên quan đến các thư mục này.

Trả lời

4

Tôi nghĩ rằng điều này đã được thêm vào kể từ khi tôi viết câu trả lời rằng:

--prune-empty

Một số loại bộ lọc sẽ tạo ra các cam kết trống rỗng, mà trái cây không bị ảnh hưởng. Công tắc này cho phép git-filter-branch bỏ qua các cam kết như vậy. Mặc dù, chuyển đổi này chỉ áp dụng cho các cam kết có một và chỉ có một phụ huynh, nó sẽ do đó giữ các điểm hợp nhất. Ngoài ra, tùy chọn này không tương thích với việc sử dụng bộ lọc --commit. Mặc dù bạn chỉ cần sử dụng hàm git_commit_non_empty_tree "$ @" thay vì git commit-tree "$ @" thành ngữ trong bộ lọc cam kết của bạn để thực hiện điều đó.

Vì vậy, hãy chụp ảnh với git filter-branch --index-filter '...' --prune-empty, vì đó chỉ là bộ lọc cam kết trong câu trả lời khác của tôi đã gây ra sự cố cho bạn.

+0

trông giống như điều này đã làm các trick, cảm ơn! – StasM

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