If you put an Android Studio project under version control with Subversion, you will have to exclude some files from version control. Otherwise you will have local settings in your repository which will not work on other workstations. See what you have to add to Subversion’s ignore list.
First of all you will have to create your Subversion repository. svnadmin create
will be your friend here. We will not cover creating of repositories in this post. In the following text we will assume that the newly created repository is available via HTTPS from a webserver.
If you need further assistance in creating a repository and/or making it available via https you will find it in the official Subversion documentation.
Check out
Let’s assume that we have created our project in Android Studio already and it’s located in ~/AndroidStudioProjects/foo
(Linux or Mac OS X) and ${ENV:USERPROFILE}\AndroidStudioProjects\foo
(Windows) respectively. It’s an app project which resides in the sub directory app.
Note: If you create additional modules in your project you will have to process these directories exactly the same as the app directory!
Our repository for this project foo
is available under https://svn.example.com/foo
and provides already the standard folder structure:
foo
+-- trunk
+-- tags
+-- branches
First we open a terminal window (Linux or Mac OS X) or a PowerShell window (Windows). Now we change the current working directory to our projects path:
Linux or Mac OS X:
cd ~/AndroidStudioProjects/foo
Windows:
cd ${ENV:USERPROFILE}\AndroidStudioProjects\foo
In the next step we check out the trunk tree of our repository. Note that at this moment our trunk tree is still empty! The already existing files and directory in our project’s directory won’t be affected by this check out step.
svn co https://svn.example.com/foo/trunk/ .
At this point we have made a working copy out of our project’s path. Before we add the content of our project to Subversion we need to exclude the local settings and build results.
Prepare Project’s Root Directory
Now we add the following files and directories respectively to Subversion’s ignore list:
- .gradle
- local.properties
- build
This is done by the following command. Note here that this command is a multiline command which works in the same way in Windows’ PowerShell as in the Unix shell of Linux and Mac OS X. In PowerShell you only need to commit this command by an additional empty(!!) line after the command.
svn ps svn:ignore '.gradle local.properties build' .
svn will print this output on successful execution:
property 'svn:ignore' set on '.'
Preparing the Directories app and .idea
Next we add the directories app
and .idea
to Subversion so that we can change their ignore lists, too. Here we have to make sure that we add only the directories and not their contents! This is assured by the command switch --depth=empty
which switches off recursive processing of directories.
svn add --depth=empty app .idea
Note: If your project contains more modules you will have to add these directories to this command, too! The same applies to the following command in which “app” also appears.
Now we exclude the whole directory build
in app
from version control:
svn ps svn:ignore build app
We also exclude the directory libraries
as well as the files gradle.xml
and workspace.xml
from .idea
:
svn ps svn:ignore 'libraries gradle.xml workspace.xml' .idea
Adding the Rest of the Project
Last but not least we can add the rest of our project to subversion. Here we have to determine the files which should be added based upon our excludes. It is necessary to process the files which are given by the output of svn st
. If we were doing a simple recursive svn add here the files from the exclude lists would be added, too. So we need a bit sophisticated command.
On Linux and OS X we perform a bit magic with awk
and xargs
:
svn st | awk '$1 == "?" { print $2 }' | xargs svn add
On Windows the same effect will have this PowerShell command:
svn st | %{ $a = $_.trim() -split ' +',0,"regexmatch"; if($a[0] -eq '?') { Invoke-Expression ("svn add " + $a[1]) } }
Commit the Changes
Our working copy is prepared with all necessary files added. Our last step is to commit the changes to our repository:
svn ci -m 'Initial import'
The log message will be 'Initial import'
here. Change it if you prefer another text for your initial import.
This is an EXCELLENT guide! I was searching on how to properly import my project in svn and was getting frustrated until I found this.
THANK YOU so much!
Perfect manual, thanx.