自动在同一项目的SVN分支之间切换

时间:2009-05-28 18:20:11

标签: linux svn environment-variables

开发人员在处理同一项目的不同SVN分支时如何设置其环境路径,以便每次从一个分支切换到另一个分支时都不需要设置路径?

我是一名Python开发人员,我发现自己在同一个项目的不同分支上工作,当我从一个分支切换到另一个分支时,每次导出PYTHONPATH都非常难看。

如果您的IDE不自动为您执行此操作(我使用的是vim)。

2 个答案:

答案 0 :(得分:4)

对于另一个选项,您可以使用符号链接,然后让您的环境变量指向它。像:

branch1/
branch2/
current -> branch1/

然后,如果你想在branch2上工作,只需指向'current'即可。您的环境变量将指向“当前”。

答案 1 :(得分: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 "$@"; 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等。)