Version control, also known as revision control and source control, is the management of changes to information. A version control system keeps track of software versions throughout development. A distributed version control system allows many developers to work on a given project without requiring that they maintain a connection to a common network.
In order to be able to work on our LabVIEW code you need to follow the steps described here.
Go to gitlab.com/users/sign_up and create a free account. Then let us know about your username so we can grant you access to our repositories.
Install git on your development machine.
There's an in-depth description of Working with Git on Windows available at beanstalk. It covers the installation of Git for Windows as well as installing SSH keys.
Git itself is a collection of tools that are operated from the command line (or bash). However, there are GUI clients available for all major operating systems:
If you're using a GUI client, some of these settings may be done via its settings dialog.
Git checks 4 places for a configuration file, cascading settings in the following order:
.gitconfigfile located at
If you haven't been asked for your name and your email address during installation, you can manually set this information:
git config --global user.name "Your Name" git config --global user.email "email@example.com"
[user] name = Your Name email = firstname.lastname@example.org [core] excludesfile = /some/path/to/.gitignore_global filemode = false
exludesfile mentioned in the .gitconfig file (the global .gitignore file) defines which files to ignore (exclude from versioning) for all repositories on the computer its stored on. You can set the path of the global exludesfile to the actual user's home directory with
git config --global core.excludesfile '~/.gitignore'
Each repository and each directory in it can have its own .gitignore file.
# Generic: Temporary Files and Logs *~ ._* .DS_Store Thumbs.db ~*.docx ~*.xlsx *.log*
# LabVIEW Metadata *.aliases *.lvlps .cache/ # LabVIEW Binaries/Builds artifacts/ builds/ *.lvlibp
If you're using msysgit on Windows:
.gitconfigfile resides at
~/.gitconfigfile resides at your
echo %PROGRAMFILES(X86)% and
echo %HOMEPATH% from a Windows command prompt to find the specific locations.
Set the global .gitignore file location to
git config --global core.excludesfile "%USERPROFILE%\.gitignore"
The above command will only set the location of the ignore file that git will use. The file has to still be manually created in that location and populated with the ignore list.
Open up My Computer → Advanced System Settings → Environment Variables. Then:
C:\Program Files (X86)\Git\bin) to the
If your repository is on a filesystem whose executable bits are unreliable (like FAT), git should be configured to ignore differences in file modes recorded in the index and the file mode on the filesystem if they differ only on executable bit:
git config --local core.filemode false
git config --global core.filemode false
To establish a secure connection between your computer and GitLab via Secure Shell (SSH) you will need to create and install SSH keys. The private key resides on your computer, the public key is stored at the GitLab server.
Add your key by navigating to the 'SSH Keys' section in your user profile, selecting 'Add SSH Key' and copy-pasting the public key to the 'key' field. Please copy the complete key (a long string starting with
ssh- and ending with the comment you specified, usually your email address).
For some setups, the SSL certificate verification will fail. Error messages might be:
error: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing (repo)
Cloning into 'c:\repo-path'... ssh_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository
If it is acceptable to turn off the SSL validation instead of actually solving the issue this will turn off validation for the current repo
git config --local http.sslVerify false
If you would rather have this as a default behaviour for git then the following will do it for all repos
git global --local http.sslVerify false
and for those that would rather add to the .git/config file directly the entry looks like
[http] sslVerify = false
We created a test repository to let you check your installation and make your first steps.
To get the code you need to clone a remote repository:
git clone email@example.com:hampel-soft/hse/hampelsoft-test.git
Beware: SSH clients use the
known_hosts file to authenticate the server, to check that it isn't connecting to an impersonator. The first time you connect to a new server, you have to acknowledge the authenticity of the server by accepting the ECDSA key fingerprint. Some GUI clients hide the appropriate message, so if you get permission errors, try cloning from the command line.
A submodule is a repository embedded inside another repository. We provide a detailed description and other resources on our Best Practices page on git submodules.
hampelsoft-test repository contains the
hampelsoft-test-sub repo as a submodule. After cloning the repository, the submodule directory is empty (as it is uninitialized). The following command pulls the contents of the submodule repository into the local submodule folder:
cd hampelsoft-test git submodule update --init --remote --recursive
To propose files for version controlling (to make git work with your files) you need to stage the files:
git add README.txt
To actually add new or changed files to the repository, you need to commit them:
git commit -m "first commit"
To send your changes to the central, remote repository, you need to push your local repository:
git push -u origin master
You can find more information on how to work with(in) Source Code Control in our Best Practices section:
Please read Version Numbers for more information on our version number formats and policy.
Git does not give perfect integer revision numbers that increment on each commit. Instead, git hashes the commit data and uses that as a unique identifier of the commit. That means one commit could be
8d844d8d… and the next
f1728db4…, which is incomprehensible AND unusable as (part of) our version numbering convention.
However, git allows you to create descriptive labels for marking specific points in history as being important, i.e. creating pointers to specific commits. These pointers are called tags. Typically, tagging is used for marking release points (v1.2.3, and so on), and that's exactly what we do, as well.
By courtesy of Fabiola De La Cueva
pageant is a tool that runs at startup so you only have to enter your password once:
By courtesy of Fabiola De La Cueva
Instructions on how to configure your client tool to use LabVIEW Compare and LabVIEW Merge towards the end of this article: