In the course of automation and continuous integration , you will someday come across a stage where you have to perform svn operations . And obviously, using command line (forget fancy UIs to do your business) using command line. And then you will have to start digging in, which will take a substantial amount time ...believe me.
This happened with me recently, and I swore to myself, I cannot repeat this search and rescue operation.
The basic svn operations you must be using everyday are:
- Checkout
- Export
- Add files
- Commit
- Info
- Status
- Update
- Get properties
- Set properties
- log
- list
- revert
Lets say, you are automating a testing activity. You basic steps must be:
- Get the firmware to be tested (from svn or some repo)
- Get test code (again from repo)
- Run your test
- Commit test results into a Tag or send a report
For 3 of above tasks, you are going to need to use a lot of svn commands.
Export or Checkout ?
Before you start, you must decide to checkout or export your repositories.
If you need to commit any of the files you have brought in, then you should always "checkout" .
If you just need to run an operation , then get the result and save it to some other location or may be mail it, then just use "export" .
Checkout an svn repo
svn checkout url destination
url is the link for the repository
destination is the location where you want to save.
Wana checkout a particular revision?
Add a "@revision_number "at the end of the url .
Or
Add a -r revision_number url
Full syntax:
Wana checkout a particular revision?
Add a "@revision_number "at the end of the url .
Or
Add a -r revision_number url
Full syntax:
svn checkout -r rev_number url destination
Note that: If you don't mention a destination, then a folder of that same url path will be created.
Note that: If you don't mention a destination, then a folder of that same url path will be created.
Export an svn repo (Download locally)
svn export url destination
Add a local folder/file on an svn repo.
svn import url destination
Add files to commit
Note: This is for adding new files only . This is NOT for adding Modified files (git users....pay attention)
svn add file_path
file_path may be full or just file name
"Add" here means, staging all files with changes or new files created, that we want to add/update in svn repo.
"Add" here means, staging all files with changes or new files created, that we want to add/update in svn repo.
Commit changes
svn commit -m "Committing changes"
-m means , message. It has to be in quotes.
This step can only be done successfully if we have added some files using "svn add" in staging area.
Commit only one or a list of files
Commit a file (or files) with changes . The files has to PRE-EXIST.
This step can only be done successfully if we have added some files using "svn add" in staging area.
Commit only one or a list of files
Commit a file (or files) with changes . The files has to PRE-EXIST.
svn ci -m "Committing changes" filename1 filename2
Get information about the svn repo
svn info
svn info gives you lot of information , like revision number, url etc. Here is an example output.
"E:/my_repo> svn info or svn info url"
Path: .
Working Copy Root Path: E:\my_repo
URL: http://mysvn.tt.in.mycompany/svn/sy/libraries/esw/products/some1/software/test/implement_exec/tools/Jenkins/trunk
Relative URL: ^/libraries/abc/products/productX/software/test/implement_exec/tools/Jenkins/trunk
Repository Root: http://mysvn.tt.in.mycompany/svn/sy
Repository UUID: f83c4b24-5c02-0410-a495-ade9de72abc1
Revision: 161633
Node Kind: directory
Schedule: normal
Last Changed Author: thearc31
Last Changed Rev: 159485
Last Changed Date: 2015-12-03 20:34:15 +0530 (Thu, 03 Dec 2015)
Working Copy Root Path: E:\my_repo
URL: http://mysvn.tt.in.mycompany/svn/sy/libraries/esw/products/some1/software/test/implement_exec/tools/Jenkins/trunk
Relative URL: ^/libraries/abc/products/productX/software/test/implement_exec/tools/Jenkins/trunk
Repository Root: http://mysvn.tt.in.mycompany/svn/sy
Repository UUID: f83c4b24-5c02-0410-a495-ade9de72abc1
Revision: 161633
Node Kind: directory
Schedule: normal
Last Changed Author: thearc31
Last Changed Rev: 159485
Last Changed Date: 2015-12-03 20:34:15 +0530 (Thu, 03 Dec 2015)
As you can see, a lot of info can be obtained through this command.
Status
This is a little different than info. This command shows the files that have changes or the ones that are not added yet.
E:\MyFolder>svn status
A Project\forms.py
A Project\static\css\custom
A Project\static\css\custom\mystyle.css
A Project\views\view_user.py
M Project\views\view_project.py
A templatesProject\home.html
A templatesProject\profile.html
Status
This is a little different than info. This command shows the files that have changes or the ones that are not added yet.
svn status
E:\MyFolder>svn status
A Project\forms.py
A Project\static\css\custom
A Project\static\css\custom\mystyle.css
A Project\views\view_user.py
M Project\views\view_project.py
A templatesProject\home.html
A templatesProject\profile.html
Update a repo
E.g: svn update E:/Myfolder
This is to update our local checkout folder . We should always do this before we commit .
Get properties of a svn repo
svn update
or
svn update Directory_path
This is to update our local checkout folder . We should always do this before we commit .
Get properties of a svn repo
svn propget svn:property_name
You might need to see the properties of a repo . Note that the properties start with "svn:"
There are many available.
Let's say you want to see, what files or extensions have been ignored for a particular repo.
So you can try:
E:\My_Branches\Trunk>svn propget svn:ignore
*.idea
As you see, it shows me that files starting with .idea have been ignored for this repository.
There are many properties available. Here's are few other popular ones:
- svn propget svn:externals
- svn propget svn:log
- svn propget svn:mergeinfo
This is how you can cross verify manually.
- Right click inside the repo directory and select "properties". A new window will popup.
- Click on the "Subversion" tab.
- Click on button "Properties..." at the bottom left.
- Note the columns "Property" and "Value".
Set properties of a svn repo
svn propset svn:property_name property
You can set the properties of a repo through command line. You might need this if you are trying to bunch a number of links into one common folder. In that case, you can make a list of urls and set them as external properties.
Example: This is an example of setting external properties of a repo using a text file, while has all the links you want to set as properties.
svn propset svn:externals . -F links.txt
This is a vast topic. You can explore more on this on the svn help links.
Get svn logs
Get latest logs if you need although, I doubt you will ever need this for automation..But then who knows.
svn log
To get only limited number of latest logs , you can use :
Syntax: svn log --limit n
Where n is an integer .
Get list of folders in svn url
Get a list of all folders inside an svn url (It can be a branch or tag or a folder). It needs to be directory.
svn list url
Remove files from repo
Remove a file permanently from the repository.
svn rm/del/delete -m "message" path
Revert changes
Sometimes, we want to throw away the changes made to a file. This is for bringing the file to the same state before you started making changes.
No comments:
Post a Comment