Piston is a utility that eases vendor branch management. This is similar to svn:externals
, except you have a local copy of the files, which you can modify at will. As long as the changes are mergeable, you should have no problems.
Piston has a similar purpose than svnmerge.py which you can find in the contrib/client-side
folder of the main Subversion. The main difference is that Piston is designed to work with remote repositories. You should also investigate if SVK would be a better fit for you.
From Wikipedia's Piston:
In general, a piston is a sliding plug that fits closely inside the bore of a cylinder.
Its purpose is either to change the volume enclosed by the cylinder, or to exert a force on a fluid inside the cylinder.
For Piston, we retain the second meaning, to exert a force on a fluid inside the cylinder.
In our case, the fluid is the code copied from the remote repository.
Installation
Nothing could be simpler:
$ gem install --include-dependencies piston Successfully installed piston, version 1.0.0
Usage
First, you need to import the remote repository location:
$ piston import http://dev.rubyonrails.org/svn/rails/trunk vendor/rails Exported r4720 from 'http://dev.rubyonrails.org/svn/rails/trunk' to 'vendor/rails' $ svn commit -m "Importing local copy of Rails"
When you want to get the latest changes from the remote repository location:
$ piston update vendor/rails Updated 'vendor/rails' to r4720. $ svn commit -m "Updates vendor/rails to the latest revision"
You can prevent a local Piston-managed folder from updating by using the lock
subcommand:
$ piston lock vendor/rails 'vendor/rails' locked at r4720.
When you want to update again, you unlock
:
$ piston unlock vendor/rails 'vendor/rails' unlocked.