If your Matlab project uses other GitHub repositories, then you can use this function to ensure those those dependencies are installed (cloned) and updated.
Clone this repository to somewhere relevant.
cd('~/Documents/Matlab')
system('git clone https://github.com/drbenvincent/github-sync-matlab.git')
Make sure the folder is on the matlab path
addpath('~/Documents/Matlab/github-sync-matlab')
Use as follows. Warning this will download or update the repositories to your machine.
dependencies={
'https://github.com/drbenvincent/mcmc-utils-matlab',
'https://github.com/altmany/export_fig'};
githubSync(dependencies)
Optionally provide a vector (same length as dependencies
) indicating which dependencies to exclude from updates. The vector can be logical (true
or false
) or binary (0
or 1
).
githubSync(dependencies, 'exclude', [false true])
Get any updates to this updating code ;) Uses recursive black magic.
githubSync(dependencies, 'selfUpdate', true)
If you want to just use this code to keep your repo's up to date for your own work then it's fairly straightforward. However, you may also want to deploy some code, to be used by other people. While this repo will help keep dependencies up to data, there is a bit of a chicken and egg problem. How does an end user first install this code?
If you just include this code (along with the licence please) then that should be fine. But if you wanted it to be in it's own repo then you can include the code below in setup code in your deployed package. It will attempt to update the repo, but it will fail the first time (due to it not being installed) and then clone it. Every subsequent time, it will just update.
startDir = cd;
repoURL = 'https://github.com/drbenvincent/github-sync-matlab';
repoName = 'github-sync-matlab';
try
% Attempt to pull latest verion
cd(fullfile(defineInstallPath(),repoName))
addpath(cd)
system('git pull');
catch
% If this fails, we assume repo is not present, therefore clone
cd(defineInstallPath())
system( sprintf('git clone %s.git', repoURL) )
end
cd(startDir)