Leggere completamente per una soluzione, ma purtroppo, git clone non funziona nel campo della moda si richiede. Il parametro --depth
limita il numero di revisions
non il numero di commits
. Non esiste un parametro clone che limiti la quantità di commit. Nella tua situazione, anche se sapessi che ci sono state al massimo 10 differenze di revisione dal file che è cambiato di più tra la versione 3.0 e la più recente HEAD nel repository e utilizzato --depth 10
potresti ancora ottenere la maggior parte o l'intera cronologia dei pronti contro termine. Poiché alcuni oggetti potrebbero non avere un massimo di 10 revisioni e la loro cronologia verrà riportata all'inizio della loro prima apparizione nel repository.
Ora ecco come fare ciò che ti piace: La chiave del tuo problema è che ti serve il commit tra la versione 3.0 e la più recente recente che desideri. Ecco i passi che ho fatto a fare proprio questo:
git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --depth 10075 smaller_kernel_repo
cd smaller_kerenel_repo
- Determinare la sha di v3.0
git log --oneline v3.0^..v3.0
- creare un punto di innesto a partire da questa sha (è 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe)
echo "02f8c6aee8df3cdc935e9bdd4f2d020306035dbe" > .git/info/grafts
Per aggirare alcuni problemi con alcune voci del registro del kernel fare: export GIT_AUTHOR_NAME="tmp"
e export GIT_COMMITTER_NAME="tmp"
C'è una bella avviso circa nella pagina man su git filter-branch
riscrivere la storia, seguendo i punti di innesto ... così lascia abuso che, ora gestito git filter-branch
e sedersi e aspettare ... (e aspettare e Aspettiamo)
Ora è necessario ripulire tutto:
git reflog expire --expire=now --all
git repack -ad # Remove dangling objects from packfiles
git prune # Remove dangling loose objects
Questo processo richiede molto tempo, ma non molto complesso. Spero che ti risparmi tutto il tempo che speravi a lungo termine. A questo punto si avrà essenzialmente un repository con una cronologia modificata di solo v3.0 in poi dal repository linux-stable.git.Proprio come se si usasse lo --depth
su clone si hanno le stesse restrizioni sul repository e si potranno modificare e inviare patch solo dalla cronologia che si ha già. Ci sono modi per aggirare questo problema .. ma merita il proprio Q & A.
Sono in procinto di testare gli ultimi passaggi da solo, ma l'operazione git filter-branch
è ancora in corso. Aggiornerò questo post con qualsiasi problema, ma andrò avanti e pubblicarlo in modo da poter iniziare questo processo se lo trovi accettabile.
UPDATE
Soluzione di problema (fatale: vuoto ident <> non è consentito). Questo problema deriva da un problema nella cronologia del commit del repository di Linux.
cambiare il comando git filter-branch
a:
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 '
Vedere anche [Come rimuovere la cronologia precedente da un repository git?] (Http://stackoverflow.com/questions/4515580/how-do-i-remove-the-old-history-from-a- git-repository) – Alberto