đã đọc đầy đủ cho một giải pháp, nhưng không may, git clone không hoạt động trong thời trang mà bạn yêu cầu. Thông số --depth
giới hạn số lượng revisions
không phải là số commits
. Không có một tham số nhân bản giới hạn số tiền cam kết. Trong trường hợp của bạn, ngay cả khi bạn biết rằng chỉ có tối đa 10 bản sửa đổi khác nhau từ tệp đã thay đổi nhiều nhất giữa v3.0 và HEAD mới nhất trong repo và sử dụng --depth 10
bạn vẫn có thể nhận được nhiều nhất hoặc toàn bộ lịch sử repo. Bởi vì một số đối tượng có thể không có nhiều như 10 sửa đổi và bạn sẽ có được lịch sử của họ tất cả các cách trở lại đầu sự xuất hiện đầu tiên của họ trong repo.
Bây giờ, đây là cách làm những gì bạn thích: Chìa khóa cho vấn đề của bạn là bạn cần cam kết giữa v3.0 và tham chiếu gần đây nhất mà bạn muốn. Dưới đây là các bước tôi đã làm để làm việc đó:
git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --depth 10075 smaller_kernel_repo
cd smaller_kerenel_repo
- Xác định sha của v3.0
git log --oneline v3.0^..v3.0
- Tạo một điểm ghép bắt đầu với sha này (nó là 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe)
echo "02f8c6aee8df3cdc935e9bdd4f2d020306035dbe" > .git/info/grafts
Để khắc phục một số vấn đề với một số mục nhập nhật ký hạt nhân, hãy thực hiện: export GIT_AUTHOR_NAME="tmp"
và export GIT_COMMITTER_NAME="tmp"
Có một cảnh báo tốt đẹp về người đàn ông trong trang về git filter-branch
viết lại lịch sử bằng cách làm theo điểm ghép ... do đó, cho phép lạm dụng điều đó, bây giờ chạy git filter-branch
và ngồi lại và chờ đợi ... (và chờ chờ)
Bây giờ bạn cần để làm sạch tất cả mọi thứ:
git reflog expire --expire=now --all
git repack -ad # Remove dangling objects from packfiles
git prune # Remove dangling loose objects
quá trình này rất tốn thời gian nhưng không phải là rất phức tạp. Hy vọng rằng nó sẽ giúp bạn tiết kiệm tất cả thời gian bạn đã hy vọng trong thời gian dài. Tại thời điểm này, bạn sẽ có cơ bản là một repo với một lịch sử sửa đổi chỉ v3.0 trở đi từ repo linux-stable.git.Cũng giống như nếu sử dụng các --depth
trên bản sao bạn có cùng một hạn chế về repo và sẽ chỉ có thể sửa đổi và gửi các bản vá lỗi từ lịch sử bạn đã có. Có những cách xung quanh đó .. nhưng nó xứng đáng với riêng của mình Q & A.
Tôi đang trong quá trình thử nghiệm vài bước cuối cùng, nhưng hoạt động git filter-branch
vẫn đang diễn ra. Tôi sẽ cập nhật bài đăng này với bất kỳ vấn đề nào, nhưng tôi sẽ tiếp tục và đăng nó để bạn có thể bắt đầu quá trình này nếu bạn thấy nó có thể chấp nhận được.
CẬP NHẬT
Giải pháp cho vấn đề (tử vong: trống ident <> không được phép). Vấn đề này xuất phát với một vấn đề trong lịch sử cam kết của repo Linux.
Thay đổi lệnh git filter-branch
tới:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "" ];
then
GIT_AUTHOR_EMAIL="[email protected]";
GIT_AUTHOR_NAME='tmp'
GIT_COMMITTER_NAME='Me'
GIT_COMMITTER_EMAIL='[email protected]'
git commit-tree "[email protected]";
else
git commit-tree "[email protected]";
fi '
Xem thêm [Làm cách nào để xóa lịch sử cũ khỏi kho lưu trữ git?] (Http://stackoverflow.com/questions/4515580/how-do-i-remove-the-old-history-from-a- git-repository) – Alberto