fake_submodule.rb
fake_submodule is a command line tool to emulate the behaviour
of git submodule, which embeds a repository inside a repository.
Why we have done this instead of using git submodule is that it
is not supported at Heroku, but we do need a way to share a
repository among all projects we have.
Before this, we are doing this manually, with plain diff tool
and look and feel... the pain.
Yes this is really a pain, so I've written this command line tool to
help us merging and synchronizing all changes. It works fine for
simple cases, but in reality, if we're doing very agile development
and changing all the time, this is still a pain, there are tons of conflicts
out there, because git format-patch and git am is not so good as the
usual 3-way merge.
The trick behind this is creating branches for each containing project,
and only git am on the matched project, then finally do a normal
3-way merge. In additional, needs tags to specify the ref (commit)
as git submodule.
In theory, this should work correctly. We'll only need to resolve the
conflicts in master branch, in which case happens only on merge,
instead of git am. That would be a lot easier to resolve conflicts.
The bad news is that the process it's super duper crazy complicated.
It's soooo easy to make it wrong. I don't know why, don't ask me.
It's very hard to recover the state from previous failure. It's very easy
to get into a wrong state, and that causes many issues.
I am really tired of this.
But still, if we're deploying to Heroku.
The story continues.
Or we need to change the process we develop.
For example, only make changes in one repository,
but this is not very agile. And still needs some scripts.
There's a thread in ruby-core somehow related to this.
Patch rubygems (and others) in ruby-core or its own repository?
This might be harder, since people are coming from different
groups, and they prefer different source code management tool.
I remember that someone likes perforce...
0 retries:
Post a Comment
Note: Only a member of this blog may post a comment.