调用当前存储库以外的不同git分支的python代码,无需切换分支

调用当前存储库以外的不同git分支的python代码,无需切换分支,python,git,gitpython,Python,Git,Gitpython,所以,基本上我有一个项目的两个版本,对于一些用户,我想使用最新版本,而对于其他用户,我想使用旧版本。它们都有相同的文件名,多个用户将同时使用。为了实现这一点,我想从不同的git分支调用函数,而不实际切换分支。 有没有办法做到这一点 例如,当我的当前分支是v1,而另一个分支是v2;根据变量flag的值,调用函数 if flag == 1: # import function f1() from branch v2 return f1() else: # use curren

所以,基本上我有一个项目的两个版本,对于一些用户,我想使用最新版本,而对于其他用户,我想使用旧版本。它们都有相同的文件名,多个用户将同时使用。为了实现这一点,我想从不同的git分支调用函数,而不实际切换分支。 有没有办法做到这一点

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

if flag == 1:
    # import function f1() from branch v2
    return f1()
else:
    # use current branch v1
您只需签出回购协议两次,一次签出branch1,一次签出branch2(无需克隆两次),无需说明为什么需要这样做。
见“”

然后,您可以让脚本知道它的当前路径(
/path/to/branch1
),以及到另一个分支的相对路径(
。/branch2/…

为了动态调用这两个版本的代码,必须同时显示/访问这两个版本的代码

实现这一点最简单的方法是将两个版本的代码放在不同的位置,如中所示

但是,由于Python就是这样,您可以动态提取特定源文件的特定版本,动态编译它们(使用动态导入和临时文件,或
exec
和内部字符串),从而运行在随意阅读程序源代码时不会出现的代码。我不鼓励这种方法:它很难(虽然不是很难)而且容易出错,容易出现安全漏洞,而且总体来说是一种糟糕的工作方式,除非您正在编写Python调试器或IDE之类的东西。但如果这是您想要做的,您只需将问题分解为:

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

第一个是Git编程练习(非常简单,
Git show 1234567:foo.py
Git show branch:foo.py
:您可以使用shell重定向或Python的
子流程
模块将输出重定向到文件),当使用文件时,第二个是难度适中的Python编程练习:请参阅,特别关注
importlib

,如果您能解释为什么需要这样做,例如为什么不能在一个分支上拥有所需的所有代码,可能会有所帮助。这似乎是一个XY问题@TomDalton我已经更新了问题来解释细节为什么这个问题被否决了?我不能这样做,因为代码被多个用户并行使用。如果我切换分支,标志不是1的用户也可能得到v2的结果branch@proprius我的答案是不切换分支。这两个分支已经在那里了。如果您的代码知道它,则不需要任何类型的分支切换。