Category Archives: Git

Learn Git with DevOpsRoles.com. Access in-depth guides and tutorials to master version control and improve your DevOps workflow using Git.

Fixing the ‘Git Filename Too Long’ Error: A Deep Guide

Introduction

One of the common errors that Git users, especially on Windows, encounter is the error: unable to create file (Filename too long). This error occurs when Git tries to create or access files with path lengths that exceed the system’s limits, leading to problems in cloning, pulling, or checking out branches. In this in-depth guide, we will explore the root causes of this error, focusing on how the “Git filename too long” issue manifests and how you can fix it with a variety of approaches, from basic settings to advanced solutions.

What Causes the ‘Git Filename Too Long’ Error?

The Git filename too long error occurs when the length of a file path exceeds the limit imposed by the operating system or file system. While Git itself doesn’t restrict file path lengths, operating systems like Windows do.

1. Windows Path Length Limitations

On Windows, the maximum length for a path (file name and directory structure combined) is 260 characters by default. This is called the MAX_PATH limit. When a repository has files or folders with long names, or a deeply nested structure, the total path length might exceed this limit, causing Git to fail when creating or accessing those files.

2. Deeply Nested Directory Structures

If your Git repository contains deeply nested directories, the combined length of folder names and file names can quickly surpass the path length limit, resulting in the error.

3. Automatically Generated Filenames

Certain tools or build processes might generate long file names automatically, which are often difficult to shorten manually.

How to Fix ‘Git Filename Too Long’ Error

There are multiple ways to fix the ‘Git filename too long’ error. Depending on your use case and the system you’re working on, you can opt for simple configuration changes or more advanced methods to resolve this issue.

1. Enable Long Paths in Windows 10 and Later

Windows 10 and later versions support long paths, but the feature is disabled by default. You can enable it through Group Policy or the Registry Editor.

Steps to Enable Long Paths in Windows 10:

Via Group Policy (Windows Pro and Enterprise):

  1. Press Win + R and type gpedit.msc to open the Group Policy Editor.
  2. Navigate to Computer Configuration > Administrative Templates > System > Filesystem.
  3. Double-click on “Enable Win32 long paths”.
  4. Set the policy to Enabled and click OK.

Via Registry (Windows Home and Other Editions):

  1. Press Win + R, type regedit, and press Enter.
  2. Navigate to the following key:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  3. Create a new DWORD (32-bit) entry and name it LongPathsEnabled.
  4. Set its value to 1.
  5. Restart your system to apply the changes.

Enabling long paths ensures that Git can handle file paths longer than 260 characters, fixing the error for most Git operations.

2. Set core.longpaths in Git Configuration

Git offers a built-in configuration option to allow it to handle long file paths. This solution is ideal for users who cannot or do not wish to modify their system’s configuration.

Steps to Enable Long Paths in Git:

  1. Open Git Bash or the Command Prompt.
  2. Run the following command:
    • git config --system core.longpaths true

This command configures Git to support long file paths on your system. Once enabled, Git can work with file paths exceeding the 260-character limit, eliminating the filename too long error.

3. Shorten File and Directory Names

A straightforward method to solve the Git filename too long issue is to reduce the length of directory and file names in your repository. This may require some restructuring, but it is effective, particularly for projects with very deep directory nesting or unnecessarily long filenames.

Example:

Instead of using a long folder path like:

C:/Users/huupv/Documents/Projects/Work/Repositories/SuperLongProjectName/this/is/an/example/of/a/very/deep/folder/structure/index.js

You could simplify it by moving the project closer to the root of your drive:

C:/Repos/SimpleProject/index.js

Shortening directory names helps you avoid exceeding the 260-character limit, fixing the error without altering system settings.

4. Clone Repository to a Shorter Path

The location where you clone your repository can contribute to the path length. If the directory into which you’re cloning your project has a long path, it adds to the overall file path length.

Steps to Shorten Path for Git Cloning:

Instead of cloning the repository to a deeply nested directory, try cloning it closer to the root directory:

git clone https://github.com/username/repository.git C:/Repos/MyRepo

By reducing the initial directory path length, you decrease the chances of encountering the Git filename too long error.

5. Use Git Submodules to Manage Large Repositories

If your project contains a massive directory structure or very long filenames, you might consider breaking it up into smaller repositories using Git submodules. This solution helps to divide large projects into manageable parts, reducing the chance of hitting path length limitations.

Example Workflow:

  1. Identify large directories in your repository that can be separated into individual repositories.
  2. Create new repositories for these sections.
  3. Use Git submodules to link these repositories back into your main project:
git submodule add https://github.com/username/large-repo-part.git

This method is more advanced but is useful for developers managing large, complex repositories.

6. Using Git Bash with Windows and Long Path Support

When using Git on Windows, Git Bash offers some relief from the file path limitation by handling symlinks differently. Installing Git for Windows with certain options can help resolve long path issues.

Steps:

  1. Download the latest Git for Windows installer.
  2. During the installation process, choose the option --no-symlinks under the “Select Components” section.
  3. Proceed with the installation.

This configuration change helps Git handle longer file paths more effectively in certain scenarios.

7. Change File System (Advanced)

For advanced users who frequently encounter path length issues, switching the file system from NTFS (which has the 260-character limit) to ReFS (Resilient File System) can offer relief. ReFS supports longer file paths but is only available on Windows Server and certain editions of Windows.

Caution:

Switching file systems is a complex task and should only be done by experienced users or system administrators.

Frequently Asked Questions (FAQs)

1. What is the ‘Git filename too long’ error?

The “Git filename too long” error occurs when the combined length of a file’s name and its directory path exceeds the limit imposed by the operating system, usually 260 characters on Windows.

2. How do I fix the ‘Git filename too long’ error?

You can fix this error by enabling long paths in Windows, configuring Git to handle long paths, shortening file or directory names, or cloning repositories to a shorter path.

3. Can I avoid the ‘Git filename too long’ error without modifying system settings?

Yes, you can use Git’s core.longpaths configuration setting to enable support for long file paths without needing to modify your system settings.

4. Does this error occur on Linux or macOS?

No, Linux and macOS do not impose the same path length limitations as Windows. Therefore, this error is predominantly encountered by Git users on Windows.

5. Why does this error only happen on Windows?

Windows has a default path length limit of 260 characters, which leads to this error when file paths in Git repositories exceed that limit. Linux and macOS do not have this restriction, allowing longer file paths.

Conclusion

The “Git filename too long” error is a common obstacle, particularly for Git users on Windows, where the operating system limits file path lengths to 260 characters. Fortunately, this issue can be resolved with a variety of approaches, from enabling long paths in Windows to adjusting Git configurations, shortening file paths, or using Git submodules for large repositories.

Understanding the root causes of this error and applying the right solutions can save you significant time and effort when working with Git repositories. Whether you’re managing large-scale projects or just trying to clone a deeply nested repository, these solutions will help you overcome the “Git filename too long” issue efficiently.

By following this guide, you’ll be well-equipped to handle filename length limitations in Git, ensuring a smoother development workflow. Thank you for reading the DevopsRoles page!

How to Fix Local Changes Would Be Overwritten by Git merge conflict: A Deep Guide

Introduction

Git is an incredibly powerful tool for managing code versions, especially when working in teams. However, one of the common frustrations developers face when using Git is dealing with merge conflicts. One such conflict is the “error: Your local changes to the following files would be overwritten by Git merge conflict” message, which halts your workflow and requires immediate resolution.

This deep guide will walk you through how to fix the “Local changes would be overwritten by merge” error in Git, offering detailed insights from basic solutions to advanced techniques. You’ll also learn how to prevent merge conflicts and manage your code effectively, ensuring smoother collaboration in future projects.

By the end of this guide, you’ll understand:

  • What causes the error and why it occurs
  • The basics of handling merge conflicts in Git
  • Practical strategies for preventing merge conflicts
  • Advanced techniques for resolving conflicts when they arise

What Causes the “Local Changes Would Be Overwritten by Merge” Error?

The error “Your local changes to the following files would be overwritten by merge” occurs when Git detects that the files in your local working directory have been modified but are not yet committed, and a merge would overwrite those changes.

This typically happens when:

  • You modify files in your local branch but haven’t committed or stashed those changes.
  • The files you modified are also updated in the branch you’re trying to merge from.
  • Git cannot automatically resolve these differences and raises the error to prevent unintentional loss of your local changes.

Why does Git do this?
Git tries to safeguard your work by stopping the merge and preventing your local, uncommitted changes from being lost. As a result, Git expects you to either save those changes (by committing or stashing) or discard them.

Understanding Git Merge Conflicts

What is a Git Merge Conflict?

A merge conflict happens when Git encounters changes in multiple branches that it cannot automatically reconcile. For instance, if two developers modify the same line of code in different branches, Git will ask you to manually resolve the conflict.

In this case, the error is triggered when uncommitted local changes are detected, meaning that Git is trying to protect these changes from being lost in the merge process. When the error occurs, Git is essentially saying, “I can’t merge because doing so would overwrite your local changes, and I’m not sure if that’s what you want.”

Step-by-Step Solutions to Fix ‘Local Changes Would Be Overwritten by Merge’ Error

1. Commit Your Local Changes

The most straightforward way to resolve this error is to commit your local changes before attempting the merge.

Why Commit First?

By committing your local changes, you signal to Git that these changes are now part of the history. This allows Git to safely merge the new incoming changes without losing your modifications.

Steps:

  1. Check the status of your current working directory:
    • git status
    • This will list all the files that have been modified and not yet committed.
  2. Stage your changes:
    • git add .
  3. Commit your changes:
    • git commit -m "Saving local changes before merge"
  4. Now, attempt the merge again:
    • git merge <branch-name>

This method is the cleanest and safest, ensuring that your local work is preserved before the merge proceeds.

2. Stash Your Changes

If you don’t want to commit your local changes yet because they might be incomplete or experimental, you can stash them temporarily. Stashing stores your changes in a stack, allowing you to reapply them later.

When to Use Stashing?

  • You want to merge incoming changes first, but don’t want to commit your local work yet.
  • You’re in the middle of something and want to test out a merge without committing.

Steps:

  1. Stash your local changes:
    • git stash
  2. Perform the merge:
    • git merge <branch-name>
  3. After completing the merge, reapply your stashed changes:
    • git stash apply
  4. If conflicts arise after applying the stash, resolve them manually.

Pro Tip: Using git stash pop

If you want to apply and remove the stash in one step:

git stash pop

This command will reapply the stashed changes and remove them from the stash list.

3. Discard Your Local Changes

In some cases, you may decide that the local changes are not necessary or can be discarded. If that’s the case, you can simply discard your local changes and proceed with the merge.

Steps:

  1. Discard changes in a specific file:
    • git checkout -- <file-name>
  2. Discard changes in all files:
    • git checkout -- .
  3. Now, attempt the merge:
    • git merge <branch-name>

Warning: This will delete your local changes permanently. Make sure you really don’t need them before proceeding.

4. Use git merge --abort to Cancel the Merge

If you’re already in the middle of a merge and encounter this error, you can use git merge --abort to stop the merge and revert your working directory to the state it was in before the merge started.

Steps:

  1. Abort the merge:
    • git merge --abort
  2. After aborting, either commit, stash, or discard your local changes.
  3. Retry the merge:
    • git merge <branch-name>

5. Handle Untracked Files

Sometimes, the merge conflict might involve untracked files. Git treats untracked files as local changes, which can also lead to this error. In this case, you can either add the untracked files or remove them.

Steps:

  1. Identify untracked files:
    • git status
  2. To add an untracked file:
    • git add <file-name>
  3. If you don’t need the untracked files, remove them:
    • rm <file-name>
  4. Retry the merge:
    • git merge <branch-name>

Advanced Techniques for Resolving Merge Conflicts

Using git mergetool for Conflict Resolution

When facing more complex conflicts, it might be helpful to use Git mergetool, which provides a visual way to resolve merge conflicts by showing you the differences between files side by side.

Steps:

  1. Invoke Git mergetool:
    • git mergetool
  2. Use the mergetool interface to manually resolve conflicts.
  3. After resolving conflicts in each file, save and commit your changes:
    • git commit

Reset to a Previous Commit

In rare cases, you might want to reset your repository to a previous commit, discarding all changes since that commit.

Steps:

  1. Reset your repository:
    • git reset --hard <commit-hash>
  2. After resetting, attempt the merge again:
    • git merge <branch-name>

How to Prevent Git Merge Conflicts

Preventing merge conflicts is just as important as resolving them. Below are some best practices to avoid encountering these issues in the future:

1. Pull Changes Frequently

Pull changes from the remote repository frequently to ensure your local branch is up-to-date. This minimizes the chances of encountering conflicts.

2. Commit Often

Commit small and frequent changes to your local repository. The more often you commit, the less likely you are to encounter large, unmanageable conflicts.

3. Use Feature Branches

Isolate your work in separate feature branches and merge them only when your changes are ready. This helps keep your main branch stable and reduces the likelihood of conflicts.

4. Review Changes Before Merging

Before merging, review the changes in both branches to anticipate and prevent conflicts.

Frequently Asked Questions (FAQ)

What Should I Do If a Git Merge Conflict Arises?

If a merge conflict arises, follow these steps:

  1. Use git status to identify the conflicting files.
  2. Manually resolve conflicts in each file.
  3. Use git add to mark the conflicts as resolved.
  4. Commit the changes with git commit.

Can I Merge Without Committing Local Changes?

No, you cannot merge without committing or stashing your local changes. You must resolve your local changes first to avoid data loss.

Is git merge --abort Safe to Use?

Yes, git merge --abort is safe and reverts your working directory to its previous state before the merge. It’s especially useful when you want to cancel a problematic merge.

Conclusion

Handling the “Local changes would be overwritten by merge” error in Git may seem daunting, but with the right tools and techniques, it can be resolved effectively. Whether you choose to commit, stash, or discard your changes, Git offers multiple solutions to handle merge conflicts gracefully. By practicing preventive measures like frequent commits, using feature branches, and reviewing changes before merging, you can reduce the occurrence of merge conflicts and keep your development workflow smooth and productive. Thank you for reading the DevopsRoles page!

Resolve ‘Not a Git Repository’ Error: A Deep Dive into Solutions

Introduction

Git is an incredibly powerful tool for version control, but like any tool, it comes with its own set of challenges. One of the most common errors developers encounter is:
fatal: not a git repository (or any of the parent directories): .git.

Whether you’re new to Git or have been using it for years, encountering this error can be frustrating. In this deep guide, we will examine the underlying causes of the error, and provide a range of solutions from basic to advanced.

If you’re ready to dive deep and understand how Git works in the context of this error, this guide is for you.

Understanding the ‘Not a Git Repository’ Error

When Git displays this error, it’s essentially saying that it cannot locate the .git directory in your current working directory or any of its parent directories. This folder, .git, is critical because it contains all the necessary information for Git to track changes in your project, including the history of commits and the configuration.

Without a .git directory, Git doesn’t recognize the folder as a repository, so it refuses to execute any version control commands, such as git status or git log. Let’s dive into the common causes behind this error.

Common Causes of the Error

1. The Directory Isn’t a Git Repository

The most straightforward cause: you’ve never initialized Git in the directory you’re working in, or you haven’t cloned a repository. Without running git init or git clone, Git doesn’t know that you want to track files in the current folder.

2. You’re in the Wrong Directory

Sometimes you’re simply in the wrong directory, either above or below the actual repository. If you navigate to a subfolder that doesn’t have Git initialized or doesn’t inherit the Git settings from the parent directory, Git will throw this error.

3. The .git Folder Was Deleted or Moved

Accidentally deleting the .git folder, or moving files in a way that disrupts the folder’s structure, can lead to this error. Even if the project files are intact, Git needs the .git directory to track the project’s history.

4. Cloning Issues

Sometimes cloning a repository doesn’t go as planned, especially if you’re dealing with large or complex repositories. If the .git folder isn’t copied over during the clone process, Git will fail to recognize it.

5. A Misconfigured Git Client

A less common but possible issue is an incorrect Git installation or misconfiguration. This can lead to errors in recognizing repositories even if they’re correctly set up.

How to Resolve the “Not a Git Repository” Error

Solution 1: Initializing a Git Repository

If your current directory isn’t yet a Git repository, you’ll need to initialize it. Here’s how you do it:

git init

Steps:

  1. Open your terminal.
  2. Navigate to the directory where you want to initialize Git.
  3. Run git init.

Result:
This command creates a .git folder in your directory, enabling Git to start tracking changes. From here, you can start adding files to your repository and make your first commit.

Solution 2: Navigate to the Correct Directory

If you’re simply in the wrong folder, the solution is to move into the correct Git repository directory.

cd /path/to/your/repository

Steps:

  1. Use the pwd command (in Unix-based systems) or cd (in Windows) to check your current directory.
  2. Navigate to the correct directory where your repository is located.
  3. Run your Git commands again.

Tip: Use git status after navigating to ensure Git recognizes the repository.

Solution 3: Reclone the Repository

If you’ve accidentally deleted the .git folder or moved files incorrectly, the easiest solution might be to reclone the repository.

git clone https://github.com/your-repository-url.git

Steps:

  1. Remove the corrupted or incomplete repository folder.
  2. Run the git clone command with the repository URL.
  3. Move into the new folder with cd and continue working.

Solution 4: Restore the .git Folder

If you’ve deleted the .git folder but still have all the other project files, try to restore the .git folder from a backup or reclone the repository.

Using a Backup:

  1. Locate a recent backup that contains the .git folder.
  2. Copy it back into your project directory.
  3. Use git status to ensure the repository is working.

Solution 5: Check Your Git Configuration

If none of the above solutions work, there might be a misconfiguration in your Git setup.

git config --list

Steps:

  1. Run git config --list to see your current Git configuration.
  2. Ensure that your username, email, and repository URL are correctly configured.
  3. If something seems off, fix it using the git config command.

Advanced Solutions for Complex Cases

In more advanced cases, especially when working with large teams or complex repositories, the basic solutions may not suffice. Here are some additional strategies.

1. Rebuilding the Git Index

If your repository is recognized but you’re still getting errors, your Git index might be corrupted. Rebuilding the index can solve this issue.

rm -f .git/index
git reset

This removes the corrupted index and allows Git to rebuild it.

2. Using Git Bisect

When the .git folder is moved or deleted and you’re unsure when this happened, Git’s bisect tool can help you find the exact commit where the issue occurred.

git bisect start
git bisect bad
git bisect good <last known good commit>

Steps:

  1. Start the bisect process with git bisect start.
  2. Mark the current commit as bad with git bisect bad.
  3. Mark the last known working commit with git bisect good.

Git will now help you find the exact commit that introduced the issue, making it easier to fix.

Frequently Asked Questions

What does “fatal: not a git repository” mean?

This error means Git cannot find the .git folder in your current directory, which is required for Git to track the project’s files and history.

How do I initialize a Git repository?

Run the git init command in your project directory to create a new Git repository.

What if I accidentally deleted the .git folder?

If you deleted the .git folder, you can either restore it from a backup, run git init to reinitialize the repository (you’ll lose history), or reclone the repository.

Why do I keep getting this error even after initializing a Git repository?

Make sure you are in the correct directory by using the cd command and check if the .git folder exists using ls -a. If the problem persists, check your Git configuration with git config --list.

Can I recover lost Git history if I accidentally deleted the .git folder?

Unfortunately, without a backup, recovering the .git folder and its history can be difficult. Your best option may be to reclone the repository or use a backup if available.

Conclusion

The “not a git repository” error is a common but solvable issue for both beginner and advanced Git users. By understanding the underlying causes and following the solutions outlined in this guide, you can resolve the error and continue using Git for version control effectively.

Whether it’s initializing a new repository, navigating to the correct directory, or resolving more advanced issues like corrupted Git indexes, the solutions provided here will help you navigate through and fix the problem efficiently.

Keep in mind that as you grow more familiar with Git, handling errors like this will become second nature, allowing you to focus on what truly matters – building great software Thank you for reading the DevopsRoles page!

Failed to Push Some Refs to GitLab: A Deep Guide to Fixing the Issue

Introduction

Have you ever been greeted by the dreaded “failed to push some refs to GitLab” message while trying to push your changes? This error can stop your workflow dead in its tracks, but the good news is, it’s usually straightforward to resolve.

In this guide, we’ll explore what the error means, why it happens, and how you can fix it. Whether you’re a beginner looking to solve this for the first time or an advanced user seeking deeper insights, we’ve got you covered.

What Does “Failed to Push Some Refs to GitLab” Mean?

The message “failed to push some refs to GitLab” means that Git has encountered an issue when trying to push your changes to the remote repository on GitLab. Refs (short for references) in Git are pointers to specific commits, such as branches or tags. The error suggests that Git cannot update the refs on the remote repository because of a conflict or misalignment between the state of your local repository and the remote.

In simple terms, your local changes can’t be pushed because there’s a mismatch between your local repository and the remote repository on GitLab.

Why Does “Failed to Push Some Refs to GitLab” Occur?

There are several reasons why you might run into this error. Let’s explore each one:

1. Outdated Local Repository

Your local branch is outdated compared to the remote branch. When you try to push your changes, Git rejects it because it would overwrite the changes on the remote repository.

2. Non-fast-forward Updates

Git prefers non-destructive changes to the repository history. If your local branch is not a simple extension of the remote branch, Git cannot perform a “fast-forward” update and will refuse to push your changes without manual intervention.

3. Protected Branches

In GitLab, some branches might be protected, meaning that only specific users can push changes, or changes must follow specific rules (e.g., they require a merge request to be reviewed and merged).

4. Merge Conflicts

When the same lines of code are modified in both the local and remote repositories, Git can’t merge the changes automatically, leading to a push failure.

Step-by-Step Guide to Fixing “Failed to Push Some Refs to GitLab”

Now that we understand why the error occurs, let’s dive into the steps to resolve it.

1. Update Your Local Repository

The first step when you encounter this error is to ensure that your local branch is up-to-date with the remote branch.

Run the following command to pull the latest changes from the remote repository:

git pull origin <branch-name>

This will fetch and merge the changes from the remote branch into your local branch. After this, you should be able to push your changes.

2. Handle Non-fast-forward Updates

If the changes in your local branch conflict with the remote branch, Git won’t be able to perform a fast-forward update. You can resolve this by either merging or rebasing.

2.1 Merge the Changes

You can merge the remote branch into your local branch to resolve conflicts and create a new commit that combines the changes.

git merge origin/<branch-name>

After merging, resolve any conflicts if needed, commit the changes, and then push:

git push origin <branch-name>

2.2 Rebase Your Changes

Alternatively, you can rebase your changes onto the latest version of the remote branch. Rebasing rewrites your commit history to make it as though your work was built directly on top of the latest remote changes.

git pull --rebase origin <branch-name>

Resolve any conflicts during the rebase, and then continue:

git rebase --continue
git push origin <branch-name>

3. Force Push (With Caution)

If you’re sure your local changes should overwrite the remote changes (for example, when you’re working in an isolated branch or project), you can use a force push.

git push --force origin <branch-name>

⚠️ Warning: Force pushing is dangerous because it can overwrite the remote repository’s history, potentially removing other contributors’ work.

4. Check Branch Protection Rules

If you’re pushing to a protected branch, GitLab may block the push. This is a common setup to prevent accidental changes to important branches like main or develop.

You can check the protection rules by navigating to the Settings > Repository section in GitLab, then scrolling to Protected Branches. If the branch is protected, you may need to:

  • Use a merge request to submit your changes.
  • Get the required permissions to push to the protected branch.

5. Resolve Merge Conflicts

If there are merge conflicts when pulling changes, Git will mark the conflicting files for you to resolve manually. Here’s how to resolve conflicts:

Open the conflicted file(s) in your text editor. Git will insert conflict markers like these:

<<<<<<< HEAD
Your changes
=======
Changes from origin
>>>>>>> origin/<branch-name>

Manually edit the file(s) to combine the changes or choose which changes to keep.

Add the resolved file(s) back to the staging area:

git add <file-name>

Continue the merge:

git commit

Push the changes:

git push origin <branch-name>

Advanced Techniques to Prevent “Failed to Push Some Refs to GitLab”

Once you’ve fixed the issue, it’s a good idea to adopt practices that can help you avoid encountering the error in the future. Here are some advanced strategies:

1. Regularly Pull Changes from the Remote Repository

One of the easiest ways to avoid conflicts is to keep your local branch in sync with the remote branch. Make it a habit to pull the latest changes from the remote repository before starting new work.

git pull origin <branch-name>

2. Use Feature Branches

To minimize conflicts and improve team collaboration, use feature branches. Instead of committing directly to main or develop, create a separate branch for each feature or bug fix.

git checkout -b feature/new-feature

After completing the work, create a merge request to integrate your changes.

3. Rebase Instead of Merging

Rebasing is a powerful technique for keeping your commit history clean. By rebasing, you apply your changes on top of the latest commits from the remote branch.

git pull --rebase origin <branch-name>

This approach avoids the merge commit that comes with a regular pull and helps prevent unnecessary conflicts.

4. Automate with Pre-push Hooks

Git hooks are scripts that are triggered by Git commands. You can create a pre-push hook to automatically pull changes from the remote before pushing, ensuring your local branch is always up-to-date.

Here’s an example of a pre-push hook script:

#!/bin/sh
git pull origin <branch-name>

Save this script in the .git/hooks/ directory as pre-push.

5. Leverage GitLab CI/CD

By setting up a CI/CD pipeline in GitLab, you can automate testing and code quality checks before changes are merged. This reduces the risk of conflicts by ensuring that only valid and compatible code gets pushed to the main repository.

Frequently Asked Questions (FAQs)

Q1: Can I avoid using git push --force?

Yes, in most cases, you should avoid using git push --force because it can overwrite the remote history and delete changes made by other contributors. Instead, use git pull or git pull --rebase to synchronize your changes with the remote repository.

Q2: How do I know if a branch is protected in GitLab?

In GitLab, go to Settings > Repository > Protected Branches to see which branches are protected. You may need additional permissions to push to these branches.

Q3: What’s the difference between a merge and a rebase?

A merge combines the changes from two branches into one, creating a new merge commit. A rebase, on the other hand, re-applies your changes on top of the latest commits from the remote branch, resulting in a cleaner commit history without a merge commit.

Q4: Can I recover lost commits after a force push?

Yes, you can recover lost commits if you have the commit hash. Use git reflog to find the commit hash and then use git checkout <commit-hash> to restore it.

Conclusion

The “failed to push some refs to GitLab” error is a common issue that developers encounter when working with Git and GitLab. By following the steps outlined in this guide, you should be able to resolve the issue and push your changes smoothly.

Whether it’s a simple pull, resolving merge conflicts, or dealing with protected branches, mastering these Git techniques will make you more efficient and avoid future problems. Adopting advanced strategies like regular rebasing, using feature branches, and setting up CI/CD pipelines can help you avoid this error entirely. Thank you for reading the DevopsRoles page!

Step-by-Step Guide to Merging Feature Branches in Git From feature/xxx_2020 to develop/xxx

Introduction

Merging Feature Branches in Git, allowing developers to integrate changes from one branch into another. This process is essential for maintaining a clean and organized codebase, especially in collaborative projects where multiple developers work on different features simultaneously. In this guide, we will walk you through the step-by-step process of merging the feature/xxx_2020 branch into the develop/xxx branch. We will cover everything from setting up your working environment to resolving conflicts, ensuring that your merge is smooth and error-free. Whether you’re new to Git or looking to refine your merging skills, this guide has you covered.

Merging Feature Branches in Git From feature/xxx_2020 to develop/xxx

Step 1: Create a Working Directory

Before starting the merge process, it’s essential to create a separate working directory to prevent any unintended changes in your current workspace.

$ mkdir ${Working directory}
$ cd ${Working directory}

Step 2: Clone the Git Repository

Next, clone the Git repository to your local machine to ensure that you have the latest code base.

$ git clone https://domain.com/XXX/xxx.git
$ cd xxx

Step 3: Check the Remote and Fetch the Data

To ensure you are working with the most up-to-date branches, check the remote repository and fetch the latest data.

$ git remote show origin
$ git fetch origin

Step 4: Checkout the Merge Source Branch

Now, switch to the source branch feature/xxx_2020 that you plan to merge from.

$ git checkout feature/xxx_2020

Step 5: Perform a Fast-Forward Merge on the Source Branch

To ensure the source branch is up-to-date with its remote counterpart, perform a fast-forward merge.

$ git merge --ff origin/feature/xxx_2020

Step 6: Checkout the Merge Destination Branch

After updating the source branch, switch to the destination branch develop/xxx.

$ git checkout develop/xxx

Step 7: Perform a Fast-Forward Merge on the Destination Branch

Update the destination branch by performing a fast-forward merge to ensure it is current.

$ git merge --ff origin/develop/xxx

Step 8: Merge the Source Branch into the Destination Branch

Now, merge the feature/xxx_2020 branch into develop/xxx. Use the --no-commit and --no-ff options to ensure that you have control over the commit process and can handle any conflicts that arise.

$ git merge --no-commit --no-ff feature/xxx_2020

Step 9: Check Git Status for Conflicts

Before finalizing the merge, check the status of your Git repository to identify any conflicts that need to be resolved.

$ git status

Step 10: Resolve Merge Conflicts (If Any)

If there are conflicts, you’ll need to manually resolve them. Open the conflicted files, edit them as necessary, and then mark them as resolved.

Step 11: Commit the Merge with Conflict Resolution

Once all conflicts have been resolved, commit the merge with a detailed message describing the conflicts and how they were resolved.

$ git commit -F- <<EOM
>Merge branch 'feature/xxx_2020' into 'develop/xxx'
>Auto-merging src/main/java/H6789.java
>CONFLICT (content): Merge conflict in src/main/java/F6789.java
>Auto-merging src/main/etc/Test_message.properties
>EOM

Merge conflict resolution FAQs

What should I do if I encounter a merge conflict?

If you encounter a merge conflict, carefully review the conflicting files, resolve the conflicts, and then commit the changes. Use Git’s conflict markers (<<<<<<<, =======, >>>>>>>) to identify the differences between the branches.

Why should I use --no-commit and --no-ff during a merge?

Using --no-commit and --no-ff gives you more control over the merge process. It allows you to review the changes before finalizing the merge and ensures that a merge commit is created even if the merge could be resolved as a fast-forward.

How can I avoid merge conflicts?

To minimize the chances of conflicts, regularly pull the latest changes from the remote repository into your local branches and communicate with your team to coordinate when and how merges are performed.

Conclusion

Merging branches in Git is a critical skill for developers, particularly when working on collaborative projects. By following the steps outlined in this guide, you can successfully merge the feature/xxx_2020 branch into the develop/xxx branch, resolve any conflicts, and maintain a clean and functional codebase. Thank you for reading the DevopsRoles page!

References

Integrating Trivy with GitHub Actions for CI/CD Security Scanning

Ensuring security within your Continuous Integration and Continuous Deployment (CI/CD) pipeline is crucial for modern software development. This detailed guide will help you integrate Trivy with GitHub Actions to automate CI/CD Security Scanning in your workflow.

What is Trivy?

It is a comprehensive vulnerability scanner for container images, file systems, and Git repositories. It can detect vulnerabilities, misconfigurations, secrets, and licenses across various platforms. Trivy is simple to use and integrates well with CI/CD tools like GitHub Actions.

Setting Up GitHub Actions for CI/CD

GitHub Actions is a powerful automation tool that allows you to create custom workflows for your projects. These workflows can run on events such as pushes, pull requests, and merges. To integrate Trivy into your GitHub Actions workflow, follow these steps:

Step 1: Create a GitHub Repository

Start by creating a GitHub repository if you don’t already have one. Initialize it with your project files and include a .github/workflows directory for your GitHub Actions workflows.

Step 2: Define Your Workflow File

Create a workflow file in the .github/workflows directory and name it ci.yml. This file will define the steps GitHub Actions will follow to build, test, and deploy your project.

name: CI/CD Pipeline

on: 
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Build Docker image
      run: docker build -t my-app .

    - name: Scan image with Trivy
      uses: aquasecurity/trivy-action@master
      with:
        image-ref: my-app

    - name: Deploy to production
      run: echo "Deploying application..."

Step 3: Workflow Breakdown

  • Checkout Code: This step uses the actions/checkout@v2 action to clone your repository.
  • Set up Docker Buildx: This step sets up Docker Buildx to enable multi-platform builds.
  • Build Docker Image: This step builds your Docker image using the Dockerfile in your repository.
  • Scan Image with Trivy: This step is the aquasecurity/trivy-action to scan the built Docker image for vulnerabilities.
  • Deploy to Production: This is a placeholder step where you can add your deployment commands.

Step 4: Commit and Push Your Workflow

Commit your ci.yml workflow file to your repository and push the changes. This will trigger the GitHub Actions workflow to run.

git add .github/workflows/ci.yml
git commit -m "Add CI/CD workflow with Trivy scanning"
git push origin main

Monitoring and Reviewing Results

After pushing your workflow file, navigate to the “Actions” tab in your GitHub repository. You will see your workflow running. GitHub Actions provides logs and details for each step, including the Trivy scan results.

Benefits of Integrating Trivy in CI/CD

1. Automated Security Scanning

By integrating Trivy into your CI/CD pipeline, you ensure that every code change is automatically scanned for vulnerabilities. This helps in identifying and addressing security issues early in the development process.

2. Continuous Compliance

Automated scanning helps maintain compliance with security standards and regulations. It ensures that your software meets security requirements before deployment.

3. Improved Security Posture

Regular scanning and fixing vulnerabilities improve the overall security posture of your application. This reduces the risk of security breaches and ensures a more secure deployment.

FAQs

Q1: What is Trivy?
A1: Trivy is a comprehensive vulnerability scanner for container images, file systems, and Git repositories that detects vulnerabilities, misconfigurations, secrets, and licenses across different platforms.

Q2: How does Trivy integrate with GitHub Actions?
A2: Trivy integrates with GitHub Actions by adding a step in your GitHub Actions workflow file to scan Docker images for vulnerabilities.

Q3: What are the benefits of using Trivy in a CI/CD pipeline?
A3: Using Trivy in a CI/CD pipeline ensures automated security scanning, continuous compliance, and improved security posture by identifying and fixing vulnerabilities early in the development process.

Q4: How can I monitor the results of Trivy scans in GitHub Actions?
A4: You can monitor the results of Trivy scans in GitHub Actions by navigating to the “Actions” tab in your GitHub repository and reviewing the logs and details for each step of the workflow.

Conclusion

Integrating Trivy with GitHub Actions for CI/CD security scanning is a straightforward process that provides significant benefits. By automating vulnerability scanning, you can ensure that your applications are secure and compliant from the earliest stages of development. Follow the steps outlined in this guide to set up your own secure CI/CD pipeline using Trivy and GitHub Actions.

For more detailed documentation and advanced configurations, refer to the official Trivy and GitHub Actions documentation. I hope will this your helpful. Thank you for reading the DevopsRoles page!

Mastering Git: 36 Essential Commands for Programmers and Developers

Introduction

Mastering Git, Git stands as a cornerstone for version control, enabling seamless collaboration and efficient project management. Whether you’re a seasoned programmer or just embarking on your coding journey, mastering Git commands is essential for optimizing your workflow and maximizing productivity. This comprehensive guide explores 36 indispensable Git commands, complete with practical command line examples, to empower programmers and developers at every level.

Mastering Git commands

  1. Configure User Profile:

Set up your user profile to ensure accurate tracking of contributions.

$ git config user.name "USERNAME"
$ git config user.email "user@example.com"
$ git config --global user.name "USERNAME"
$ git config --global user.email "user@example.com"

Configure your identity within Git globally or on a per-repository basis to accurately track your contributions

  1. Initialize Git Repositories:

Start version controlling your projects by initializing Git repositories.

$ git init
  1. Add Project Files:

Add files to the staging area in preparation for committing changes.

$ git add file
$ git add *.php
  1. Verify Added Files:

Check the status of your files to see which ones are staged for commit.

$ git status
  1. Commit Changes to the Repository:

Record changes to the repository along with a descriptive message.

$ git commit
$ git commit -m "First Commit"
  1. Display the Logs:

View commit history to track changes and understand project evolution.

$ git log
$ git log --file
  1. Verify Project Branches:

List existing branches in your repository to navigate between different versions.

$ git branch
  1. Reset Project Branches:

Reset branches to a previous state, undoing commits and changes as needed.

$ git reset
$ git reset --soft
$ git reset --hard
  1. Add a New Branch:

Create a new branch to isolate development efforts or work on a specific feature.

$ git branch new-feature
  1. Switch between Branches:

Switch between branches to access different versions of your project.

$ git checkout new-feature
  1. Delete a Project Branch:

Remove unnecessary branches once they have served their purpose.

$ git checkout master
$ git branch -D new-feature
  1. Check Differences among Commits, Trees, and Files:

Analyze differences between commits, trees, and individual files to understand changes.

$ git diff
$ git diff new-feature master
  1. Merge Two Branches:

Combine changes from one branch into another to integrate new features or bug fixes.

$ git merge fixes new-feature
$ git merge -s ours obsolete
$ git merge --no-commit main
  1. Revert Existing Commits:

Undo changes introduced by previous commits without altering commit history.

$ git revert ad9ef37d88ad4gfyg90aa6a23f71e77
$ git revert HEAD~3
  1. Stash Working Directory:

Temporarily store changes that are not ready to be committed.

$ git stash
$ git stash list
  1. Clone a Repository:

Duplicate an existing repository to your local machine for collaboration.

$ git clone
$ git clone git://example.com/git.git/ test-dir
  1. Pull New Updates:

Fetch and merge changes from a remote repository into your local branch.

$ git pull
  1. Push Your Updates:

Upload your local commits to a remote repository to share your work.

$ git push
  1. Display Remote Repositories:

List remote repositories associated with your local repository.

$ git remote
$ git remote --verbose
  1. Connect to Remote Repositories:

Establish connections to remote repositories for collaboration.

$ git remote add origin
  1. Add Tags to Your Project:

Tag specific commits to mark significant milestones or releases.

$ git tag 1.0.0
$ git push origin --tags
  1. Fetch Remote Data:

Download objects and refs from another repository to keep your local copy up to date.

$ git fetch origin
  1. Restore Non-Committed Changes:

Revert changes made to files that have not been staged or committed.

$ git restore --staged test.php
$ git restore --source=HEAD --staged --worktree test.php
  1. Remove Files:

Delete files from the working directory and stage the removal for the next commit.

$ git rm *.php
$ git rm -r dir/
$ git rm --cached *.php
  1. Move or Rename Files:

Change the name or location of files within your project while preserving their history.

$ git mv test.py new-test.py
$ mv test.py new-test.py
$ git add new-test.py
$ rm test.py
  1. Clean Untracked Files:

Remove untracked files from your working directory to keep it clean and organized.

$ git clean
$ git clean -n
  1. Optimize Local Repositories:

Optimize the local repository’s database to improve performance and reduce disk usage.

$ git gc
  1. Archive Local Repositories:

Create a compressed archive of the repository for sharing or backup purposes.

$ git archive --output=test --format=tar master
  1. Search for Patterns:

Search for specific text patterns within the repository’s contents.

$ git grep -iw 'import' master
$ git grep 'import' $(git rev-list --all)
  1. Manage Working Trees:

Create, list, add, and remove linked working trees to your repository.

$ git worktree list
$ git worktree add new-branch
$ git worktree remove new-branch
$ git worktree prune
  1. Prune Untracked Objects:

Remove unreachable objects from the repository to reclaim disk space.

$ git prune --dry-run
$ git prune --verbose --progress
  1. Pack Unpacked Objects:

Compress loose objects in the repository into pack files to save space and improve performance.

$ git repack
  1. List Unpacked Objects:

Display statistics about the repository’s object storage.

$ git count-objects
  1. Validate the Object Database:

Check the integrity of the repository’s object database to ensure it is not corrupted.

$ git fsck
  1. Display Changes for Each Commit:

View detailed information about each commit, including the files that were modified.

$ git whatchanged
  1. Summarize Log Information:

Generate summarized logs of commit history, optionally grouped by author or email.

$ git shortlog
$ git shortlog --email --summary

Consult Git Help

Conclusion

Mastering Git commands is a fundamental skill for programmers and developers seeking to streamline their workflow and collaborate effectively on projects. In this comprehensive guide, we’ve explored 39 essential Git commands, providing command-line examples for each one.

By understanding and incorporating these commands into your daily development routine, you’ll gain greater control over your version-controlled projects. From configuring user profiles to managing branches, committing changes, and collaborating with remote repositories, each Git command plays a crucial role in the software development lifecycle.

Whether you’re working solo on a personal project or collaborating with a team of developers on a large-scale application, Git empowers you to track changes, manage versions, and seamlessly integrate new features. With practice and dedication, you can harness the power of Git to enhance your productivity, streamline your workflow, and achieve greater success in your software development endeavors. . Thank you for reading the DevopsRoles page!

Git Revert Commit already pushed to a remote repository

In this tutorial, How to Git Revert Commit is already pushed to a remote repository. Sometimes I recover wrong changes (commits) in a coding project.

For example, File Vagrantfile on the remote repository with the content below

I have to change the content of this file as below

How do you see the last commit?

Use the git log command to see the hash of each Git commit, the message associated with each commit, and more metadata.

git log

You can see the last commit simplify the output terminal as command below

git log --oneline

How to undo this commit?

git revert <commit hash>
  • This command will create a new commit with the “Revert” word at the beginning of the message.
  • Check your repository status
  • After this, I will be pushed to the remote repository with the git push command

I will revert to with content not comment out in file Vagrantfile

PS C:\MyData\Vagrant_VMS\Projects\Vagrant\Rocky-LEMP> git revert 850e78a
[master d0fca2b] Revert "Edit file Vagrantfile"
 1 file changed, 1 deletion(-)
PS C:\MyData\Vagrant_VMS\Projects\Vagrant\Rocky-LEMP> cat .\Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "rockylinux/8"
  config.ssh.insert_key = false

  config.vbguest.auto_update = false

  config.vm.define "webserver" do |webserver|
    webserver.vm.hostname = "devopsroles.com"
    webserver.vm.network "private_network", ip: "192.168.4.4"
    webserver.vm.network "forwarded_port", guest: 80, host: 8888
    webserver.vm.provision "shell",
     path: "C:\\MyData\\Vagrant_VMS\\Projects\\Vagrant\\Rocky-LEMP\\shell\\web-lemp-rocky.sh"

  end

end
PS C:\MyData\Vagrant_VMS\Projects\Vagrant\Rocky-LEMP> git push
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 16 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 530 bytes | 530.00 KiB/s, done.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
To gitlab.com:huupv/project.git
   850e78a..d0fca2b  master -> master
PS C:\MyData\Vagrant_VMS\Projects\Vagrant\Rocky-LEMP>

Final, Git Revert Commit already pushed to a remote repository

Show git log command to see message Revert it.

Conclusion

You have to Git Revert Commit already pushed to a remote repository. I hope will this your helpful. Thank you for reading the DevopsRoles page!

Git Cheat Sheet

Introduction

How to use the git command every day. Git Cheat Sheet I use it every day. Git has become an essential tool for developers, allowing them to efficiently manage version control and collaborate on projects.

this guide will provide you with a comprehensive overview of Git’s essential commands and workflow. Let’s dive in!

What does Git mean?

Git is software for tracking changes in any set of files, usually used for coordinating work among programmers collaboratively developing source code during software development. Quote from Wikipedia.

Git Cheat Sheet Example

Check my git configure

git config -l

Configuration

Before you start using Git, it’s crucial to set up your configuration. You can configure your username and email globally using the git config command. For example Setup my Git username and Email Id

git config --global user.name "HuuPV"
git config --global user.email "HuuPV@devopsroles.com"

Username and EmailID assigned to commit from local computer.

Creating and Cloning Repositories

git init

Add a file to the staging area in Git

git add file_name

Add all files in your project to the staging area in Git

git add .

Commit changes for the files in a local repo.

git commit
git commit -m "first commit"

Shows the commit history for the current repository

git log

Show if a file is in the staging area, but not committed

git status

Remove tracked files from the current working tree

git rm filename

Rename files

git mv oldfile newfile

Branches

Branches are a powerful feature in Git, allowing you to work on different versions of your code simultaneously.

Create a new branch

git branch branch_name

Switch to a newly created branch

git checkout branch_name

Create a new branch and switch it immediately

git checkout -b branch_name

List branches

git branch

Merge and Remote Repositories

Merge two branches

git merge branch_name

Add a remote repository to your local repository

git add remote https://repo_url_here

Git clone

git clone

download updates from a remote repository.

git pull

After committing your changes, the next you send changes to the remote server.

git push
#or force push
git push -f

History and Logs

Git provides extensive tools to explore commit history. The git log the command shows the commit history

git log

The display presents a more compact view

git log --oneline

If you prefer a graphical representation, git log --graph creates a commit history graph.

git log --graph

To view the details of a specific commit

git show <commit>

Conclusion

Git is a powerful version control system that enables efficient collaboration and project management. This guide has provided an overview of essential Git commands and workflows, giving you a solid foundation to start using Git effectively

You have used Git Cheat Sheet every day. I hope will this your helpful. Thank you for reading the DevopsRoles page!

Gitlab CI/CD deploy the website to VPS

Introduction

In this tutorial, How to deploy the website to VPS using Gitlab CI/CD. You need a little knowledge about VPS, SSH, Public key, private key, Nginx… Now let’s go Gitlab CI/CD and deploy the website to VPS.

Prerequisites

  • Domain: https://devopsroles.com
  • VPS on Linode: Have installed Nginx and added the domain into VPS.
  • Source code: For example, is React
  • Create SSH key on VPS
  • Add SSH key into GitLab, CI/CD of Project
  • Install Gitlab Runner
  • Add .gitlab-ci.yml to the root folder on Gitlab

On VPS

Create a public key and Private key for CI/CD

Type the command on VPS below:

ssh-keygen -t rsa -b 4096 -m pem -C "pvhuu285@gmail.com" -P "" -q -f ~/.ssh/gitlab

It will gen two files is gitlab and gitlab.pub

Convert PKCS #1 to PKCS #8 as command below:

openssl pkcs8 -in gitlab -topk8 -out gitlab2 -nocrypt
#openssl pkcs8 -in gitlab -topk8 -out gitlab2

If you use gitlab key PKCS #1 is the error “Error loading key “/root/.ssh/id_rsa”: invalid format”. I will convert the gitlab2 private key.

On terminal type command

cat gitlab.pub

Copy the code public key, and paste it into SSH of the account Gitlab

Type the command below to get the private key

cat gitlab2

This private key assign to Settings CI/CD of Repository. Variables are SSH_PRIVATE_KEY

Copy the public key into the authorized_keys file.

touch .ssh/authorized_keys
cat .ssh/gitlab.pub > .ssh/authorized_keys

Create a new .ssh/config file with the content below:

  IgnoreUnknown AddKeysToAgent,UseKeychain
  #UseKeychain yes
  AddKeysToAgent yes
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/gitlab

Install Gitlab Runner on VPS

My example, Install Gitlab Runner on Ubuntu VPS

Download and install binary

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

Give it permission to execute

sudo chmod +x /usr/local/bin/gitlab-runner

Create a GitLab CI user

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

Install and run as a service

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

Command to register the runner

sudo gitlab-runner register --url https://gitlab.com/ --registration-token $REGISTRATION_TOKEN

REGISTRATION_TOKEN the get on repository setting, In CI/CD

Create new .gitlab-ci.yml file at the folder root on Gitlab

The content is as below:

# Using the node image to build the React app

image: node:latest
variables:
  PUBLIC_URL: /
# Cache node modules - speeds up future builds
#cache:
#  paths:
#     - node_modules
stages:
     - build
     - deploy
build:
  stage: build
  script:
     - echo "Start building App"
     - chmod +x node_modules/.bin/react-scripts
     - npm install # Install all dependencies
     - npm run build #--prod  Build for prod
     - echo "Build successfully!"
  artifacts:
    paths:
      - build 
  only:
    - master # Only run on master branch
deploy_production:
  stage: deploy
  image: ubuntu
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/gitlab
    - chmod 700 ~/.ssh/gitlab
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/gitlab
    - ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts
    - apt-get install rsync -y -qq
    - apt-get install curl -y -qq

  script:
     - echo "Deploying to server"
     - ssh -i ~/.ssh/gitlab -o StrictHostKeyChecking=no huupv@SERVER_IP -p PORT
     - rsync -avz --progress -a -e "ssh -p PORT" build/ huupv@SERVER_IP:/var/www/YOUR_DOMAIN/public_html
     - echo "Deployed"
  environment:
    name: production
  only:
     - master # Only run on master branch

After clicking commit and checking the result in CI/CD

Conclusion

You have Gitlab CI/CD deploy the website to VPS. I hope will this your helpful. Thank you for reading the DevopsRoles page!