сряда, 14 декември 2011 г.

Recursive SVN skipping tags and branches/
Сваляне със SVN и пропускане на директории tags и branches

Nowedays a lot of developers - open source or in IT companies are swithing to using Subversion (SVN) system for source code control.В днешно време много разработчици - такива на отворен код и такива в ИТ компании започват да използват системата Събвършън (Subversion, SVN) за управление на изходния код.

It is very common to create a directory on top level for every project you work for. Under that project directory, you usually put subdirectories:Много често се използва директорийна структура създадена най-горно ниво на работа за всеки от проектите по които се работи. Обикновено имаме:
trunk For the current and most recent state of the code that contains the latest features
tags For snapshots of code states just releasing or passing to QA or any other action
branches For branchiing the code and providing fixes for old versions.
trunk За най-скорошното състояние на кода.
tags За снимки на текущо състояние, точно преди тестване или окончателна версия или точно преди някакво друго събитие да се случи.
branches За създаване на клон от кода в които могат да се оправят грешки в по стари версии.

During development, branches are very often created (on every release) and tags are even more frequent - just before passing to Quality Assurance or when you want to mark a complete functional piece.
Usually one needs just the trunk or a specific branch or a specific tag, but rarely (not to say never) we need all of the tags or all of the branches.
It is very easy to checkout just the trunk directory. That can be easily checked out with just one svn operation.
По време на разработка, клонове (branches) се създават много често (при всяко издание на нова версия), а таговете (tags) са даже по-чести - преди всяко предаване за проверка на качеството или когато искаме да отбележим, завършеност на някакво свойство.
Обикновено човек се нуждае само от директорията с последното състояние (trunk), която може лесно да се свали само с една операция.

However simetimes the directory structure may be much more complex with a lot of subprojects on different levels of the directory structure. Each of the subprojects can have their own trunk, branches and tags subdirs. Обаче понякога директорийната структура е доста по-сложна - във множество под-проекти на различни нива в дървото. Всеки под-проект може да има свои собствени поддиректории trunk, branches и tags.
    root
    ├── projects
    │   ├── local
    │   │   ├── subproject-003
    │   │   │   ├── branches
    │   │   │   ├── tags
    │   │   │   └── trunk
    │   │   └── subproject-004
    │   │       ├── branches
    │   │       ├── tags
    │   │       └── trunk
    │   └── remote
    │       ├── subproject-001
    │       │   ├── branches
    │       │   ├── tags
    │       │   └── trunk
    │       └── subproject-002
    │           ├── branches
    │           ├── tags
    │           └── trunk
    └── shared
        ├── branches
        ├── tags
        └── trunk


In that case it would be very practical if you could download the whole tree from the root, but just skip all of the tags and branches subdirecgtories on all levels. Later, if you need a specific tag or branch, you could checkout just it - without all the other branches/tags.

Apparently this is not doable with SVN out of the box. You need to manually traverse the tree and checkout just the dirs you need one by one. Depending on the size of the tree that might be enormous effort.
В такъв случай, би било много практично ако можеше да се свали цялото дърво от самия корен надолу, но като се пропуснат всички tags, и branches директории.

За съжаление това неможе да се извърши със една операция с чист svn клиент. Трябва "ръчно" да обхождате всички необходими директории една по една. В зависимост от размера на дървото това може да се превърне в огромно усилие.


So I decided to create two command tools to automate that work. The first one is a Shell Script that runs under Linux/UNIX. The second one is a Windows Script Host file (wsf) writtern in Visual Basic and JavaScript and runs under Windows.
Both of them require that you have a command svn or svn.exe installed in your system PATH.
Here are the scripts:
Заради това, реших да създам инструментчета за автоматизиране на тази задача. Първият е шел скрипт, вървящ под Линукс/ЮНИКС. Вторият е базиран на технологията Windows Script Host (wsf), написан на вижуъл бейсик (Visual Basic) и джаваскрипт (JavaScript) и работи под Уиндоус.
И двата изискват инсталирана команда svn или svn.exe във системния път (PATH).
Unix (Bourne Shell)                       
ЮНИКС (Бьорн Шел)
Windows                       
Уиндоус
svnnotags.shsvnnotags.wsf

Няма коментари:

Публикуване на коментар