If you want to use Git™ to merge branches in MATLAB®, you must install a command-line Git client and make it available system-wide.
Check if Git is installed using the command !git
in
MATLAB. If it returns nothing, you need to install command-line Git.
Operating Systems | Instructions |
---|---|
On Windows® |
|
On Linux® | Git is available for most distributions. Install Git for your distribution. For example, on Debian®, install Git by entering: sudo apt-get install git |
On Mac | On Mavericks (10.9) or above, run |
You can clone a remote repository like GitHub® and GitLab™ using HTTPS or SSH. To prevent frequent login
prompts when you interact with your remote repository using HTTPS, add a new public
key and clone the repository using SSH instead. To avoid problems connecting using
SSH, set the HOME
environment variable and use it to store your
SSH keys. For more information, see Use SSH Authentication with MATLAB.
To avoid corrupting binary files, register the binary files before using Git to merge branches. For more information, see Register Binary Files with Git.
To prevent frequent login prompts when you interact with your remote repository using HTTPS, add a new public key and clone the repository using SSH instead.
MATLAB
Git integration uses the user HOME
environment variable
to locate the .ssh
folder containing SSH keys. If the
HOME
environment variable is not set or the SSH keys are not
stored properly, you will encounter problems connecting using SSH to remote
repositories like GitHub and GitLab.
To use SSH authentication inside MATLAB:
Use ssh-keygen
to generate valid SSH keys. In the
Command Prompt,
enter:
ssh-keygen
Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\username/.ssh/id_rsa): Created directory 'C:\Users\username/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\username/.ssh/id_rsa. Your public key has been saved in C:\Users\username/.ssh/id_rsa.pub. The key fingerprint is: SHA256:/Nc9/tnZ7Dmh77+iJMxmPVrlPqaFd6J1j1YRXEk3Tgs company\username@us-username
ssh-keygen
confirms where you want to save the key (.ssh/id_rsa
for example) and asks for a passphrase. If you do not want to type a
password when you use the key, leave the passphrase empty. If you
already have keys in the specified folder, ssh-keygen
asks if you want to override them.Place your keys in the HOME/.ssh
folder. To verify
which HOME
directory the MATLAB
Git integration is working with, in the MATLAB Command Window, enter:
getenv('HOME')
If getenv('HOME')
returns nothing, you need to set
your HOME
environment variable.
To set the HOME
environment variable on Windows:
In the Start Search box, search for and select "advanced system settings".
In the Advanced tab, click Environment Variables.
In the User Variables section, click
New. Create the
HOME
environment variable and specify its
value.
The HOME
environment variable is always set on
Linux and Mac.
Configure your GitHub or GitLab account to use the SSH keys:
Copy the contents of .pub
file in the
.ssh
folder.
Paste the contents in the Add SSH key field in the SSH keys section of your account settings.
If you use third-party source control tools, you must register your MATLAB and Simulink® file extensions such as .mlx
, .mat
,
.fig
, .mlapp
, .mdl
,
.slx
, .mdlp
, .slxp
,
.sldd
, and .p
as binary formats. If you do not
register the extensions, these tools can corrupt your files when you submit them by changing
end-of-line characters, expanding tokens, substituting keywords, or attempting to automerge.
Corruption can occur whether you use the source control tools outside of MATLAB or if you try submitting files from MATLAB without first registering your file formats.
Also check that other file extensions are registered as binary to avoid corruption at
check-in. Check and register files such as MEX-files, .xlsx
,
.jpg
, .pdf
, .docx
, etc.
After you install a command-line Git client, you can prevent Git from corrupting your files by inserting conflict markers. To do so,
edit your .gitattributes
file to register binary files. For
details, see:
If you do not already have a .gitattributes
file in
your sandbox folder, create one at the MATLAB command prompt by entering:
edit .gitattributes
Add these lines to the .gitattributes
file:
*.mlx -crlf -diff -merge *.mat -crlf -diff -merge *.fig -crlf -diff -merge *.mdl -crlf -diff -merge *.slx -crlf -diff -merge *.mlapp -crlf -diff -merge *.p -crlf -diff -merge *.mdlp -crlf -diff -merge *.slxp -crlf -diff -merge *.sldd -crlf -diff -merge *.slxc -crlf -diff -merge *.mlproj -crlf -diff -merge *.mldatx -crlf -diff -merge *.slreqx -crlf -diff -merge *.sfx -crlf -diff -merge *.sltx -crlf -diff -merge
Check for other file types you use that you need to register as binary.
Check for files such as MEX-files (.mexa64
,
.mexmaci64
, .mexw64
),
.xlsx
, .jpg
,
.pdf
, .docx
, etc. Add a line to
the attributes file for each file type you need.
*.mexa64 -crlf -diff -merge *.mexw64 -crlf -diff -merge *.mexmaci64 -crlf -diff -merge *.xlsx -crlf -diff -merge *.docx -crlf -diff -merge *.pdf -crlf -diff -merge *.jpg -crlf -diff -merge *.png -crlf -diff -merge
Restart MATLAB so you can start using the Git client.
You can reduce your Git repository size by saving Simulink models without compression. Turning off compression results in larger SLX files on disk but reduces repository size.
To use this setting with new SLX files, create your models using a model template with SLX Compression set to none. For existing SLX files, set compression and then save the model. For more information, see Set SLX Compression Level (Simulink).
To reuse code from another repository, you can specify Git submodules.
To clone an external Git repository as a submodule:
Right-click in the MATLAB Current Folder browser, and select Source Control > Submodules.
In the Submodules dialog box, click the + button.
In the Add Submodule dialog box, in the Remote box, specify a repository location. Optionally, click Validate.
In the Path box, specify a location for the submodule and click OK. The Submodules dialog box displays the status and details of the submodule.
Check the status message, and click Close.
After using Pull to get the latest changes from a remote repository, check that submodules are up to date by clicking Submodules and then click Update. If any submodule definition have changed, then the update ensures that the submodule folder contains the correct files. Update applies to all child submodules in the submodule hierarchy.
When you want to manage the added submodule, open the Submodules dialog box.
To get the latest version of a submodule, in the Submodules dialog box, click Fetch.
After fetching, you must merge. Check the
Status message in the Submodules dialog box
for information about your current branch relative to the remote
tracking branch in the repository. When you see the message Behind
, you need to merge in
changes from the repository to your local branch.
Click Branches and merge in the origin changes to your local branch using the Branches dialog box. See Fetch and Merge.
If you make changes in your submodule and want to send changes back to the repository:
Perform a local commit in the parent folder.
Open the Submodules dialog box and click Push.
If you want other users to obtain your changes in the submodule when they clone the parent folder, make sure the index and head match.
In the Submodules dialog box, check the index and head values. The index points to the head commit at the time you first cloned the submodule, or when you last committed the parent folder. If the index and head do not match, you must update the index.
To update the index, commit your changes in the parent folder, and then click Push in the Submodules dialog box. This action makes the index and head the same.