Skip to content

Git Unsafe Repository Error: Solutions for "repository is owned by someone else"

Problem Overview

The "unsafe repository" error occurs when Git detects that the current repository directory is owned by a different user than the one running Git commands. This security feature was introduced in Git 2.35.2 to prevent potential exploits related to repository ownership.

Typical error message:

fatal: unsafe repository ('/home/repon' is owned by someone else)
To add an exception for this directory, call:
    git config --global --add safe.directory /home/repon

This commonly affects web applications (like those running under www-data user), scripts running under different user contexts, or when repositories were created with elevated privileges.

1. Mark Directory as Safe (Single Repository)

Add the specific repository to Git's safe directory list:

bash
git config --global --add safe.directory /path/to/your/repository

This adds the directory to your global Git configuration file (~/.gitconfig):

ini
[safe]
    directory = /path/to/your/repository

2. Mark All Directories as Safe (Use with Caution)

For development environments where security is less critical, you can mark all directories as safe:

bash
# Bash (escape the asterisk)
git config --global --add safe.directory '*'

# PowerShell (no escaping needed)
git config --global --add safe.directory *

Security Consideration

Using wildcards (*) disables Git's ownership security check entirely. Only use this in trusted environments.

3. Change Repository Ownership

If you have administrative access, change the repository ownership to match the user running Git commands:

bash
sudo chown -R username:group /path/to/repository

Replace username and group with the appropriate user and group (e.g., www-data:www-data for web servers).

4. System-Wide Configuration (Multi-user Environments)

For system services or multiple users, add safe directories to the system configuration:

bash
sudo git config --system --add safe.directory /path/to/repository

This modifies /etc/gitconfig and applies to all users on the system.

Platform-Specific Solutions

Windows Solutions

File Ownership Fix

  1. Right-click the repository folder → Properties → Security tab
  2. Click "Advanced" → Change owner to your user account
  3. Apply changes and ensure proper permissions

PowerShell Command

powershell
takeown /f . /r /d Y

This recursively takes ownership of all files in the current directory.

Web Server Environments (Apache, PHP)

For web applications running under www-data:

bash
# Create gitconfig for www-data
sudo -u www-data git config --global --add safe.directory /path/to/repository

# Or create config file manually
sudo mkdir -p /var/www/.git
sudo echo -e "[safe]\n\tdirectory = /path/to/repository" | sudo tee /var/www/.gitconfig

WSL (Windows Subsystem for Linux)

Edit the Git configuration file directly:

bash
nano ~/.gitconfig

Add your Windows paths using the appropriate format:

ini
[safe]
    directory = %(prefix)///wsl$/Ubuntu-20.04/path/to/repo

Advanced Scenarios

Jenkins Pipeline Integration

In Jenkins declarative pipelines, add this step:

groovy
stage('Setup') {
    steps {
        sh(label: 'Git config safedir', 
           script: "git config --global --add safe.directory ${env.WORKSPACE}")
    }
}

Preventing Duplicate Entries

When using automation, prevent duplicate safe directory entries:

bash
git config --global --replace-all safe.directory '*'

Troubleshooting Common Issues

Permission Denied Error

If you encounter permission errors when modifying Git config:

bash
# Use sudo for system-wide changes
sudo git config --system --add safe.directory /path/to/repository

# Or fix config file permissions
sudo chown $USER:$USER ~/.gitconfig

Environment Variables

Ensure HOME environment variable is properly set for the service user:

bash
# For www-data user
sudo -u www-data bash -c 'export HOME=/var/www; git config --global --add safe.directory /path/to/repo'

Security Best Practices

Recommended Approach

Prefer explicitly listing safe directories rather than using wildcards. This maintains security while solving the ownership issue.

  1. Least Privilege: Only add directories that absolutely need exception
  2. Regular Audits: Periodically review your safe directory listings
  3. User Context: Run Git commands with the appropriate user rather than adding exceptions
  4. Configuration Management: Use system-level configuration for multi-user environments

Version Compatibility

  • Git 2.35.2+: Security feature introduced
  • Git 2.36+: Wildcard support (*) added for safe directories

Check your Git version:

bash
git --version

Conclusion

The "unsafe repository" error is a security feature, not a bug. The optimal solution depends on your environment:

  • Development machines: Use explicit safe directory listing or ownership changes
  • Production servers: Prefer system-wide configuration with specific paths
  • CI/CD pipelines: Implement automation-friendly solutions like workspace configuration
  • Multi-user systems: Consider centralized configuration management

By understanding the security implications and choosing the appropriate solution, you can maintain both functionality and security in your Git workflow.