Chapter 02Lesson 04~80 minutes

Installing Git, Configuration Scopes, Identity, Editors, and Credentials: Diagnostics, Failure Modes, Security, and Performance

Diagnose Git setup failures systematically: wrong executable, wrong identity scope, editor waits/failures, line-ending or file-mode noise, repeated credential prompts, and configuration inherited from unexpected includes.

DiagnosticsPATHSecurityFailure analysis

Learning objectives

  • Apply an evidence-first diagnostic sequence before changing configuration.
  • Resolve multiple Git installations and PATH ambiguity across common shells.
  • Trace identity and include precedence to the owning configuration source.
  • Diagnose editor/pager, EOL/file-mode, and credential-helper failures safely.
  • Recognize destructive Git commands that are irrelevant and dangerous during setup troubleshooting.

1. The diagnostic sequence — preserve evidence before changing configuration

  1. Preserve evidence: copy the exact command, error, current directory, Git version, and shell.
  2. Inspect: executable resolution, repository state, configuration origin/scope, relevant refs/history.
  3. Identify the layer: executable/PATH, config scope/include, editor/pager, credential transport, filesystem.
  4. Choose the narrowest correction: prefer local or temporary fixes over broad global changes.
  5. Verify: rerun the failing operation or a read-only equivalent and confirm no unrelated state changed.

This sequence prevents “configuration troubleshooting” from turning into unnecessary history rewriting or data deletion.

2. Failure mode — the wrong Git executable wins on PATH

Symptoms include an unexpectedly old version, features missing on one terminal but present in another, or configuration/helper behavior that changes between IDE and shell.

Git Bash, Bash, or zsh

git --version
command -v git
type -a git
git --exec-path

PowerShell

git --version
Get-Command git -All | Select-Object CommandType, Source, Version
where.exe git
git --exec-path

Fix PATH/installation ownership deliberately. Do not delete a second installation until you know what application depends on it.

3. Failure mode — identity configured in the wrong scope

A commit shows a personal email in a corporate repository, or Git still reports missing identity after you “configured it.” Inspect every matching source:

git config --show-origin --show-scope --get-regexp '^(user|author|committer)\.'
git log -1 --format=fuller

If the incorrect value is local, changing the global value will not override it. If a conditional include supplies it, editing the obvious ~/.gitconfig line may not be enough. Fix the owning source, then create a new test commit. Do not rewrite published history merely to hide an identity mistake unless your organization explicitly requires a coordinated history correction.

4. Failure mode — Git appears to hang because an editor is waiting

A command such as git commit without -m may intentionally wait for the editor to exit. Inspect the effective editor:

git var GIT_EDITOR
git config --show-origin --show-scope --get core.editor

If the editor is a GUI, some tools require a “wait” flag so Git knows when editing is complete. If the configured executable does not exist, Git will fail rather than commit.

5. Intentionally broken example — an editor that does not exist

Run this only in a disposable repository with a valid local identity:

git -c core.editor=definitely-not-an-editor commit --allow-empty

Typical output resembles:

error: cannot run definitely-not-an-editor: No such file or directory
error: unable to start editor 'definitely-not-an-editor'
Please supply the message using either -m or -F option.

Interpretation: Git reached the commit-message step, tried to execute the temporary editor selected by -c, and the OS could not start it. The commit was not created. Verify:

git status --short --branch
git log -1 --oneline

Repair by choosing an installed editor or supplying a message non-interactively for this command. There is no reason to reset, clean, or alter history.

6. Failure mode — line-ending churn

A file appears modified even though a teammate changed no meaningful text, or a cross-platform checkout produces a huge whitespace diff. Inspect before normalizing anything:

git status --short
git diff --stat
git diff --ignore-space-at-eol
git ls-files --eol
git config --show-origin --show-scope --get-regexp '^core\.(autocrlf|eol|safecrlf)$'

Also inspect .gitattributes. If the project lacks a shared EOL policy, design one and review the resulting normalization diff deliberately. Do not run mass conversion while other changes are mixed into the same working tree.

7. Failure mode — file-mode noise

If many files show executable-bit-only changes after moving a repository between filesystems:

git diff --summary
git config --show-origin --show-scope --get core.fileMode

Determine whether the current filesystem reliably preserves executable bits. A local core.fileMode=false may be appropriate on a filesystem that cannot represent them reliably, but do not make it a universal global policy.

8. Failure mode — repeated credential prompts

First separate HTTPS credential-helper behavior from SSH key behavior. For HTTPS:

git config --show-origin --show-scope --get-all credential.helper
git remote -v
Secret hygiene: inspect remote URLs locally, but do not paste URLs containing embedded usernames/tokens into tickets or chat. Modern workflows should avoid embedding secrets in URLs at all.

A missing helper, a helper not available on PATH, expired OAuth/token material, or host-specific credential matching can all cause prompts. Follow the helper and hosting provider documentation. Do not “diagnose” by printing stored passwords.

9. Failure mode — configuration inherited from an unexpected include

git config --list --show-origin --show-scope
git config --show-origin --show-scope --get-regexp '^(include|includeIf)\.'

The effective value may come from a file included by your global config. Fix the condition or included file rather than adding yet another higher-precedence override unless that override is intentional policy.

10. Security boundaries relevant to configuration

  • Do not store tokens/passwords directly in repository config or remote URLs.
  • Do not trust a credential helper executable merely because its name appears in config; know what program will run and how it stores credentials.
  • Do not copy an unknown core.editor, pager, alias, or helper command from an untrusted source. These settings can execute external programs.
  • Commit identity is not proof of authorization or authorship. Signing/trust policy is a separate chapter.

11. Performance issues that actually belong here

Configuration can affect perceived performance when Git launches a slow pager/editor/helper, when executable resolution points through a slow wrapper, or when repositories live on filesystems with very different metadata performance. Measure the symptom before tuning Git internals. Chapter 22 covers repository maintenance/performance structures; this chapter limits itself to setup-induced latency.

12. Red-zone commands are not configuration diagnostics

Do not reach for these while diagnosing setup: git reset --hard, git clean -fd, force pushes, reflog expiry, aggressive pruning, or history-rewrite tools. None is required to fix PATH, identity scope, editor/pager selection, credential-helper configuration, line endings, or include precedence. Those commands reduce recovery options and belong only in controlled later lessons.

13. Mini runbook — symptom to first evidence

Symptom First evidence Likely layer
Different Git version in IDE command resolution + --version PATH/executable
Wrong commit email --show-origin --show-scope identity scope/include
Commit waits with no terminal output git var GIT_EDITOR editor
Huge CRLF/LF diff git ls-files --eol + attributes/config working-tree conversion
HTTPS asks every time credential-helper config credential transport/helper

14. Knowledge check

Question 1. A local user.email is wrong. Will setting a different global email fix that repository?

Question 2. git commit shows no error but your terminal seems occupied. What should you inspect before killing processes?

Question 3. Why is git ls-files --eol useful before line-ending fixes?

Question 4. What is the security mistake in solving repeated HTTPS prompts by embedding a token in the remote URL?

Question 5. When an unexpected setting appears, what is the first configuration command to prefer?

15. Summary

Configuration failures become manageable when you refuse to guess. Resolve the executable, trace configuration origin/scope, identify external child tools, inspect filesystem conversion state, and keep credential contents private. Most setup incidents need a narrow configuration correction—not destructive repository surgery.

Next

Checkpoint the complete configuration workflow

Lesson 5 uses an isolated global-config file plus repository-local overrides so you can prove precedence, identity selection, line-ending/file-mode observations, and cleanup without touching your real user configuration.

Authoritative references

 git-config
 gitcredentials
 git-ls-files
 gitattributes

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.