[[TOC]] = How to use SVN = ^Because of the mass of bad and ugly Howto's of SVN found on the internet, and for the users of my SVN repository... i decided to write my own Howto^ [[BR]] [[BR]] == Basic Usage == * First of all, install '''SVN''' ( ''subversion'' package ) * Obtain a list of the possible projects to download from a SVN repository: {{{ svn list --verbose svn://dev.elivecd.org }}} * '''Download''' the sources of the subdir ''translations'': {{{ svn co svn://dev.elivecd.org/translations translations_svn }}} * ,,We have used '''translations''' for this example,, * ,,We have called the destiny directory '''translations_svn''',, * ,, ''' svn co ''' is the same as ''' svn checkout ''' ,, * '''Update''' a previous downloaded SVN copy: {{{ svn update }}} * '''IMPORTANT''': If you are a developer (that you change the source code and will send/commit it later), '''always''' update your directory/copy BEFORE to start working on it, also, it is recommended to not send your changes after hours or days of work, the reason of this is because if somebody else is working at the same time on the same sources, you or him will have a conflict with the sources when trying to send them. In the next section is explained an easy trick to resolve this easly. [[BR]] == For developers == * See the '''differences''' between your downloaded SVN and the original sources in the repository (if you have made any modifications) {{{ svn diff }}} * '''Send''' modifications of the files ''(also called '''commit''')'' {{{ svn commit -m 'Fixed the bug of double interfaces launched' svn commit evidence-gui* -m 'Sending all the evidence-gui prefixed files' }}} * You need to add a comment with the '''-m''' option, it's important that you provide a good description in order to know better ''what is about'' your modifications, and so to browse more easly changes in the repository when you are searching for specific things * '''Add''' files/directories that will be uploaded in your next commit. {{{ svn add file svn add directory svn add images/*.png }}} * '''IMPORTANT''': When you do ''svn add directory'', it will be included ALL the files and subdirectories of this directory, this means that you will add a lot of files that are not needed, like '''.edj''', elf or binary/compiled files, etc... '''PLEASE''' clean up the directories that you are adding to the SVN before to import them with this command, we dont want to have '''not-needed''' files in the SVN repository that will takes space on the server and our copies, making a svn repository slow, and that will also conflict with our own builds (like files that are compilable). '''Thanks''' * Note: If you copy a file to your directory and don't run this command, it will be not uploaded to the repository, this is very useful like if you compile a .edj file and you don't need to send it. * '''Delete''' files {{{ svn delete file svn delete images/ svn delete test*.c }}} * '''Move''' files {{{ svn mkdir data svn move images data/images }}} * '''Revert''' modifications (''Revert modifications (that are '''not commited''' yet), you can also use ''delete'' if you do it before to commit {{{ svn revert file svn revert directory }}} * Verify the status of the repository and your working environment {{{ svn status }}} * Fix your changes with another persons changes ( ,,When you have worked in this file, another person has worked also, and there are differences between the new changes, you need to fix your code with the new commit of this person,, ) {{{ ---> This section need to be edited, i have never tried these options <--- svn status svn help merge svn help resolved }}} * '''TIP''' about fixing changes (conflicts) between different codes: If you have a conflict when trying to send your modifications, because somebody else has also send modifications in the file that are you working (and so, you have started to work in a version of the sources that is previous to his changes, in other words, you need to mix your changes with his changes), an easy way to do this is to; move your conflicting directory to elsewhere, like ''directory.mine'', run ''svn update'' in order to get a new copy of that directory updated that include the changes that conflicts with yours, now run the tool ''meld'' with your modifications and the new directory (on this order), then you have in the left your changes that needs to be merged in the right, with this tool you can do it very easly and fast (try to press the keys ''shift, control, alt'' before to merge, to see more options). When you have finished to include your changes in the new directory, exit the application and commit the new directory like it was your original one, go to http://dev.elivecd.org/timeline and if your changes looks correct, remove the old directory. These are the definitions of the ''flags'' that you see when you download or update a SVN copy: ||U||Updated file, changes made on the server|| ||A||Added, file added to the copy of work|| ||D||Deleted, file deleted from the copy of work|| ||R||Replaced, (deleted and added again, normally diferent file)|| ||G||!MerGed, the file from your copy of work and the repository has changed, but added successfully|| ||C||Conflicting, the file downloaded has diferences with your file, you need to fix it manually|| [[BR]] == For Administrators and Servers == How to make a SVN server: * Verify if you have the '''svnserve''' command * Create a SVN repository ( ^we use in this example '''svnrepo''' in a home of a user created only for this^ ) {{{ su svndevels cd /home/svndevels svnadmin create svnrepo }}} * Edit the '''/etc/inetd.conf''' file and add this line: {{{ svn stream tcp nowait svndevels /usr/bin/svnserve svnserve -i -r /home/svndevels/svnrepo }}} * We have added ''-r /home/svndevels/svnrepo'' for when you check the repository from internet, you don't need to enter all ''/home/svndevels/svnrepo'' address, you have the repository directly from the simple host address * Create a new directory project {{{ svn mkdir file:///home/svndevels/svnrepo/project1 -m 'Creation of the directory' }}} * Import the source code of a project on it {{{ svn import /home/svndevels/sourcecodes/source-evidence file:///home/svndevels/svnrepo/project1 -m 'Importing the sources of evidence to project-1' }}} * Add users and give access to the repository ('''Important''' step for external connections) * Edit the configurations file {{{ vi svnrepo/conf/svnserve.conf }}} * Un-comment the lines of need configuration for give a similar look: {{{ [general] anon-access = read auth-access = write password-db = passwd }}} * ''Important to not have spaces before the first character'' * Access type: read, write, none * Where: * ''anon-access'' '''is the''' access type of the non-identified users * ''auth-access'' '''is the''' access type for the identified users * ''password-db'' '''is the''' name of the file of contains the users and passwords * Now we edit the passwd file {{{ vi svnrepo/conf/svnserve.conf }}} {{{ [users] testuser = passme }}} * Restart the inetd service now with root {{{ /etc/init.d/inetd restart }}} * Redirect the port 3690 in TCP mode to your machine ( ''You can posible to use apache configuration, manage more easy diferents users and use the port 80 and accessing by '''http''' address, but this is not described in this howto '' ) * Verify if the server works {{{ svn list --verbose svn://domain }}} * I recomend to create a "test" project for make any test before to work directly on the real project [[BR]] ---- === More information about SVN === The better documentation of SVN is in any case, the '''[http://svnbook.org/ Book of SVN]''', all things are described on this book with good sections, you learn and found really more fast with this book than using howto's found in internet, from my experience, i don't have found any real good howto about SVN in google and the only thing of i have done, is lost 4 hours for not obtain any thing The http://www.debian-administration.org website is very good, you can found a related article on http://www.debian-administration.org/articles/374 [[BR]]