Files
Nexus/scripts/normalize_worktree_lf.sh
T
2026-07-08 22:31:31 +08:00

69 lines
1.7 KiB
Bash

#!/usr/bin/env bash
# Restore LF for git-tracked files from index; strip CR from untracked *.sh in scripts/
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT}"
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
echo "normalize_worktree_lf: not a git repo" >&2
exit 1
fi
git config core.autocrlf false 2>/dev/null || true
echo "Restoring tracked files from git index (LF)..."
git config core.autocrlf false 2>/dev/null || true
git config core.eol lf 2>/dev/null || true
# git restore 在部分环境下仍会把工作区检出为 CRLF;直接从索引 blob 写盘(LF 真相源)
rewrite_from_index() {
local n=0
while IFS= read -r f; do
[ -n "${f}" ] || continue
mkdir -p "$(dirname "${f}")"
git show ":${f}" > "${f}.tmp" && mv -f "${f}.tmp" "${f}"
n=$((n + 1))
done
echo "${n}"
}
echo "Rewriting tracked sources from git index (LF blobs)..."
paths=(
"server"
"scripts"
"deploy"
"docker"
"tests"
"web/agent"
"frontend/src"
"frontend/e2e"
"mcp"
".cursor/rules"
)
total=0
for p in "${paths[@]}"; do
count=$(git ls-files "${p}" 2>/dev/null | rewrite_from_index)
total=$((total + count))
done
echo " ${total} file(s) rewritten"
shopt -s nullglob
for f in scripts/*.sh docker/*.sh deploy/*.sh; do
[ -f "${f}" ] || continue
if grep -q $'\r' "${f}" 2>/dev/null; then
sed -i 's/\r$//' "${f}"
echo " stripped CR: ${f}"
fi
done
for f in scripts/proxy-env.sh scripts/with-proxy.sh scripts/linux_mcp_mysql.sh UBUNTU-DEV-README.txt; do
[ -f "${f}" ] || continue
if grep -q $'\r' "${f}" 2>/dev/null; then
sed -i 's/\r$//' "${f}"
echo " stripped CR: ${f}"
fi
done
echo "Done. Verify: python3 scripts/check_worktree_eol.py"