代码分发的好解决方案
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
此示例假定您仅更新此单个文件。必须进行修改才能处理整个项目,但给出示例非常简单。
我正在创建需要以纯文本形式分发的程序特定代码(针对多个不同的程序)。截至现在和中期未来,代码仅由我编辑,但被许多使用 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
此示例假定您仅更新此单个文件。必须进行修改才能处理整个项目,但给出示例非常简单。