- 1 Introduction to SVN
- 2 Anonymous use
- 2.1 Check out
- 2.2 Projects on VideoLAN's SVN
- 2.3 Updating the working copy
- 2.4 Making a diff
- 2.5 Applying a diff
- 2.6 .cvsignore / Ignoring files
- 2.7 Changing file structure
- 2.8 Reverting your changes
- 2.9 Checking the status of the working copy
- 2.10 Checking out specific revision number
- 3 Developer use
- 4 External links
Introduction to SVN
Some VideoLAN's repositories are using Subversion, which is a classical VCS, like CVS. It also provides a better control over the repository compared to CVS.
Currently the Subversion repositories are hosted on one of the VideoLAN Servers.
How to use it
When using Cygwin as compilation environment it is recommended to use the SVN package that comes with it (using the Cygwin setup). Using an "external" SVN application might otherwise cause problems with so called DOS versus UNIX "line endings" when creating files.
Subversion's command-line interface is generally pretty similar to CVS. This is a basic and partial guide of the most useful commands. For a complete guide, use the book Version Control with Subversion. If you have a write access to the server, it's very recommended that you read it and know about the advanced features of Subversion, because you might use them sooner or later.
If you don't have a write access to the repository, you have to access it anonymously, via regular SVN. However, most of the techniques shown here may be useful also for developer use, so please read it even if you don't have to access the server anonymously.
First, you have to check out the code of libdvbpsi. Use the following syntax:
% svn checkout svn://svn.videolan.org/libdvbpsi/trunk libdvbpsi-trunk
You can browse the code structure using on the SVN webviewer Use the three folders there for different purposes:
- trunk is the main development branch.
- The branches are used for stable versions and for the development of complex features.
- The tags are used to track the released versions.
The URL structure is:
- project repository
- /trunk, or /branches/0.8.6, or /tags/0.8.5
You can also checkout a portion of the SVN using the URL.
Don't leave off the "trunk" or branch part! If you leave that off you check out every revision of every file in the repo, which is pretty silly.
Projects on VideoLAN's SVN
- svn://svn.videolan.org/vls: VideoLAN Server (deprecated and unmaintained : VLC media player can now do the same);
- svn://svn.videolan.org/libdvdcss: library for decrypting DVDs, used by VLC media player and VLS;
- svn://svn.videolan.org/libdvdplay: library for DVD navigation, (deprecated) once used by VLC media player, not it uses libdvdnav from mplayer, with a few internal patches;
- svn://svn.videolan.org/libdvbpsi: library for parsing Program Specific Information from MPEG and DVB streams, used by VLC and VLS;
- svn://svn.videolan.org/videolan/www.videolan.org: the website (no trunk or branches);
- svn://svn.videolan.org/libmpeg2: MPEG2 library.
- svn://svn.videolan.org/liba52: A52/AC3 decoder library.
- svn://svn.videolan.org/libdvbcsa: DVB Common Scrambling Algorithm library
Updating the working copy
To update your working copy and get the latest files, use the following command:
% svn update
Note that SVN, unlike CVS, doesn't need to be told to prune removed files or create new directories. This is automagic.
Making a diff
Diffs, or patches, are text files which include all the changes done in the working copy. If you suggest a new feature or like to suggest a change, send a patch to the mailing-list with [PATCH] in the subject.
To create a diff from the current repository, use the following command:
% svn diff
Normally, unlike CVS, you don't have to tell SVN which files you changed; however, you may like to diff only a part of the repository. To do that, specify the files to diff:
% svn diff modules/gui/qt4/qt4.hpp
Note that SVN defaults to the "unified" diff format, so the "-u" option doesn't have to be passed.
Applying a diff
Subversion does not contain a built in command to apply diffs to the current working copy (for example, to review or commit diffs published in Bugzilla); instead, you can use the regular patch unix utility:
% patch -p0 < patch
TortoiseSVN has a built-in support for applying a diff.
.cvsignore / Ignoring files
You can ignore some files, using metadata:
% svn propedit svn:ignore mydirectory
Changing file structure
Add a file
You can add files or folders to the working copy, to be included in the next diff or commit, using the command:
% svn add file.name
If file.name is a text-based document, you should do
% svn propset svn:eol-style native file.name
If you add a folder, it will add all the files included in the folder, except for files in the ignored list.
Delete a file
You can delete files or folders from the working copy, to be deleted in the next commit or marked as such in the next diff, using the command (which will automatically delete the files from the working copy, but won't delete folders in such way):
% svn delete file.name
Make sure the file or folder do not have local modifications, else they won't be deleted unless you force the deletion.
Move a file
You no longer create new files from scratch when moving files!
% svn mv file1 file2
You can also do it with entire folders.
Reverting your changes
If your changes in the working copy are not useful in your opinion, you can revert them using the following command:
% svn revert
You must use parameters for this command. To revert all your changes in the working copy, use:
% svn revert -R .
To revert the changes in a specific file, use:
% svn revert file.name
Reverting can also remove added files (they won't be deleted, just removed and considered "unknown files", just like you didn't use
svn add at first), and restore deleted files (both deleted by hand and deleted by
Checking the status of the working copy
You can check the status of your working copy using the following command:
% svn status
These are several important letters in the first column of the item, which show the status:
- M = the item was modified by you
- A = the item was added by you (using
- D = the item was deleted by you (using
- ? = the item is not under the version control, but exist
- ! = the item is missing (under the version control, but not exist - probably deleted without using
svn delete) or incomplete
Checking out specific revision number
You can check specific repository revision using following command :
% svn checkout -r 12345 svn://svn.videolan.org/libdvbpsi/trunk libdvbpsi-trunk
If you have a write access for the server, you can use an SSH access instead of HTTP access.
Commits, or check ins, are the action of applying your changes from the working copy to the web repository. Use the following command to do that:
% svn commit
Using the command without the parameters will fail, unless you've configured an editor, because you have to enter a comment for the file logs. You can use one of the following forms:
Are documented in the SVN Book that you should definitively read.