← Retour au blog
tech 21 July 2026

Understanding git --end-of-options: Enhanced Security for Your Scripts

Learn how the git --end-of-options flag enhances the security of your command-line scripts by preventing argument injection errors.

Article inspired by the original source
git --end-of-options ↗ nesbitt.io

Introduction

If you're a regular Git user, you're likely familiar with its diverse range of options and commands. However, some of these remain relatively unknown despite playing crucial roles in securing and enhancing the robustness of your scripts. One such option is --end-of-options, introduced in Git version 2.24.0 in November 2019. But why is this option necessary, and how can it secure our Git operations?

The Role of --end-of-options

In most Unix tools, -- marks the end of option parsing, meaning that all subsequent arguments are treated as files or data rather than options. For instance, rm -- -f removes a file named -f rather than passing the force flag. However, Git repurposed -- to separate revisions from pathspecs, creating ambiguity: when a revision starts with a dash, it can be interpreted as an option.

This is where --end-of-options comes in, clearly delineating the end of options and the beginning of revisions in commands such as git log. For example, git log --end-of-options "$rev" -- "$path" ensures that misinterpretations are avoided.

Gradual Adoption and Support

The --end-of-options flag was not adopted uniformly across all Git subcommands. For instance, git rev-parse only incorporated this option starting from version 2.30.0, and git checkout or git reset began accepting it from version 2.43.1. This gradual adoption underscores the importance of checking the compatibility of Git versions used in your development environments.

Enhanced Security: Avoiding Argument Injection

Argument injection is a well-documented vulnerability (CWE-88) that occurs when untrusted strings are passed into an argument list. Git, Mercurial, and ssh all offer options that allow specific commands to be configured. For example, git clone accepts --upload-pack=<cmd> to specify the server-side binary. If these options are misused with unverified data, they can become attack vectors. Using --end-of-options can help mitigate this risk by clearly separating options from revisions.

A Concrete Use Case

Imagine an automated deployment script where the revision to deploy is user-provided. By using git log --end-of-options "$rev" -- "$path", you ensure that even if $rev starts with a dash, it won't be interpreted as an option, thus avoiding potential errors.

Conclusion

Using --end-of-options is a recommended practice for all developers looking to secure their Git scripts. Besides clarifying command syntax, it also protects against potential vulnerabilities. To learn more about securing your development processes, let's discuss your project in 15 minutes.

Let's Discuss Your Project

Need help optimizing the security and efficiency of your scripts? Let's discuss your project in 15 minutes.

git end-of-options security argument injection version control
Deepthix newsletter · 100% AI · every Monday 8am

An AI agent reads tech for you.

Our AI agent scans ~200 sources per week and ships the best articles to your inbox Monday 8am. Free. One click to unsubscribe.

Visit the newsletter page →

Want to automate your operations?

Let's talk about your project in 15 minutes.

Book a call