Source Control Systems на сървъра поддържащ сайта ни
Здравейте, по повод отборните проекти и запознанството ни с source control системите ми хрумна да ви попитам следното. Има ли възможност да свържем сървърът на който е хостнат сайта ни със source control система. За да не се налага постоянно при всяка промяна да ъпдейтваме на ръка прз FTP променените файлове.
Ами мен ме интересува как да си инсталирам сорс контрол система на хостинга защото не искам постоянно през FTP на ръка да подменям файлове. Пиша темата за да може въпросът да бъде разгледан и обсъден от всички. Някой който е използвал някаква система и е доволен от нея, да сподели неща които са хубави да ги знаем - инсталации, проблеми които можем да срещнем. Иначе и аз ще направя питанка в гугъл.
Ако желаеш дай да разцъкаме да се научим. :)
Ако имаш достъп до сървъра, инсталираш SVN Server както инсталираш всеки друг софтуер за съответната операционна система. Ако нямаш достъп до сървъра - няма вариант :)
Инсталираш apache и после активираш модул dav_svn и след това е лесно. Няма нужда да инстралираш svn като stand alone. Апаш модула върши цялата работа. И не ти прави проблеми с разни корпоративни FW, които те орязват, защото работи по http/https
Ето ви един реален пример с блога ми: все се чудех хога ще го направя, ето сега бил момента :)
1. Създаваме репото:
root@repo01:~# cd /REPOS/
root@repo01:/REPOS# svnadmin create oldzhay-blog
1.1. SVN създава съответната структъра:
root@repo01:~# ll /REPOS/oldzhay-blog/
total 32
drwxrwsr-x 6 root root 4096 Jul 4 17:03 ./
drwxr-xr-x 6 root root 4096 Jul 4 17:03 ../
drwxrwsr-x 2 root root 4096 Jul 4 17:03 conf/
drwxrwsr-x 6 root root 4096 Jul 4 17:03 db/
-r--rwSr-- 1 root root 2 Jul 4 17:03 format
drwxrwsr-x 2 root root 4096 Jul 4 17:03 hooks/
drwxrwsr-x 2 root root 4096 Jul 4 17:03 locks/
-rw-rwSr-- 1 root root 229 Jul 4 17:03 README.txt
2. Конфигваме модула на апаха. Изглежда нещо такова: (Location-a е името, което ще се появи после в URL адреса. Аз лично си възприех /svn/ преди всяко име на репо като собствена номенклатура и всичките ми репота ги слагам на /svn/проект1, /svn/проект2, т.н. Въпрос на вкус :)
root@repo01:/REPOS# tail -12 /etc/apache2/mods-enabled/dav_svn.conf
<Location /svn/oldzhay-blog>
DAV svn
SVNPath /REPOS/oldzhay-blog
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
root@repo01:/REPOS#
3. Сега отиваме на клиента:
3.1. Правим начален checkout на празно репо в папката на проекта ( това в случай, че ще версионираме вече съществуващо съдържание:
root@frontend01:/var/www/oldzhay.saroolu.me# svn co http://svn-server.int/svn/oldzhay-blog/ .
Authentication realm: <http://svn-server.int:80> Subversion Repository
Password for 'ol':
Checked out revision 0.
root@frontend01:/var/www/oldzhay.saroolu.me#
3.3. Проверяваме, че е станало както трябва: (Optional)
root@frontend01:/var/www/oldzhay.saroolu.me# svn status
? index.php
? други-файлове
....
root@frontend01:/var/www/oldzhay.saroolu.me#
? означава, че файловете не са част от репото. Ако потърсите в Google "SVN status codes" показва какси са сдругите кодове (A; D; U; G; C; и т.н.)
3.3. След това правим начален checkin/commit
- Първо svn add *
root@frontend01:/var/www/oldzhay.saroolu.me# svn add *
...
A (bin) wp-includes/js/crop/marqueeHoriz.gif <-Котаго файла е бинарен (картинка, видеио, ppt, ...) си казва
...
A index.php
...
root@frontend01:/var/www/oldzhay.saroolu.me#
- После commit и си даваш сметка, че нещо си омазал по пътя:
root@frontend01:/var/www/oldzhay.saroolu.me# svn ci -m "Initial/first commit"
Authentication realm: <http://svn-server.int:80> Subversion Repository
Password for 'ol':
svn: Commit failed (details follow):
svn: Can't open file '/REPOS/oldzhay-blog/db/txn-current-lock': Permission denied
root@frontend01:/var/www/oldzhay.saroolu.me#
Сещаш се, че си забравил да оправиш пермишъните на репото, като си го създавал. Поправяш грешката:
root@repo01:~# chmod -R g+rws /REPOS/oldzhay-blog/
root@repo01:~# chown -R www-data:svn /REPOS/oldzhay-blog/
Потребителя и групата зависят от операционната система и как си решил да ги кръстиш. Пермишъните са така, както пише.
Като оправиш този проблем, вече commit-а работи:
root@frontend01:/var/www/oldzhay.saroolu.me# svn ci -m "Initial/first commit"
Authentication realm: <http://svn-server.int:80> Subversion Repository
Password for 'ol':
...
Adding index.php
Transmitting file data ...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Committed revision 1.
root@frontend01:/var/www/oldzhay.saroolu.me#
Готово! Вече си имаме код който е в репото. Може да отидете на http://svn-server.int/svn/oldzhay-blog и ще ви пита за име и парола. Разбирасе в случая нищо няма да стане, защото адреса под името е 10.x.y.z и трябват връзки (ssh или vpn) за да видиш нещо :)
Надявам се, че съм помогнал.
Айде