Chúng tôi có một số kho lưu trữ git
đã phát triển thành kích thước không thể quản lý do việc bao gồm lịch sử tệp thử nghiệm nhị phân và tệp java .jar
.Có thể thu gọn kho lưu trữ .git mà không cần viết lại lịch sử không?
Chúng tôi sắp sửa thực hiện git filter-branch
trong các kho lưu trữ này, sao chép chúng ở mọi nơi chúng được sử dụng (từ hàng chục đến hàng trăm triển khai, tùy thuộc vào repo) và được cung cấp problems with rewriting history. có thể là bất kỳ giải pháp nào khác.
Lý tưởng nhất là tôi muốn bên ngoài các tệp vấn đề mà không cần viết lại lịch sử của từng kho lưu trữ. Về lý thuyết, điều này có thể xảy ra vì bạn đang kiểm tra cùng một tệp, với cùng kích thước và cùng một băm, chỉ tìm nguồn cung ứng từ một vị trí khác (từ xa thay vì lưu trữ đối tượng cục bộ). Không ai trong số các giải pháp tiềm năng tôi đã tìm thấy cho đến nay dường như cho phép tôi làm điều này.
Bắt đầu với git-annex, gần nhất tôi có thể tìm đến một giải pháp cho vấn đề của tôi là How to retroactively annex a file already in a git repo, nhưng như với chỉ cần loại bỏ các tập tin lớn, điều này đòi hỏi lịch sử được viết lại để chuyển đổi bản gốc git add
thành một git annex add
.
Di chuyển từ đó, tôi bắt đầu xem xét các dự án khác được liệt kê trên what git-annex is not, vì vậy tôi đã kiểm tra git-bigfiles, git-media và git-fat. Rất tiếc, chúng tôi không thể sử dụng số điện thoại git-bigfiles ngã ba của git
vì chúng tôi là một cửa hàng của Eclipse và sử dụng hỗn hợp git
và EGit. Không giống như git-media hoặc git-fat cũng có thể làm những gì tôi muốn, vì trong khi bạn có thể thay thế các tệp lớn hiện tại bằng các phần tử tương đương bên ngoài, bạn vẫn cần viết lại lịch sử để xóa các tệp đã được cam kết.
Vì vậy, có thể thu gọn kho lưu trữ .git mà không cần viết lại lịch sử hay chúng ta nên quay lại kế hoạch sử dụng git filter-branch
và toàn bộ quá trình triển khai lại?
Là một sang một bên, tin rằng này nên thể, nhưng có lẽ gắn liền với những hạn chế tương tự như những người git
s shallow clone thực hiện.
Git đã hỗ trợ nhiều địa điểm nhất có thể cho các blob cùng, vì bất kỳ blob cụ thể có thể trong loose object store (.git/objects
) hoặc trong một pack file (.git/objects) nên về mặt lý thuyết, bạn sẽ chỉ cần một cái gì đó giống như git-annex
được nối trong ở cấp độ đó thay vì cao hơn (nghĩa là có khái niệm về tải xuống theo yêu cầu blob từ xa nếu bạn muốn). Thật không may tôi không thể tìm thấy bất cứ ai đã thực hiện hoặc thậm chí đề xuất bất cứ điều gì như thế này.
Theo tôi có thể cho biết bạn đang hỏi cách viết lại lịch sử mà không cần viết lại lịch sử. – alternative
@alternative không hoàn toàn, tôi hỏi nếu có một cách để mỏng kho lưu trữ * mà không * viết lại lịch sử. Tại thời điểm này có vẻ như sử dụng * nhái nông * có thể là cách duy nhất, nhưng những giới hạn có thể sẽ không hoạt động tốt với quy trình làm việc của chúng tôi và thậm chí nếu nó làm như vậy thì chúng sẽ chỉ làm mỏng bản sao cục bộ (không nhân bản). repos. –
Cách duy nhất để "mỏng" kho lưu trữ sẽ được để xóa các nội dung bạn đang giảm béo - do đó, viết lại (đó là lý do tại sao mỗi câu trả lời nói rằng điều này là không thể). Không có bất kỳ vấn đề gì với lịch sử viết lại miễn là bạn làm điều đó một cách chính xác. Và có, các bản sao nông sẽ chỉ ảnh hưởng đến các kho lưu trữ địa phương. – alternative