代码分发的好解决方案

Good Solution for code distribution

我正在创建需要以纯文本形式分发的程序特定代码(针对多个不同的程序)。截至现在和中期未来,代码仅由我编辑,但被许多使用 Windows 且不是开发人员的人使用。

我想保留每个计算机自动访问的 "repository",这样我可以修改代码,他们可以直接使用它(解决方案会显示在他们的本地程序中特定文件夹(想想 MatLab 或其他科学脚本软件)。

不用说 git 之类的东西对他们来说完全被夸大了而且一团糟。不过,版本控制和有意识的更新是一个理想的功能。

我能想到的快速而肮脏的解决方案是共享一个保管箱文件夹,然后执行 windows 自动化任务,将该文件夹复制到本地程序特定文件夹。

这个解决方案有什么陷阱吗?有没有其他系统可以推荐?

Github(或任何 git 主机)并不像您想象的那样矫枉过正,因为您可以依赖 web API 而不是要求所有用户安装 git 在他们的本地机器上。大多数语言都可以查询此网站 API,因为您只需要能够发出 HTTP 请求并处理 JSON 响应。

下面是一个非常简单的 MATLAB 更新程序示例,它依赖于 Github 的 release feature。 (这可以很容易地修改以与 master 进行比较)

function yourProgram(doUpdate)
    if exist('doUpdate', 'var') && doUpdate
        update();
    end

    % Do the actual work
end

function update()
    disp('Checking for update')

    % Information about this project
    thisVersion = 'v1.0';
    gitproject = 'cladelpino/project';

    root = ['https://api.github.com/repos/', gitproject];

    % Get the latest release from github
    release = webread([root, '/releases/latest']);

    if ~strcmp(release.tag_name, thisVersion)
        disp('New Version Found')

        % Get the current filename
        thisfile = [mfilename, '.m'];

        url = [root, '/contents/', thisfile];
        fileinfo = webread(url, 'ref', release.tag_name);

        % Download the new version to the current file
        websave(mfilename('fullpath'), fileinfo.download_url);
        disp('New Version downloaded')
    else
        disp('Everything is up to date!');
    end
end

此示例假定您仅更新此单个文件。必须进行修改才能处理整个项目,但给出示例非常简单。