Tôi đã làm việc trên một kho lưu trữ trên tài khoản GitHub của mình và đây là vấn đề tôi gặp phải.
- Dự án Node.js với một thư mục có vài gói npm được cài đặt
- Các gói trong
node_modules
thư mục - Đã thêm thư mục đó vào kho git và đẩy mã lên github (lúc đó không nghĩ về phần npm)
- Nhận ra rằng bạn không thực sự cần thư mục đó là một phần của mã
- Xóa thư mục đó, đẩy nó
Trong trường hợp đó, kích thước của tổng số git repo là khoảng 6 MB trong đó mã thực tế (tất cả ngoại trừ thư mục đó) chỉ khoảng 300 KB .
Bây giờ, điều tôi đang tìm kiếm cuối cùng là một cách để loại bỏ các chi tiết của thư mục gói đó khỏi lịch sử của git, vì vậy nếu ai đó sao chép nó, họ không phải tải xuống lịch sử trị giá 6mb trong đó các tệp thực tế duy nhất họ sẽ nhận được như cam kết cuối cùng sẽ là 300KB.
Tôi đã tìm kiếm các giải pháp khả thi cho việc này và đã thử 2 phương pháp này
- Xóa tệp khỏi kho git (lịch sử)
- http://help.github.com/remove-sensitive-data/
- https://gist.github.com/1588371
Gist có vẻ như nó hoạt động khi sau khi chạy tập lệnh, nó cho thấy rằng nó đã thoát khỏi thư mục đó và sau đó nó cho thấy 50 cam kết khác nhau đã được sửa đổi. Nhưng nó đã không cho phép tôi đẩy mã đó. Khi tôi cố gắng đẩy nó, nó nói Branch up to date
nhưng cho thấy 50 lần cam kết đã được sửa đổi khi a git status
. Hai phương pháp khác cũng không giúp được gì.
Bây giờ mặc dù nó cho thấy rằng nó đã thoát khỏi lịch sử của thư mục đó, khi tôi kiểm tra kích thước của repo đó trên localhost của mình, nó vẫn còn khoảng 6MB. (Tôi cũng đã xóa refs/original
thư mục nhưng không thấy sự thay đổi kích thước của repo).
Điều tôi đang tìm cách làm rõ là, nếu có một cách để loại bỏ không chỉ lịch sử cam kết (đó là điều duy nhất tôi nghĩ đã xảy ra) mà cả những tập tin mà git đang giữ giả sử muốn quay ngược lại.
Hãy nói rằng một giải pháp được trình bày cho điều này và được áp dụng trên localhost của tôi nhưng không thể sao chép vào repo GitHub đó, có thể sao chép repo đó, quay lại cam kết đầu tiên thực hiện thủ thuật và đẩy nó (hoặc điều đó có nghĩa là git sẽ vẫn có một lịch sử của tất cả những cam kết đó? - hay còn gọi là 6MB).
Mục tiêu cuối cùng của tôi ở đây là về cơ bản là tìm ra cách tốt nhất để loại bỏ nội dung thư mục khỏi git để người dùng không phải tải xuống các nội dung có giá trị 6 MB và vẫn có thể có các cam kết khác không bao giờ chạm vào thư mục mô-đun (điều đó thật tuyệt nhiều trong số họ) trong lịch sử của git.
Tôi có thể làm cái này như thế nào?