# GitHub repository synchronization for Matlab If your Matlab project uses other GitHub repositories, then you can use this function to ensure those those dependencies are installed (cloned) and updated. ## Installation Clone this repository to somewhere relevant. ```matlab cd('~/Documents/Matlab') system('git clone https://github.com/drbenvincent/github-sync-matlab.git') ``` ## Example use Make sure the folder is on the matlab path ```matlab addpath('~/Documents/Matlab/github-sync-matlab') ``` Use as follows. *Warning this will download or update the repositories to your machine.* ```matlab dependencies={ 'https://github.com/drbenvincent/mcmc-utils-matlab', 'https://github.com/altmany/export_fig'}; githubSync(dependencies) ``` ## Optional input arguments ### Selective updating 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`). ```matlab githubSync(dependencies, 'exclude', [false true]) ``` ### Update the updater Get any updates to this updating code ;) Uses recursive black magic. ```matlab githubSync(dependencies, 'selfUpdate', true) ``` ## Using this code in a project you deploy to others 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. ```matlab 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) ```