调用除当前存储库之外的不同git分支的python代码而不切换分支

时间:2016-09-02 10:11:34

标签: python git gitpython

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

例如,当我的当前分支是v2而另一个分支是flag时;根据变量if flag == 1: # import function f1() from branch v2 return f1() else: # use current branch v1 的值,调用函数

<input id="inputFileToLoad" type="file" onchange="encodeImageFileAsURL();" />
<div id="imgTest"></div>
<script type='text/javascript'>
  function encodeImageFileAsURL() {

    var filesSelected = document.getElementById("inputFileToLoad").files;
    if (filesSelected.length > 0) {
      var fileToLoad = filesSelected[0];

      var fileReader = new FileReader();

      fileReader.onload = function(fileLoadedEvent) {
        var srcData = fileLoadedEvent.target.result; // <--- data: base64

        var newImage = document.createElement('img');
        newImage.src = srcData;

        document.getElementById("imgTest").innerHTML = newImage.outerHTML;
        alert("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
        console.log("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
      }
      fileReader.readAsDataURL(fileToLoad);
    }
  }
</script>

2 个答案:

答案 0 :(得分:1)

如果没有评论为什么你需要这样做,你可以简单地检查你的回购两次:一次用于branch1,一次用于branch2(没有克隆两次)。
请参阅“git working on two branches simultaneously”。

然后,您可以让脚本知道其当前路径(/path/to/branch1)以及其他分支的相对路径(../branch2/...

答案 1 :(得分:0)

必须让这两个版本的代码都存在/可访问,以便动态调用这两个版本的代码。

实现此目的的最简单方法是让代码的两个版本都存在于不同的位置,如VonC's answer

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

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

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