What is version control?
The class of systems that assists software developers in tracking and managing changes in computer programs, websites, documents, or other data is known as version control. Developers continually make improvements and modifications to the code of a software after creating it. With each update, they come up with a new version of the initial officially released code of the software.
The role of version control systems is to maintain these version updates by storing the changes in a central repository, which is a location where all the files for a specific project are stored. This process makes it easier to collaborate on the versions. They can download versions from the repository, make changes to them, and re-upload the new version they've created. To keep track, these changes stored in the repository can be viewed by other developers at any time.
What is "Git"?
As the name suggests, Git is the version control system upon which GitHub is based. Git is an open-source system created by Linus Torvalds, the creator of Linux, in 2005. (At that time, it started as a command-line tool in the Linux kernel.)
Git is more specifically a distributed version control system. It manages software versions much like other version control systems, using a central repository. The difference is that Git, as a distributed system, makes the repository available on every user's computer. This means that users employing distributed version control essentially maintain a copy of the central repository by cloning it to their own machine.
- This system operates in a way that allows users to first make changes to their own local copies and then record these changes on the central server.
- This process makes it easier to work with more detailed modifications, as each time a user wants to make a change, there's no need to establish a connection to the server to do so.
What is the GitLab on premises environment?
In order to unify Deltares source code management, it has been decided that for projects where Deltares is leading, cloud-based GitHub Enterprise is the first choice. However there are projects for large stakeholders with sufficient means to request a custom solution that require that all data is stored on European servers. For these projects Deltares provides a GitLab on premises solution. All data will be stored on servers located at Deltares.
The Gitlab instance that can be accessed through the following URL: https://git.deltares.nl
If you wish to request a repository on Gitlab and your project meets the requirements, please send an e-mail to discuss your case: github.support@deltares.nl
Questions regarding co-creation
Questions relating to migration
Questions relating to applications
When coding software / running models / creating extensive configurations, your code space / project folder / configurations will most likely contain a mix of text files, data files and software binaries. All these files need to be place in a repository under version control and need to be managed as a whole. For the text files you will want to be able to compare differences between versions, in order to understand what has changed over time. This will not be the case for binary files or very large data files as humans are generally not well equipped to compare bits and bytes.
In the 'past' SVN was an ideal place to store your whole repository in one place. Currently SVN is in the process of being phased out and as a replacement GITLABhas been introduced. What the advantages / disadvantages of both systems are will not be discussed here. Instead we will focus on how to setup your GITHUB repository to include both your text based files as your larger binaries.
The problem with GIT (and therefor also GITLAB) is that it is not designed to handle large and or binary files. To overcome this problem GIT Large File Storage (LFS) was introduced. The basic idea behind GIT LFS is that the actual binary file is not stored in your GITLAB repository. Instead only a reference to this file is stored. The actual binary file is stored in an Object Storage location (S3 bucket).
GITLAB offers LFS out-of-the-box, using the MinIO server hosted by Deltares .
So in short. You will have a GIT repository in the Deltares GITLAB instance which will contain only your text base files and small data files. While your large files or binary files will be stored on the Deltares Minio server.
To manage all your text-, large- and binary files as a single project you have three options to connect your GITHUB repository to the Deltares MinIO object store:
Prerequisite: In the below guides we expect the user to have a basic understanding of GIT and its related commands.
How to setup GIT-LFS?
How to setup DVC?
How to setup custom scripts?
Choosing between the above solutions
When requesting a new GITLAB repository you must provide the following information:
Summary: Repository name
Description:
- Public , Internal or Private (defaults to Public)
- If this is a code repository:
- Programming language: Java, C#, Python, Other (please specify)
- If you require teams:
-
- Team name
- Role: Read, Triage, Write, Maintain or Admin
- Is repository linked to production ripe product: Yes / No (defaults to no)
In case you select Yes then also select a PMT value in the PMT field
Product Owner: Repository administrator
PMT: Select project management team if repository is linked to one (defaults to 'General')
Do you also require a Large File Store for your repository?
Then also provide the following fields:
LFS: Yes
Expected storage capacity (? MB/GB)
Project number: This is required for billing. The prices for MinIO storage capacity are the same as for project data.
Do you have a question regarding GITLAB or one of the repositories, then please provide the following information:
Summary: Brief description
Description:
Post your question here. Be precise and provide any information that can be helpful to our team.
Attachment: If required add an attachment