I'm trying to import changes from one source control system (proprietary and complicated) into a git repository. I'm doing this currently by running a script that simply syncs to each revision in order and commits this to the git repository, but for various reasons this has become unworkable.

For each revision, I can get a universal diff describing the change. To me it seems that this should be enough to import history to git, but I can't for the life of me figure out how to get git to do this. It looks like I need something in-between git-apply and git-fast-import. Perhaps I should construct the file contents from the previous version and the diff, then use git-fast-import? Or perhaps I should format the diff as a git patch, save it as a file, and use git-apply?

Anyone got any good ideas for me?

EDIT: The reason syncing and committing has become unworkable is twofold:

First, the server maintains a list of files you have edited. Syncing with edited files can't be automated easily, so I revert my changes while updating. We have a checkin queue system that only allows you to checkin when nobody in front of you has any of the same files 'on edit' as you. So taking files 'off edit' to update creates a window where it looks like people can safely jump ahead of you.

Second, all branches are stored in the same repository, and we make heavy use of branches. Syncing everything is easy and works, syncing just one directory (that of the branch I'm on) seems buggy. If I sync everything though, the other branches are updated when I don't want them to be. This normally wouldn't be a problem but we have another tool, which makes things... complicated.