views:

182

answers:

8

I once ran across a commercial tool for Windows that allowed you to "stash" code changes outside of source control but now I can't remember the name of it. It would copy the current version of a document to a backup location and undo your checkout in source control. You could then reintroduce your backed up changes later. I believe it worked with multiple source control systems. Does anyone know what program I'm trying to describe?

The purpose of my asking is twofold: The first is to find a good way to do this. The second is because I just can't remember what that darn program was and it's driving me crazy.

+5  A: 

Git: http://git-scm.com/

You can use git stash to temporarily put away your current set of changes: http://www.kernel.org/pub/software/scm/git/docs/git-stash.html . This stores your changes locally (without committing them), and lets you reintroduce them into your working copy later.

Git isn't commercial, but is quickly gaining many converts from tools like Subversion.

Ron DeVera
It wasn't Git, but I'll check it out!
Greg
+1  A: 

I'm no git user myself, but several of my colleagues are, and they seem to like it precisely for this purpose. They use the various git wrappers to commit "real" changes to the SCM system used by their company, but keep private git repositories on their drives which they can keep their changes which they don't necessarily want to commit.

When they're ready to commit to the company's SCM server, then they just merge and commit upstream. Is that what you're looking to do?

Nik Reiman
+1  A: 

Wouldn't it be a better idea to store your private changes in private branch, using e.g. svn switch to change to main branch whenever you need to?

vartec
Yes, it probably would be.
Greg
+1  A: 

Mercurial has the Shelve Extension which does what you want.

You can even select which changes from a single file that you want to shelve if you really want.

Dave Webb
A: 

In Darcs, you either don't record the changes you want stashed (it asks you about including each change independently when you record a new patch), or put them in separate patches that you don't push upstream.

There's no need to fully synchronize your local private repos with public/upstream/other ones. You can just cherry pick the patches you want to push elsewhere. Selecting patches can also be done with patterns, so if you adopt a naming convention for your stashed patches you can push everything but them easily.

That way, your private changes are still in revision control, but they aren't shared until you want them to be.

Chris Smith
A: 

I think the product you're thinking of is "CodePickle" by SmartBear Software. However, it appears to be a discontinued product.

The term that seems to be used for the type of functionality you're looking for seems to be 'shelving'.

Microsoft's Team system has a 'shelve' feature.

Perforce has several unsupported scripts, including p4tar and p4 shelve

There are several 'shelving' tools for Subversion, but I don't know how robust they are.

Michael Burr
Yeah, that's it!
Greg
A: 

I found an excellent article about obtaining similar functionality using Subversion branches: Shelves-in-subversion

WakeUpScreaming
A: 

And then there's the old fallback... 'patch', or even the old "copy everything to another location, then revert".

Both of these are less convenient than using tools that are part of most VCS systems, though.

Arafangion