Tuesday, October 26, 2010

export files from git for sync using ftp upload

Well I had to do it.
I had to use GIT.
Everybody was using it and some recent forced contemplation at subversion merging made me finally give it a try. But I was reluctant. Partially because of the Linus speech at Google where he was bashing the Subversion guys, partly because of it's sheer difficulty. I really don't like any of those 2 factors. Not one bit. But the added value may surpass the second one. I won't say more about the first one.
So I adapted my export files from svn for sync using ftp upload for git.
Here it is:
# Exports GIT changed files to a chosen location

echo "Repository local path:"
read repositoryUrl
echo "Start commit:"
read startRevision
echo "End commit:"
read endRevision
echo "Export location:"
read exportLocation

cd $repositoryUrl
git diff $startRevision..$endRevision  --name-status | grep "^[AM].*\.\w\{2,4\}$" | awk '{print $2}' | sort -u | \
while read FN
        echo "exporting $FN ..."
        mkdir -p $exportLocation`dirname /$FN`
        git show $endRevision:$FN > $exportLocation/$FN
cd $currentFolder
Now this is really experimental. Use it only as an exercise for now.
Issues I have yet to fix and clear out:

  • I did not find a way to get the diff from the central origin/master. I am guessing that the commits are the same local and remote once you push/pull them (like svn commit) but I'm not 100% sure until I'll use this in a production scenario with lots of activity. The distributed nature of the sistem may give me some bad "aha" moments
  • diff with ".." seems to be so smart that it does not list stuff you added and also deleted before the last commit. Well that's how it looks...
  • I am not sure how diff works (there I said it) right now. I think and hope it'n not just diffing the 2 commits but also all the ones that happened between them. More experimenting should clear this out for me
If you have any hints on my issues please do comment. I'll probably come back here with the common "GIT rocks" post but I'm guessing that will take me a while. I am new to git and I still have a lot to figure out.


Post a Comment

<< Home