Does SVN have an equivalent to git's commit (without the push)?

Igor picture Igor · Dec 27, 2011 · Viewed 15.4k times · Source

Basically I want to stage my changes without pushing them and without switching branches. This allows me to do some work, commit it when I am at a good stopping point, and then continue work in the same branch. If I mess up, I can revert, if I add new changes, I can just commit again.

I realize I can create a feature branch in SVN to track these changes, but again, I'd like to do so while staying in the same branch/trunk. Even the equivalent of git stash would suffice, although it seems SVN doesn't have that feature.

Answer

thiton picture thiton · Dec 27, 2011

The very point of distributed version control is this feature of local commits that can at a later point be merged with the upstream repository. SVN is not distributed and cannot do it. The central hindrance is SVN's linear revision numbering, which implies that every client must get a new identifying revision number for each changeset. Since "allocating" a revision number and later using it would lead to all kinds of race conditions, the "commit" and "push" actions are atomic in SVN and every non-distributed version control system.

That being said, git's SVN frontend is a good choice, like Joe suggested. It makes sure that SVN never sees your local, individual commits, and the "push" is translated into a single, big SVN commit.