2016-09-02 71 views
-1

所以,基本上我有一个项目的2个版本,对于一些用户,我想使用最新版本,而对于其他人,我想使用旧版本。它们都具有相同的文件名,并且多个用户将同时使用它。要做到这一点,我想从不同的git分支调用函数,而无需切换分支。 有没有办法做到这一点?调用不同git分支以外的其他git分支的python代码而不切换分支

例如,当我的当前分支是v1,另一个分支是v2;根据变量flag的值,调用函数

if flag == 1: 
    # import function f1() from branch v2 
    return f1() 
else: 
    # use current branch v1 
+2

如果你能解释为什么你需要这样做可能会有帮助,例如为什么你不能在一个分支上拥有你需要的所有代码。这似乎是一个XY问题。 http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

+0

@TomDalton我已更新问题以解释详细信息 – proprius

+0

为什么这个问题downvoted? – proprius

回答

1

没有评论为什么你需要做的是,你可以简单地检出你回购了两次:一次BRANCH1,一个用于BRANCH2(不含克隆两次)。
请参阅“git working on two branches simultaneously”。

然后,可以使你的脚本知道它的电流通路(/path/to/branch1),和相对路径的其他分支(../branch2/...

+0

我不能这样做,因为代码被多个用户并行使用。如果我切换分支,标志不是1的用户也可能得到v2分支的结果 – proprius

+1

@proprius我的答案是回合*不*切换分支。这两个分支已经在那里。如果你的代码知道它,不需要任何类型的分支交换。 – VonC

0

必须有访问本/代码的两个版本,以调用两种版本的代码都是动态的。

完成此操作的最简单方法是让两个版本的代码出现在不同的位置,如VonC's answer

由于Python是它是什么,但是,你可以动态提取的特定源文件的特定版本,(使用动态进口和临时文件,或exec和内部字符串)编译它们的飞行,因此运行代码这并不是偶然细读节目的来源。 I 不要鼓励这种方法:虽然很困难(虽然不是很困难)并且容易出错,往往会出现安全漏洞,并且总体而言是一种可怕的工作方式,除非您正在编写类似Python调试器或IDE的东西。但如果这是你想要做什么,你只需将问题分解成:

  • 检查和/或特定提交(git showgit cat-file -p等)提取特定的文件,并
  • 动态加载或执行代码来自文件系统中的文件或来自内存中的字符串。

首先是一个Git编程运动(并且是相当琐碎,git show 1234567:foo.pygit show branch:foo.py:您可以使用shell重定向或Python的subprocess模块输出重定向到一个文件),当与文件来完成,二是中等难度的Python编程练习:请参阅the documentation,特别关注importlib