Found temporary solution

This commit is contained in:
tyger 2011-03-02 13:08:46 +00:00 committed by admin
parent 1c08b8bf8a
commit af6a7c4b81

View file

@ -6,3 +6,59 @@ I tried to rewrite the (cloned) repository with git-filter-branch but failed mis
* annex log files are stored in .git-annex/ instead of .git-rewrite/t/.git-annex/ so the filter operation misses them
Any suggestions how to proceed?
EDIT 3/2/2010
I finally got it working for my purposes. Hardest part was preserving the branches while injecting the new `git annex setup` base commit.
#### Clone repository
git clone original migrate
cd migrate
git checkout mybranch
git checkout master
git remote rm origin
#### Inject `git annex setup` base commit and repair branches
git symbolic-ref HEAD refs/heads/newroot
git rm --cached *
git clean -f -d
git annex init master
echo \*.rpm annex.backend=SHA1 >> .gitattributes
git commit -m "store rpms in git annex" .gitattributes
git cherry-pick $(git rev-list --reverse master | head -1)
git rebase --onto newroot newroot master
git rebase --onto master mybranch~1 mybranch
git branch -d newroot
#### Migrate repository
mkdir .temp
cp .git-annex/* .temp/
MYWORKDIR=$(pwd) git filter-branch --tree-filter '
mkdir -p .git-annex;
cp ${MYWORKDIR}/.temp/* .git-annex/;
for rpm in $(git ls-files | grep "\.rpm$"); do
echo;
git annex add $rpm;
annexdest=$(readlink $rpm);
if [ -e .git-annex/$(basename $annexdest).log ]; then
echo "FOUND $(basename $annexdest).log";
else
echo "COPY $(basename $annexdest).log";
cp ${MYWORKDIR}/.git-annex/$(basename $annexdest).log .git-annex/;
cp ${MYWORKDIR}/.git-annex/$(basename $annexdest).log ${MYWORKDIR}/.temp/;
fi;
ln -sf ${annexdest#../../} $rpm;
done;
git reset HEAD .git-rewrite;
:
' -- $(git branch | cut -c 3-)
rm -rf .temp
git reset --hard
TODO:
* Find a way to repair branches automatically (detect branch points and run appropriate `git rebase` commands)
I'll be happy to try any suggestions to improve this migration script.
P.S. Is there a way to edit comments?