2009-05-28 5 views
2

Как разработчики могут создавать свои пути к среде при работе в разных ветвях SVN того же проекта, чтобы им не нужно было устанавливать их пути каждый раз, когда они переключаются с одной ветви на другую ?Автоматически переключаться между ветвями SVN одного и того же проекта

Я разработчик Python, и я нахожу себя работающим в разных ветвях одного и того же проекта, и это довольно уродливо экспортировать каждый раз PYTHONPATH, когда я перехожу из одной ветки в другую.

То есть, если ваша IDE не делает это автоматически для вас (я использую vim).

+0

Похоже, вы делаете что-то очень неправильно ... Правильно ли вы используете команду «svn switch»? – Juliano

+0

Вы спрашиваете, как изменить переменную окружения при переключении рабочих копий? – hometoast

+0

Я знаю, как переключать переменную среды ... Я спрашиваю, можно ли это сделать автоматически, на случай, если я забуду это сделать. – hyperboreean

ответ

4

Для другого варианта, вы можете использовать символические ссылки, то есть ваши переменные среды указывают на него. Нравится:

branch1/ 
branch2/ 
current -> branch1/ 

Тогда, если вы хотите работать на branch2, просто укажите «текущий» на него. Ваши переменные среды будут указывать на «текущий».

1

Таким образом, ваш рабочий процесс должен поддерживать отдельные ветви в отдельных рабочих каталогах? Это нормально, это довольно разумный рабочий процесс с Subversion.

Лично я хотел бы изменить любые программы Python, которые у вас есть, в исходном элементе управления, чтобы искать свои собственные библиотеки и изменять sys.path перед импортом чего-либо; таким образом они будут работать независимо от того, где они были перемещены.

#!/usr/bin/env python 
import os, sys 
basedir = os.path.dirname(os.path.realpath(__file__)) 
sys.path.insert(0, os.path.join(basedir, 'lib')) 

Если вы не сделаете этого, вы можете поставить оболочку исполняемый файл в вашем ~/bin или любой другой, где-то в $PATH,

#!/bin/bash 
dir=$(pwd) 
while [[ $dir !=/]]; do 
    if [[ -d "$dir/lib" ]]; then 
     export PYTHONPATH="$dir/lib${PYTHONPATH:+:$PYTHONPATH}" 
     break 
    fi 
    dir="${dir%/*}" 
done 
if (($# > 0)); then exec "[email protected]"; fi 

который просто осматривается для каталога lib предварять в $PYTHONPATH прежде чем запускать все, что захотите. Возможно, назовите его «py».

 
$ cd dir1   # dir1/lib exists 
$ py ./my-program 
$ cd ../dir2  # dir2/lib exists 
$ py ./my-program 

Это также возможно иметь рабочий процесс, где вы остаетесь в пределах одного рабочего каталога, используя svn sw изменить ветви. Поскольку ваш путь никогда не изменяется, установка PYTHONPATH однажды останется действительной даже при изменении ветки.

(Это общий рабочий процесс в git, монотонная, Hg и т.д.)

Смежные вопросы