Introduction

This tutorial demonstrates how to Install Git 2.45 on RHEL 10 on RHEL 10. It is written for administrators who want a repeatable, well-explained walkthrough that goes beyond a bare command list and explains each configuration choice. Every command is tested against a freshly registered RHEL 10 system with the default AppStream repositories enabled.

Prerequisites

You will need: a registered RHEL 10 host with sudo access; an internet connection or a local Red Hat mirror; familiarity with the dnf package manager and systemd; basic networking knowledge so you can adjust firewalld rules. If you are running inside a virtual machine, allocate at least 2 vCPUs and 4 GB of memory to avoid out-of-memory errors during compilation or service start.

Step 1: Update RHEL 10 and Enable Repositories

Ensure your RHEL 10 system is fully patched before installing new software. The AppStream repository is enabled by default on registered systems and provides the modular packages needed for most modern workloads. If you are running this inside a Kickstart automation or an Ansible role, capture every command into version control so the deployment can be re-run from scratch against a fresh VM at any time.

sudo dnf upgrade -y
sudo dnf repolist enabled

Step 2: Install Required Packages

Install the git package along with any supporting dependencies from the standard RHEL 10 repositories. dnf will automatically resolve and pull in libraries, language runtimes, and configuration files. On RHEL 10 this step benefits from the modular AppStream design, which lets you pin to a specific stream and avoid surprise major-version upgrades during routine patching.

sudo dnf install -y git

Step 3: Apply the Initial Configuration

Now configure the component for your environment. Always keep a backup copy of the original configuration file so you can roll back quickly if something goes wrong, and prefer editing files in /etc/ over modifying the package defaults inside /usr/share/. If you are running this inside a Kickstart automation or an Ansible role, capture every command into version control so the deployment can be re-run from scratch against a fresh VM at any time.

sudo nano /etc/sysconfig/myapp.conf

Troubleshooting Common Issues

If the service refuses to start, the first place to look is the systemd journal — every service on RHEL 10 logs there by default. Filter to the last boot to avoid wading through historical entries. The second most common class of problem on a fresh install is SELinux denials, especially when a service tries to read from or write to a directory that is not labelled with its expected type. Use ausearch -m AVC -ts recent to look for denials, and either set the correct file context with semanage fcontext + restorecon or flip the relevant boolean. Finally, if the service starts but is unreachable, double-check firewalld with firewall-cmd --list-all and confirm the runtime configuration matches the permanent one.

sudo journalctl -b --priority=err
sudo ausearch -m AVC -ts recent
sudo firewall-cmd --list-all

Best Practices and Hardening

For any production deployment on RHEL 10 you should track configuration in a version control system, apply security errata regularly with dnf-automatic, and centralise log collection so that a compromised host cannot quietly erase its own audit trail. Run periodic OpenSCAP compliance scans against the CIS or DISA STIG profile to catch drift. If the service exposes a network port, place it behind a reverse proxy or VPN where possible and rotate any credentials it uses on a schedule. Snapshot the system (using Stratis, LVM, or your hypervisor) before every major change so you have a fast rollback path.

sudo dnf install -y dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis /usr/share/xml/scap/ssg/content/ssg-rhel10-ds.xml

Verification

After completing every step, run a quick set of checks to confirm the deployment is healthy on RHEL 10. Examine the systemd unit state to make sure no units have failed, look for any SELinux denials in the audit log, inspect the listening sockets to confirm the service is bound to the expected interface and port, and finally make a real client request to validate end-to-end functionality. If any of those four checks fail, return to the troubleshooting section before treating the deployment as complete.

sudo systemctl --failed
sudo ausearch -m AVC -ts recent || true
sudo ss -tulpn
sudo journalctl --since "10 minutes ago" --priority=warning

Conclusion

You have successfully completed how to Install Git 2.45 on RHEL 10 on RHEL 10. The configuration is now persistent across reboots thanks to systemd, protected by SELinux in enforcing mode, and reachable through the firewalld rules you added. From here you can integrate the service with your monitoring stack, harden it further with auditd rules, and roll it out across a fleet using Ansible playbooks.

Looking forward, consider encoding the steps above as an Ansible role so the procedure becomes reproducible across your entire fleet, and add a Prometheus scrape config (or a Zabbix template) so the service is monitored from the moment it starts. Pair the deployment with a backup strategy — restic, borgbackup, or rsnapshot all work well on RHEL 10 — so that recovery from data loss is a matter of minutes rather than hours.