Difference between revisions of "SVN"
From Blue-IT.org Wiki
(→Third: create the authz file for authorization:) |
(→svn cleanup) |
||
(21 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | == RabbitVCS == | ||
+ | |||
+ | |||
+ | == Ubuntu 12.04 == | ||
+ | |||
+ | sudo add-apt-repository ppa:rabbitvcs/ppa | ||
+ | sudo apt-get update && sudo apt-get install rabbitvcs-nautilus rabbitvcs-cli rabbitvcs-gedit | ||
+ | |||
+ | == Ubuntu 13.10 == | ||
+ | PROBLEM, please read teh next, install testing ppa and nautilus3-version! | ||
+ | * http://code.google.com/p/rabbitvcs/issues/detail?id=841 | ||
+ | |||
+ | sudo add-apt-repository ppa:rabbitvcs/rabbitvcs-testing | ||
+ | sudo apt-get update && sudo apt-get install rabbitvcs-nautilus rabbitvcs-nautilus3 rabbitvcs-cli rabbitvcs-gedit | ||
+ | |||
== SVN Integration with https == | == SVN Integration with https == | ||
+ | This HowTo is tested with Debian 6 (squeeze) but should be applicable to any Linux based distribution. | ||
+ | |||
First of all your repository, e.g. /home/svn must be writable by the webserver: | First of all your repository, e.g. /home/svn must be writable by the webserver: | ||
Line 10: | Line 27: | ||
apt-get install libapache2-svn | apt-get install libapache2-svn | ||
− | + | a2enmod dav | |
− | + | a2enmod dav_svn | |
+ | |||
− | To access an svn like https://serverip/svn/repo1 ( | + | To access an svn like https://serverip/svn/repo1 (with read/write access for user1) https://serverip/svn/repo2 (with read/write access for user2) |
/path/to/ | /path/to/ | ||
└── svn | └── svn | ||
Line 22: | Line 40: | ||
=== First: create a dav configuration file === | === First: create a dav configuration file === | ||
− | + | ||
+ | cd /etc/apache2/mods-available/ | ||
+ | vim dav_svn.conf | ||
<nowiki><Location /svn></nowiki> | <nowiki><Location /svn></nowiki> | ||
Line 42: | Line 62: | ||
<nowiki></Location></nowiki> | <nowiki></Location></nowiki> | ||
− | === Second: set passwords for users: === | + | === Second: set passwords for users: === |
+ | For the first user call htpasswd with the -c parameter (this _c_reates a new file and - of course - overwrites an existing one!): | ||
htpasswd -c /etc/apache2/dav_svn.passwd user1 | htpasswd -c /etc/apache2/dav_svn.passwd user1 | ||
Line 53: | Line 74: | ||
vim /etc/apache2/dav_svn.authz | vim /etc/apache2/dav_svn.authz | ||
− | ## | + | ## groups or users |
#groupname = user1,user2 | #groupname = user1,user2 | ||
Line 59: | Line 80: | ||
## the repositoryname is relative (!) to the given | ## the repositoryname is relative (!) to the given | ||
## repository in the dav_svn.conf file | ## repository in the dav_svn.conf file | ||
+ | |||
#[reponame:/] | #[reponame:/] | ||
## read / write access for all users | ## read / write access for all users | ||
− | #* = rw | + | #* = rw |
## nor read acces for this group | ## nor read acces for this group | ||
− | #@groupname = | + | #@groupname = |
## read access for this user | ## read access for this user | ||
#user1 = r | #user1 = r | ||
Line 116: | Line 138: | ||
/etc/init.d/apache2 restart | /etc/init.d/apache2 restart | ||
+ | |||
+ | = svn+ssh and https together = | ||
+ | * Already running an ssh server? | ||
+ | * Already have a user with ssh account (that's necessary) | ||
+ | * BUT: this assumes that a users are in the subversion group and therefore have access to each other!!! | ||
+ | * THAT'S WHY: for systems with greater user count use the https method! | ||
+ | |||
+ | Add the user you want to add to the subversion group: | ||
+ | adduser username subversion | ||
+ | (or later remove with: deluser username subversion) | ||
+ | |||
+ | Alter permissions of the repository "users_repository" | ||
+ | chown /home/svn www-data:subversion | ||
+ | chmod 770 /home/svn | ||
+ | cd /home/svn | ||
+ | chown -R www-data:subversion users_repository | ||
+ | find users_repository/. -type d -name "*" -exec chmod -R g+rws {} \; | ||
+ | find users_repository/. -type f -name "*" -exec chmod -R g+rw {} \; | ||
+ | |||
+ | That's it. | ||
+ | |||
+ | Now you can connect e.g.: | ||
+ | svn checkout svn+ssh://username@SERVER_IP/home/svn/users_repository | ||
+ | |||
+ | Attention: In your checked out repository you have to switch the svn access url from http to svn+ssh! | ||
+ | svn switch --relocate http://domain.com/{repo} svn+ssh://{username}@domain.com/home/{username}/svn/{repo} | ||
= svnsync = | = svnsync = | ||
Line 186: | Line 234: | ||
+ | == svn ppa == | ||
+ | Probably you are working in mixed environments. | ||
+ | |||
+ | The ubuntu svn repository always gives you access to the most actual subversion files: | ||
+ | |||
+ | * https://launchpad.net/~svn/+archive/ppa | ||
+ | |||
+ | == svn upgrade == | ||
+ | |||
+ | Be careful with this an first make a backup of your working directory! | ||
+ | |||
+ | Sometimes it could be necessary to update an svn tree to use with a newer svn version. E.g. you have an archive of subversion 1.6, copied it over to your system whitch is running subserversion 1.7. | ||
+ | |||
+ | cd YOUR_PROJECTS_DIR | ||
+ | find . -name .svn | awk '{system("cd " $0 "; cd .. ; svn upgrade")}' | ||
+ | |||
+ | == svn cleanup == | ||
+ | |||
+ | find . -name .svn | awk '{system("cd " $0 "; cd .. ; svn cleanup")}' | ||
[[Category:Project Management]] | [[Category:Project Management]] | ||
[[Category:Version Control]] | [[Category:Version Control]] |
Latest revision as of 08:00, 27 April 2014
Contents
RabbitVCS
Ubuntu 12.04
sudo add-apt-repository ppa:rabbitvcs/ppa sudo apt-get update && sudo apt-get install rabbitvcs-nautilus rabbitvcs-cli rabbitvcs-gedit
Ubuntu 13.10
PROBLEM, please read teh next, install testing ppa and nautilus3-version!
sudo add-apt-repository ppa:rabbitvcs/rabbitvcs-testing sudo apt-get update && sudo apt-get install rabbitvcs-nautilus rabbitvcs-nautilus3 rabbitvcs-cli rabbitvcs-gedit
SVN Integration with https
This HowTo is tested with Debian 6 (squeeze) but should be applicable to any Linux based distribution.
First of all your repository, e.g. /home/svn must be writable by the webserver:
MYREPO="/home/svn" chown -R www-data:www-data ${MYREPO} find ${MYREPO} -type d -exec chmod 2755 \{} \; find ${MYREPO} -not -type d -exec chmod 0644 \{} \;
Then you need mod_dav for apache2:
apt-get install libapache2-svn a2enmod dav a2enmod dav_svn
To access an svn like https://serverip/svn/repo1 (with read/write access for user1) https://serverip/svn/repo2 (with read/write access for user2)
/path/to/ └── svn ├── repo1 -> should only be rw-accessible by user1 └── repo2 -> should only be rw-accessible by user2
do the following 3 (4) steps:
First: create a dav configuration file
cd /etc/apache2/mods-available/ vim dav_svn.conf
<Location /svn> DAV svn SVNParentPath /path/to/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd AuthzSVNAccessFile /etc/apache2/dav_svn.authz # Allow access only with authentification Require valid-user # Allow acces with anonymous checkout #<LimitExcept GET PROPFIND OPTIONS REPORT> # Require valid-user #</LimitExcept> </Location>
Second: set passwords for users:
For the first user call htpasswd with the -c parameter (this _c_reates a new file and - of course - overwrites an existing one!):
htpasswd -c /etc/apache2/dav_svn.passwd user1
and for every one after that without “-c“ (because this in case will overwrite the file!!!)
htpasswd /etc/apache2/dav_svn.passwd user2
Third: create the authz file for authorization:
vim /etc/apache2/dav_svn.authz
## groups or users #groupname = user1,user2 ## repositories ## the repositoryname is relative (!) to the given ## repository in the dav_svn.conf file #[reponame:/] ## read / write access for all users #* = rw ## nor read acces for this group #@groupname = ## read access for this user #user1 = r #[reponame:/trunk/] ## read / write access for user1 to /trunk/ #user1 = rw [repo1:/] user1 = rw [repo2:/] user2 = rw
Create a virtual host if you like:
SERVERIP="1.2.3.4" MAIL="webmaster@mydomain.com" DOMAIN="svn.example.com" DOCPATH="/var/www" SSLPATH="/var/webs/ssl" CUSTOMER="" CHAINFILE="/var/webs/ssl/CAcert_chain.pem" cat << EOF > ${DOMAIN}.conf <VirtualHost ${SERVERIP}:443> ServerAdmin webmaster@${DOMAIN} ServerName www.${DOMAIN} ServerAlias ${DOMAIN} DocumentRoot ${DOCPATH} <Directory ${DOCPATH}> Options -MultiViews allow from all </Directory> # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ErrorLog /var/log/apache2/error.log SSLEngine on SSLCertificateFile ${SSLPATH}/${CUSTOMER}/${DOMAIN}.cert SSLCertificateKeyFile ${SSLPATH}/${CUSTOMER}/${DOMAIN}.key SSLCertificateChainFile ${CHAINFILE} </VirtualHost> EOF
Restart Apache:
/etc/init.d/apache2 restart
svn+ssh and https together
- Already running an ssh server?
- Already have a user with ssh account (that's necessary)
- BUT: this assumes that a users are in the subversion group and therefore have access to each other!!!
- THAT'S WHY: for systems with greater user count use the https method!
Add the user you want to add to the subversion group:
adduser username subversion (or later remove with: deluser username subversion)
Alter permissions of the repository "users_repository"
chown /home/svn www-data:subversion chmod 770 /home/svn cd /home/svn chown -R www-data:subversion users_repository find users_repository/. -type d -name "*" -exec chmod -R g+rws {} \; find users_repository/. -type f -name "*" -exec chmod -R g+rw {} \;
That's it.
Now you can connect e.g.:
svn checkout svn+ssh://username@SERVER_IP/home/svn/users_repository
Attention: In your checked out repository you have to switch the svn access url from http to svn+ssh!
svn switch --relocate http://domain.com/{repo} svn+ssh://{username}@domain.com/home/{username}/svn/{repo}
svnsync
Taken from:
Create the following variables:
MYPATH="/home/svn" URL_TO_REPO_ROOT_TO_CLONE="https://axelpospischil@ssl.qwws.net/svn/mt_roadrunner" DEST_URL="/home/svn"
(Note: „DEST_URL“ is the url to the Subversion repository you create in step 1.)
1. Create your local repository:
svnadmin create ${MYPATH}
2. Create an empty pre-revprop-change hook script:
echo '#!/bin/bash' > ${MYPATH}/hooks/pre-revprop-change
3. Make the pre-revprop-change hook script executable:
chmod +x ${MYPATH}/hooks/pre-revprop-change
4. Initialize svnsync:
svnsync init file:⁄⁄⁄${MYPATH} ${URL_TO_REPO_ROOT_TO_CLONE}
5. Synchronize:
svnsync sync ${DEST_URL}
Subversion 1.6.x needs those added to the pre-revprop-change script:
REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5"
Einrichten unter Debian
1. Svn installieren:
apt-get update apt-get install subversion
2. Eine svn Gruppe erstellen und einen Benutzer hinzufügen:
groupadd subversion addgroup username subversion
3. Ein svn Repository erzeugen oder ein Vorhandenes kopieren
mkdir /home/svn/myrepo rsync -av oldserver:/home/svn /home/. chown -R root:subversion /home/svn svnadmin create --fs-type fsfs /home/svn/myrepo/projekt1 svnadmin create --fs-type fsfs /home/svn/myrepo/projekt2
4. Einloggen via ssh (geht nur, wenn ein ssh-Schlüssel im Userverzeichnis generiert wurde)
ssh+svn://servername/home/svn/myrepo
svn ppa
Probably you are working in mixed environments.
The ubuntu svn repository always gives you access to the most actual subversion files:
svn upgrade
Be careful with this an first make a backup of your working directory!
Sometimes it could be necessary to update an svn tree to use with a newer svn version. E.g. you have an archive of subversion 1.6, copied it over to your system whitch is running subserversion 1.7.
cd YOUR_PROJECTS_DIR find . -name .svn | awk '{system("cd " $0 "; cd .. ; svn upgrade")}'
svn cleanup
find . -name .svn | awk '{system("cd " $0 "; cd .. ; svn cleanup")}'