Difference between revisions of "Subversion"

From Organic Design wiki
(Useful SVN commands)
(cleanup)
Line 1: Line 1:
[[Category:Subversion]]
 
== OrganicDesign SVN ==
 
Eventually we'd like to have an proper web-browsable SVN repository like WikiMedia. We don't need SVN for content backup as we're now using Unison for that (see the [[Set up a distributed file system‎]] project).
 
 
=== Domain ===
 
The domain ''svn.organicdesign.co.nz'' is pointing at the server (see [[organicdesign.vhost]] for details), and the following repositories and their associated directory structures have been set up. Currently only the [http://svn.organicdesign.co.nz/peerd peerd] repository has had the data imported from its associated directory structure since there is currently no security in place.
 
{{code|<pre>
 
/var/svn/peerd
 
/var/svn/peerix
 
/var/svn/www
 
/var/peerd
 
/var/peerix
 
/var/www
 
</pre>}}
 
 
 
The directory structures that are in day-to-day use such as ''/var/www'' will then be synchronised regularly on a cron job with the repositories in the same way as any of the users local versions.
 
 
=== Security ===
 
I've set up SSL using a self-signed certificate for ''www.organicdesign.co.nz'' which allows connection to all the wikia via either HTTP or HTTPS but will give a warning message on first connection (or maybe on every connection depending on the browser). I haven't enabled SSL for the svn setup currently as I'm not sure how to do this yet.
 
 
=== Problems ===
 
When attempting to import the ''/var/www'' structure into the ''/var/svn/www'' repository it bailed after coming across a filename containing special characters with the following fatal error:
 
{{code|<pre>
 
svn: Can't convert string from native encoding to 'UTF-8':
 
svn: A?\195?\164o?\195?\188.gif
 
</pre>}}
 
 
 
=== To set up later ===
 
''Exclusions: we don't need cache data such as ''files/thumb'' directories being included in synchronisation...''
 
 
=== Inclusion of local user data in our distributed backups ===
 
This idea could also tie in with the new [[Extension:SimpleUploads]] idea of users being able to maintain their own on-line file structure. Since these files would be part of the svn repository they'd get included in the local updates and effectively we'd all have automatic distributed backup of our files. These files could include our important local files too like emails etc simply by ensuring that they're stored in our own user area of our local repository. We could then just run crons to keep them updated in both directions. Edit conflicts would not be a concern with any of this since we're talking about our own user-files which are not accessed by anyone else.
 
 
== MediaWiki SVN ==
 
 
MediaWiki's SVN uses SSH public key so you don't need a password, so you'll need to supply your ~/.ssh/id_rsa.pub file to the person setting up your [[MW:Commit access|commit access]] (if that files doesn't exist, run ssh-keygen from non-root shell using blank passwd when prompted, see [http://www.debian.org/devel/passwordlessssh this link] for details). Also, you need to set up your [[MW:Subversion/auto-props|auto-props]]. Note also that the commit's are automatically shown on the ''#mediawiki'' IRC channel (see [http://freenode.net/faq.shtml freenode FAQ] re registering a nickname etc) so it's good to have that open when working on the MediaWiki code.
 
MediaWiki's SVN uses SSH public key so you don't need a password, so you'll need to supply your ~/.ssh/id_rsa.pub file to the person setting up your [[MW:Commit access|commit access]] (if that files doesn't exist, run ssh-keygen from non-root shell using blank passwd when prompted, see [http://www.debian.org/devel/passwordlessssh this link] for details). Also, you need to set up your [[MW:Subversion/auto-props|auto-props]]. Note also that the commit's are automatically shown on the ''#mediawiki'' IRC channel (see [http://freenode.net/faq.shtml freenode FAQ] re registering a nickname etc) so it's good to have that open when working on the MediaWiki code.
  
Line 43: Line 7:
 
svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/RecordAdmin
 
svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/RecordAdmin
 
</bash>}}
 
</bash>}}
 
 
The ease of directory structure construction suggests that extensions maintained in an svn do not require any symbolic link manipulation as suggested in the article [[OD/Wikia]], otherwise a conflict will arise when users try to checkout content that is maintained in a versioned directory structure referenced by symbolic links.
 
 
=== See also ===
 
*[[MediaWiki SVN Statistics]]
 
*[http://zaphod.leonweber.de/codeswarms/mediawiki.h264.1024x786.avi CodeSwarm video of MW repository] (38M)
 
 
=== MediaWiki SVN branches OrganicDesign is involved with ===
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/config/index.php?revision=34512&view=markup config/index.php] - The MediaWiki installer script
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/Database.php?view=markup Database.php] - General database class
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/DatabaseSqlite.php?view=markup DatabaseSqlite.php] - SQLite database layer
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/DatabaseMssql.php?view=markup DatabaseMssql.php] - Microsoft SQL Server database layer
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/AutoLoader.php?view=markup AutoLoader.php] - List of potentially loaded classes
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/maintenance/mssql/ maintenance/mssql] - MSSQL table definitions and docs
 
*[http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/maintenance/sqlite/ maintenance/sqlite] - SQLite table definitions and docs
 
*[[:Category:Extensions in the MediaWiki SVN repository]]
 
 
== Command Overview ==
 
The typical work cycle looks like this:
 
 
;Update your working copy
 
{{code|<pre>
 
svn update
 
</pre>}}
 
 
 
;Make changes
 
{{code|<pre>
 
svn add
 
svn delete
 
svn copy
 
svn move
 
</pre>}}
 
 
 
;Examine your changes
 
{{code|<pre>
 
svn status
 
svn diff
 
</pre>}}
 
 
 
;Possibly undo some changes
 
{{code|<pre>
 
svn revert
 
</pre>}}
 
 
 
;Resolve Conflicts (Merge Others' Changes)
 
{{code|<pre>
 
svn update
 
svn resolved
 
</pre>}}
 
 
 
;Commit your changes
 
{{code|<pre>
 
svn commit
 
</pre>}}
 
  
 
== Usage ==
 
== Usage ==
Line 116: Line 20:
 
{{code|<pre>
 
{{code|<pre>
 
svn log -v http://[PATH TO SERVER SVN PROJECT]
 
svn log -v http://[PATH TO SERVER SVN PROJECT]
 +
</pre>}}
 +
 +
 +
Or to get changes between a certain date range in a local repo;
 +
{{code|<pre>
 +
svn log -r {2012-02-10}:{2012-02-15}
 
</pre>}}
 
</pre>}}
  
Line 216: Line 126:
 
</pre>}}
 
</pre>}}
  
 
+
=== Problems ===
To upload the CLIENT copy changes to the SERVER copy use the ''commit'' command;
+
When attempting to import the ''/var/www'' structure into the ''/var/svn/www'' repository it bailed after coming across a filename containing special characters with the following fatal error:
 
{{code|<pre>
 
{{code|<pre>
svn commit /tmp/CLIENT
+
svn: Can't convert string from native encoding to 'UTF-8':
</pre>}}
+
svn: A?\195?\164o?\195?\188.gif
 
 
 
 
Cleaning up directories in ''/tmp'';
 
{{code|<pre>
 
rm -rf /tmp/SERVER /tmp/CLIENT /tmp/MYTREE
 
 
</pre>}}
 
</pre>}}
  
Line 235: Line 140:
 
== See also ==
 
== See also ==
 
*[[Configure SVN]] ''- our procedure for setting up SVN and WebSVN on our servers''
 
*[[Configure SVN]] ''- our procedure for setting up SVN and WebSVN on our servers''
 +
*[[MediaWiki SVN Statistics]]
 +
*[http://zaphod.leonweber.de/codeswarms/mediawiki.h264.1024x786.avi CodeSwarm video of MW repository] (38M)
 
*[http://www.howtoforge.com/debian_subversion_websvn Setting up websvn on Debian/Apache]
 
*[http://www.howtoforge.com/debian_subversion_websvn Setting up websvn on Debian/Apache]
 
*[http://jeremyknope.com/articles/2006/05/30/howto-basic-subversion-setup-and-usage Jeremy Knope's tutorial]
 
*[http://jeremyknope.com/articles/2006/05/30/howto-basic-subversion-setup-and-usage Jeremy Knope's tutorial]
Line 247: Line 154:
 
*[http://vis.cs.ucdavis.edu/~ogawa/codeswarm CodeSwarm] ''- renders video's of subversion repository activity''
 
*[http://vis.cs.ucdavis.edu/~ogawa/codeswarm CodeSwarm] ''- renders video's of subversion repository activity''
 
*[http://wiki.greenstone.org/wiki/index.php/Useful_SVN_Commands Useful SVN commands (wiki)]
 
*[http://wiki.greenstone.org/wiki/index.php/Useful_SVN_Commands Useful SVN commands (wiki)]
[[Category:Projects]][[Category:Peerix]][[Category:OD2]]
+
[[Category:Projects]][[Category:Subversion]]

Revision as of 13:19, 26 February 2012

MediaWiki's SVN uses SSH public key so you don't need a password, so you'll need to supply your ~/.ssh/id_rsa.pub file to the person setting up your commit access (if that files doesn't exist, run ssh-keygen from non-root shell using blank passwd when prompted, see this link for details). Also, you need to set up your auto-props. Note also that the commit's are automatically shown on the #mediawiki IRC channel (see freenode FAQ re registering a nickname etc) so it's good to have that open when working on the MediaWiki code.

See MW:Subversion for details about using MediaWikis SVN. The following examples download the current code-base and an extension:

<bash>

svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3

svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/RecordAdmin </bash>

Usage

The most important command to know is how to get help;

svn help
svn help checkout # Help on check(ing)out project to CLIENT copy
svn help commmit  # Help on commit(ting) changes to SERVER


To obtain a log of the changes made in a svn project;

svn log -v http://[PATH TO SERVER SVN PROJECT]


Or to get changes between a certain date range in a local repo;

svn log -r {2012-02-10}:{2012-02-15}


To create a new repository on the server ready for importing a directory of files;

cd /tmp
mkdir SERVER
svnadmin create /tmp/SERVER/newrepos


This creates a concise database directory for the new repository on the SERVER in the directory called /tmp/SERVER;

ls -l /tmp/SERVER/newrepos
total 16
-rw-r--r--    1 User  wheel  379 Apr  3 13:58 README.txt
drwxr-xr-x    4 User  wheel  136 Apr  3 13:58 conf
drwxr-xr-x    2 User  wheel   68 Apr  3 13:58 dav
drwxr-xr-x   10 User  wheel  340 Apr  3 13:58 db
-r--r--r--    1 User  wheel    2 Apr  3 13:58 format
drwxr-xr-x   11 User  wheel  374 Apr  3 13:58 hooks
drwxr-xr-x    4 User  wheel  136 Apr  3 13:58 locks


Create an example directory for upload;

cd /tmp
mkdir MYTREE
echo '#!/usr/bin/perl -w\nprint "hello world";' > /tmp/MYTREE/helloWorld.pl
svn import /tmp/MYTREE file:///tmp/SERVER/newrepos/some/project


Listing the contents in the repository directory path;

svn list file:///tmp/SERVER/newrepos/some/project


To make a local copy you need to use the checkout command. This creates a new directory (default called newrepos) which is a local copy of newrepos.

mkdir CLIENT
cd CLIENT
svn co file:///tmp/SERVER/newrepos/some/project/  # fetches project/test.pl
svn co file:///tmp/SERVER/newrepos/some/          # fetches some/project/test.pl
rm -rf /tmp/CLIENT  
svn co file:///tmp/SERVER/newrepos/some/project/ /tmp/CLIENT # Creates CLIENT dir

Note: The directory the svn command is run in determines where the local checkout directories and files will end up.


Now that you have created a local copy all work should be conducted within it. There is a hidden directory called .svn which contains all the information required for the svn framework;

cd /tmp/CLIENT # Work in the local copy of svn


To update a file on your CLIENT directory;

cd /tmp/CLIENT
svn update # "." is updated 
cd /tmp
svn update /tmp/CLIENT # Specifying path


To add a new file to the local svn copy, first make a new file within the directory structure;

cd /tmp/CLIENT
echo '#!/usr/bin/perl -w\nprint qq(hello world!);' > /tmp/CLIENT/helloWorld2.pl
svn add helloWorld2.pl


The status command will identify differences between the CLIENT copy and the SERVER copy of the repoistory;

svn status /tmp/CLIENT


The following list provides the details of svn status output;

L      abc.c               # svn has a lock in its .svn directory for abc.c
M      bar.c               # the content in bar.c has local modifications
M      baz.c               # baz.c has property but no content modifications
X      3rd_party           # this dir is part of an externals definition
?      foo.o               # svn doesn't manage foo.o
!      some_dir            # svn manages this, but it's either missing or incomplete
~      qux                 # versioned as file/dir/link, but type has changed
I      .screenrc           # svn doesn't manage this, and is configured to ignore it
A  +   moved_dir           # added with history of where it came from
M  +   moved_dir/README    # added with history and has local modifications
D      stuff/fish.c        # this file is scheduled for deletion
A      stuff/loot/bloo.h   # this file is scheduled for addition
C      stuff/loot/lump.c   # this file has conflicts from an update
R      xyz.c               # this file is scheduled for replacement
S      stuff/squawk        # this file or dir has been switched to a branch

Problems

When attempting to import the /var/www structure into the /var/svn/www repository it bailed after coming across a filename containing special characters with the following fatal error:

svn: Can't convert string from native encoding to 'UTF-8':
svn: A?\195?\164o?\195?\188.gif

SVN GUI's

See also