Czytaj pełnego rozwiązania, ale niestety, git clone nie działa w sposób, o którą wnioskujesz. Parametr --depth
ogranicza liczbę revisions
, a nie liczbę commits
. Nie ma parametru klonowania, który ogranicza liczbę zatwierdzeń. W twojej sytuacji, nawet gdybyś wiedział, że istnieje tylko co najwyżej 10 różnic w porównaniu z plikiem, który zmienił się najbardziej pomiędzy wersją 3.0 a najnowszą wersją HEAD w repozytorium i użyłeś --depth 10
, możesz uzyskać większość lub całą historię repozytorium. Ponieważ niektóre obiekty mogą nie mieć aż 10 poprawek, a ich historia zostanie przeniesiona z powrotem na początek ich pierwszego pojawienia się w repozytorium.
Oto, jak wykonać to, co lubisz: Kluczem do problemu jest to, że potrzebujesz zatwierdzeń między wersją 3.0 a najnowszą najbardziej potrzebną referencją. Oto kroki zrobiłem właśnie do tego:
git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --depth 10075 smaller_kernel_repo
cd smaller_kerenel_repo
- Ustal sha z v3.0
git log --oneline v3.0^..v3.0
- utworzyć punkt szczepiony wychodząc z tego sztuczny (to 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe)
echo "02f8c6aee8df3cdc935e9bdd4f2d020306035dbe" > .git/info/grafts
Aby obejść niektóre problemy z niektórymi wpisami w dzienniku jądra, wykonaj następujące czynności: export GIT_AUTHOR_NAME="tmp"
i export GIT_COMMITTER_NAME="tmp"
Jest miły ostrzeżenie o w manualu o git filter-branch
przepisywania historii przez następujące punkty szczepione ... więc pozwala nadużyciom, że teraz uruchomić git filter-branch
i usiąść i czekać ... (i czekać i czekać)
teraz trzeba posprzątać wszystko:
git reflog expire --expire=now --all
git repack -ad # Remove dangling objects from packfiles
git prune # Remove dangling loose objects
Ten proces jest czasochłonny, ale nie bardzo skomplikowane. Mam nadzieję, że zaoszczędzi ci to czasu, na który miałeś nadzieję w dłuższej perspektywie. W tym momencie będziesz miał repozytorium ze zmienioną historią tylko wersji 3.0 z repozytorium linux-stable.git.Podobnie jak w przypadku użycia na klonie wersji --depth
, masz takie same restrykcje na repozytorium i będziesz mógł modyfikować i wysyłać poprawki z historii, którą już posiadasz. Istnieją sposoby obejścia tego .. ale to zasługuje na własne Q & A.
Jestem w trakcie testowania ostatnich kilku kroków samodzielnie, ale operacja git filter-branch
nadal trwa. Zaktualizuję ten post w przypadku jakichkolwiek problemów, ale zacznę go publikować, aby można było rozpocząć ten proces, jeśli uznasz to za dopuszczalne.
UPDATE
Obejście dla wydania (śmiertelnym: pusty ozn <> nie jest to dozwolone). Ten problem wynika z problemu z historią zatwierdzania repo systemu Linux.
Zmień komendę git filter-branch
do:
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 '
Zobacz także [Jak usunąć starą historię z repozytorium git?] (Http://stackoverflow.com/questions/4515580/how-do-i-remove-the-old-history-froma-a- git-repository) – Alberto