2011-05-12 26 views
5

Vấn đề là sau khi bạn xóa và đẩy chi nhánh, nó sẽ không bị mất mãi mãi và nó vẫn còn trong kho. Tôi đã xóa chi nhánh với số lượng lớn các tệp không cần thiết, nhưng miễn là nó vẫn còn ở đâu đó trong kho git, thời gian lệnh git clone quá lớn.Cách xóa một chi nhánh và tất cả các đối tượng mà nó tham chiếu

Hiện tại chỉ có cách tôi thấy là xóa toàn bộ kho lưu trữ và tạo lại nhưng không cần nhánh.

Trả lời

4

Tôi tin rằng git gc --prune=now sẽ thực hiện những gì bạn muốn: xóa các tệp không cần thiết khỏi kho lưu trữ của bạn.

Theo mặc định git gc xóa các cam kết không thể truy cập được cũ hơn 2 tuần, vì vậy việc thêm --prune=now là những gì bạn cần.

+0

+1 git gc thực sự sẽ làm sạch các đối tượng lỏng lẻo trong kho lưu trữ. Tuy nhiên, vấn đề với bản sao mất rất nhiều thời gian có liên quan đến các phiên bản tập tin cũ vẫn còn tồn tại trong repo. – ralphtheninja

+0

Cảm ơn vì prune, sẽ chỉnh sửa câu hỏi của tôi. Tôi không đồng ý, nếu các cam kết đã bị xóa là không thể truy cập (có vẻ như là trường hợp), chúng sẽ bị xóa bởi 'prune' – CharlesB

+1

Lý do là reflog, chứa tham chiếu đến trạng thái của các nhánh của bạn ngay cả khi các nhánh đã bị xóa. –

3

Bạn cần phải gỡ bỏ những file hoàn toàn bằng cách sử dụng git filter-branch

http://git-scm.com/docs/git-filter-branch

Bạn có thể làm rất nhiều phép thuật với lệnh này, sau đây sẽ loại bỏ tên tập tin từ tất cả các cam kết:

git filter-branch --tree-filter 'rm -f filename' HEAD 
+0

chỉ tò mò: nếu cam kết biến mất, vì nhánh bị xóa, không phải là 'git gc' xóa nó? – CharlesB

+0

@CharlesB: Đúng nhưng bạn có thể muốn sử dụng git gc --prune = ngay bây giờ để loại bỏ tất cả dữ liệu. Tuy nhiên, đây chỉ là dữ liệu cho kho lưu trữ cục bộ và không có bất kỳ tác dụng nào khi nhân bản nó. Có vẻ như câu hỏi này là hai gấp. – ralphtheninja

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