In primo luogo una breve nota, che anche un incantesimo come in un commento sul Splitting a set of files within a git repo into their own repository, preserving relevant history
SPELL='git ls-tree -r --name-only --full-tree "$GIT_COMMIT" | grep -v "trie.lisp" | tr "\n" "\0" | xargs -0 git rm --cached -r --ignore-unmatch'
git filter-branch --prune-empty --index-filter "$SPELL" -- --all
non aiuterà con file denominati come imaging/DrinkkejaI<0300>$'\302\210'.txt_74x2032.gif
. La parte aI<0300>$'\302\210'
una volta era una singola lettera: ä
.
Quindi, al fine di estrarre un singolo file, oltre a filtrare ramo Ho anche bisogno di fare:
git filter-branch -f --subdirectory-filter lisp/source/model HEAD
In alternativa, è possibile utilizzare --tree-filtro: (è necessaria la prova, perché il file era in un'altra directory in precedenza, vedi: How can I move a directory in a Git repo for all commits?)
MV_FILTER='test -f source/model/trie.lisp && mv ./source/model/trie.lisp . || echo "Nothing to do."'
git filter-branch --tree-filter $MV_FILTER HEAD --all
Per visualizzare tutti i nomi di un file hanno avuto, utilizzare:
git log --pretty=oneline --follow --name-only git-path/to/file | grep -v ' ' | sort -u
Come descritto in http://whileimautomaton.net/2010/04/03012432
seguire anche le fasi di seguito:
$ git reset --hard
$ git gc --aggressive
$ git prune
$ git remote rm origin # Otherwise changes will be pushed to where the repo was cloned from
Perché si desidera estrarre un singolo file dal repo? – svick
È tutto ciò di cui ho bisogno. E btw, http://stackoverflow.com/questions/5998987/splitting-a-set-of-files-within-a-git-repo-into-their-own-repository-preserving non è un clone di alcuna sottodirectory- domanda di filtro. L'estrazione dei file richiede sia il passaggio del filtro --subdirectory sia un filtro -index o --tree-filter. – peterhil
O meglio quello che voglio, perché creerò un pacchetto del singolo file che fornisce un trie. Voglio usarlo anche in altri progetti, e pubblicare in Github e ho del codice nel repository che non voglio rendere open source (almeno ancora). – peterhil