Commit 6ce2274e authored by platyhouse's avatar platyhouse

# Git 설정 관리 유틸리티 스크립트 추가

## Git 설정 관리 도구

### 새 스크립트 생성
- ptyGitConfig: Git 설정을 조회하고 관리하는 bash 유틸리티 스크립트 추가

### 주요 기능
- ptyGitConfig: 현재 Git 설정을 출처(global/local/system)별로 색상 구분하여 표시
- ptyGitConfig: 각 설정 항목에 대한 한글 설명 자동 생성 (core, user, color, push, pull, fetch, merge, diff, rebase, branch, credential, commit, tag, log, status, stash, rerere, help, alias, http, gpg, submodule 등)
- ptyGitConfig: 추천 설정 옵션을 현재 설정 상태(✓/○)와 함께 표시

### 명령어 인터페이스
- ptyGitConfig list: 현재 설정만 표시
- ptyGitConfig recommend: 추천 설정만 표시
- ptyGitConfig get <key>: 특정 설정 값 확인
- ptyGitConfig set <key> <value>: 로컬 설정 변경
- ptyGitConfig set-global <key> <value>: 전역 설정 변경
parent d2cf1ec1
#!/bin/bash
# 색상 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
MAGENTA='\033[0;35m'
NC='\033[0m' # No Color
BOLD='\033[1m'
DIM='\033[2m'
# 설정 설명 함수
get_description() {
local key="$1"
local value="$2"
case "$key" in
# Core 설정
"core.ignorecase")
if [ "$value" = "true" ]; then
echo "대소문자 무시 (macOS/Windows 기본)"
else
echo "대소문자 구분 (Linux 기본)"
fi
;;
"core.precomposeunicode")
if [ "$value" = "true" ]; then
echo "유니코드 정규화 사용 (macOS 한글 파일명 호환)"
else
echo "유니코드 정규화 미사용"
fi
;;
"core.autocrlf")
case "$value" in
"true") echo "체크아웃시 LF→CRLF, 커밋시 CRLF→LF (Windows 권장)" ;;
"input") echo "커밋시만 CRLF→LF 변환 (macOS/Linux 권장)" ;;
"false") echo "줄바꿈 변환 안함" ;;
*) echo "줄바꿈 자동 변환 설정" ;;
esac
;;
"core.safecrlf")
case "$value" in
"true") echo "CRLF 변환시 데이터 손실 방지 (에러 발생)" ;;
"warn") echo "CRLF 변환시 경고만 표시" ;;
"false") echo "CRLF 변환 검사 안함" ;;
*) echo "CRLF 안전 검사 설정" ;;
esac
;;
"core.filemode")
if [ "$value" = "true" ]; then
echo "파일 권한(chmod) 변경 추적"
else
echo "파일 권한 변경 무시 (Windows 권장)"
fi
;;
"core.editor")
echo "Git 기본 편집기: $value"
;;
"core.pager")
echo "Git 페이저: $value"
;;
"core.excludesfile")
echo "전역 .gitignore 파일 경로"
;;
"core.whitespace")
echo "공백 문자 처리 규칙"
;;
"core.quotepath")
if [ "$value" = "false" ]; then
echo "비ASCII 파일명(한글 등) 그대로 표시"
else
echo "비ASCII 파일명 이스케이프 처리"
fi
;;
"core.symlinks")
if [ "$value" = "true" ]; then
echo "심볼릭 링크 지원"
else
echo "심볼릭 링크를 일반 파일로 처리"
fi
;;
"core.longpaths")
if [ "$value" = "true" ]; then
echo "260자 초과 긴 경로 지원 (Windows)"
else
echo "기본 경로 길이 제한 사용"
fi
;;
"core.compression")
echo "압축 레벨: $value (-1:기본, 0:없음, 1-9:레벨)"
;;
"core.packedgitlimit")
echo "팩 파일 메모리 제한: $value"
;;
"core.packedgitwindowsize")
echo "팩 파일 윈도우 크기: $value"
;;
# User 설정
"user.name")
echo "커밋 작성자 이름"
;;
"user.email")
echo "커밋 작성자 이메일"
;;
"user.signingkey")
echo "GPG 서명 키"
;;
# Color 설정
"color.ui")
if [ "$value" = "auto" ] || [ "$value" = "true" ]; then
echo "터미널 컬러 출력 활성화"
else
echo "터미널 컬러 출력 비활성화"
fi
;;
"color.branch")
echo "branch 명령 컬러 출력: $value"
;;
"color.diff")
echo "diff 명령 컬러 출력: $value"
;;
"color.status")
echo "status 명령 컬러 출력: $value"
;;
# Push 설정
"push.default")
case "$value" in
"simple") echo "현재 브랜치를 동일 이름의 원격 브랜치로 푸시 (Git 2.0+ 기본)" ;;
"current") echo "현재 브랜치를 동일 이름으로 푸시" ;;
"upstream"|"tracking") echo "현재 브랜치를 추적 브랜치로 푸시" ;;
"matching") echo "로컬/원격 이름이 같은 모든 브랜치 푸시 (구버전 기본)" ;;
"nothing") echo "명시적 지정 필요" ;;
*) echo "푸시 기본 동작 설정" ;;
esac
;;
"push.autoSetupRemote")
if [ "$value" = "true" ]; then
echo "푸시시 자동으로 원격 추적 브랜치 설정"
else
echo "원격 추적 브랜치 수동 설정 필요"
fi
;;
"push.followTags")
if [ "$value" = "true" ]; then
echo "푸시시 관련 태그도 함께 푸시"
else
echo "태그는 별도로 푸시 필요"
fi
;;
# Pull 설정
"pull.rebase")
case "$value" in
"true") echo "pull시 merge 대신 rebase 사용" ;;
"false") echo "pull시 기본 merge 사용" ;;
"interactive") echo "pull시 대화형 rebase 사용" ;;
"merges"|"preserve") echo "pull시 merge 커밋 보존하며 rebase" ;;
*) echo "pull 동작 설정" ;;
esac
;;
"pull.ff")
case "$value" in
"only") echo "fast-forward만 허용 (충돌시 실패)" ;;
"true") echo "가능하면 fast-forward 사용" ;;
"false") echo "항상 merge 커밋 생성" ;;
*) echo "fast-forward 설정" ;;
esac
;;
# Fetch 설정
"fetch.prune")
if [ "$value" = "true" ]; then
echo "fetch시 삭제된 원격 브랜치 자동 정리"
else
echo "삭제된 원격 브랜치 수동 정리 필요"
fi
;;
"fetch.pruneTags")
if [ "$value" = "true" ]; then
echo "fetch시 삭제된 원격 태그 자동 정리"
else
echo "삭제된 원격 태그 수동 정리 필요"
fi
;;
# Merge 설정
"merge.conflictstyle")
case "$value" in
"merge") echo "기본 충돌 스타일 (<<<< ==== >>>>)" ;;
"diff3") echo "3-way 충돌 스타일 (원본 포함)" ;;
"zdiff3") echo "향상된 3-way 스타일 (Git 2.35+)" ;;
*) echo "충돌 표시 스타일" ;;
esac
;;
"merge.tool")
echo "머지 도구: $value"
;;
"merge.ff")
case "$value" in
"true") echo "가능하면 fast-forward merge" ;;
"false") echo "항상 merge 커밋 생성" ;;
"only") echo "fast-forward만 허용" ;;
*) echo "fast-forward 설정" ;;
esac
;;
# Diff 설정
"diff.tool")
echo "diff 도구: $value"
;;
"diff.algorithm")
case "$value" in
"default"|"myers") echo "기본 diff 알고리즘" ;;
"minimal") echo "최소 변경 diff 알고리즘" ;;
"patience") echo "patience diff (더 읽기 좋음)" ;;
"histogram") echo "histogram diff (patience 개선)" ;;
*) echo "diff 알고리즘" ;;
esac
;;
"diff.colorMoved")
case "$value" in
"default"|"zebra") echo "이동된 코드 블록 다른 색상 표시" ;;
"plain") echo "이동된 라인 단순 표시" ;;
"blocks") echo "이동된 블록 표시" ;;
"dimmed-zebra") echo "이동된 블록 흐리게 표시" ;;
"no"|"false") echo "이동된 코드 표시 안함" ;;
*) echo "이동된 코드 표시 설정" ;;
esac
;;
"diff.renames")
if [ "$value" = "true" ] || [ "$value" = "copies" ]; then
echo "파일 이름 변경/복사 감지"
else
echo "파일 이름 변경 감지 안함"
fi
;;
# Rebase 설정
"rebase.autoStash")
if [ "$value" = "true" ]; then
echo "rebase 전 자동 stash, 후 자동 복원"
else
echo "rebase 전 수동 stash 필요"
fi
;;
"rebase.autoSquash")
if [ "$value" = "true" ]; then
echo "fixup!/squash! 커밋 자동 처리"
else
echo "fixup!/squash! 커밋 수동 처리"
fi
;;
"rebase.updateRefs")
if [ "$value" = "true" ]; then
echo "rebase시 관련 브랜치 포인터 자동 업데이트"
else
echo "rebase시 현재 브랜치만 업데이트"
fi
;;
# Branch 설정
"branch.autoSetupMerge")
case "$value" in
"always") echo "새 브랜치 생성시 항상 추적 설정" ;;
"true") echo "원격 브랜치 기반 생성시 추적 설정" ;;
"false") echo "자동 추적 설정 안함" ;;
"inherit") echo "부모 브랜치 추적 설정 상속" ;;
*) echo "브랜치 추적 자동 설정" ;;
esac
;;
"branch.autoSetupRebase")
case "$value" in
"always") echo "모든 추적 브랜치에서 pull시 rebase" ;;
"local") echo "로컬 브랜치에서 pull시 rebase" ;;
"remote") echo "원격 브랜치에서 pull시 rebase" ;;
"never") echo "자동 rebase 설정 안함" ;;
*) echo "자동 rebase 설정" ;;
esac
;;
"branch.sort")
echo "브랜치 정렬 기준: $value"
;;
# Init 설정
"init.defaultBranch")
echo "새 저장소 기본 브랜치 이름: $value"
;;
# Credential 설정
"credential.helper")
case "$value" in
"cache") echo "메모리에 임시 저장 (15분 기본)" ;;
"store") echo "파일에 평문 저장 (보안 주의)" ;;
"osxkeychain") echo "macOS 키체인에 저장" ;;
"manager"|"manager-core") echo "Git Credential Manager 사용" ;;
"wincred") echo "Windows 자격증명 관리자 사용" ;;
*) echo "자격증명 저장 방식" ;;
esac
;;
# Commit 설정
"commit.gpgsign")
if [ "$value" = "true" ]; then
echo "모든 커밋에 GPG 서명"
else
echo "GPG 서명 선택적 사용"
fi
;;
"commit.template")
echo "커밋 메시지 템플릿 파일: $value"
;;
"commit.verbose")
if [ "$value" = "true" ]; then
echo "커밋시 diff 내용 표시"
else
echo "커밋시 diff 표시 안함"
fi
;;
# Tag 설정
"tag.gpgsign")
if [ "$value" = "true" ]; then
echo "모든 태그에 GPG 서명"
else
echo "GPG 서명 선택적 사용"
fi
;;
"tag.sort")
echo "태그 정렬 기준: $value"
;;
# Log 설정
"log.date")
case "$value" in
"relative") echo "상대적 시간 표시 (예: 2 hours ago)" ;;
"local") echo "로컬 시간대로 표시" ;;
"iso"|"iso8601") echo "ISO 8601 형식" ;;
"short") echo "YYYY-MM-DD 형식" ;;
"format:"*) echo "커스텀 날짜 형식" ;;
*) echo "로그 날짜 형식" ;;
esac
;;
"log.showSignature")
if [ "$value" = "true" ]; then
echo "로그에 GPG 서명 정보 표시"
else
echo "로그에 서명 정보 숨김"
fi
;;
# Status 설정
"status.showUntrackedFiles")
case "$value" in
"no") echo "추적되지 않는 파일 표시 안함" ;;
"normal") echo "추적되지 않는 파일 표시 (기본)" ;;
"all") echo "모든 개별 파일 표시" ;;
*) echo "추적되지 않는 파일 표시 설정" ;;
esac
;;
"status.submoduleSummary")
if [ "$value" = "true" ]; then
echo "서브모듈 변경 요약 표시"
else
echo "서브모듈 변경 요약 숨김"
fi
;;
# Stash 설정
"stash.showPatch")
if [ "$value" = "true" ]; then
echo "stash list에 패치 내용 표시"
else
echo "stash list 간단히 표시"
fi
;;
# Rerere 설정
"rerere.enabled")
if [ "$value" = "true" ]; then
echo "충돌 해결 방법 기억 및 재사용"
else
echo "충돌 해결 기록 안함"
fi
;;
"rerere.autoUpdate")
if [ "$value" = "true" ]; then
echo "rerere 적용 후 자동 스테이징"
else
echo "rerere 적용 후 수동 스테이징"
fi
;;
# Help 설정
"help.autocorrect")
if [ "$value" = "0" ] || [ -z "$value" ]; then
echo "명령어 자동 수정 안함"
elif [ "$value" = "immediate" ]; then
echo "오타시 즉시 자동 수정 실행"
elif [ "$value" = "prompt" ]; then
echo "오타시 수정 확인 후 실행"
else
echo "오타시 ${value}0ms 후 자동 수정 실행"
fi
;;
# Alias 설정
alias.*)
echo "단축 명령어"
;;
# Remote 설정
remote.*.url)
echo "원격 저장소 URL"
;;
remote.*.fetch)
echo "fetch 참조 스펙"
;;
remote.*.pushurl)
echo "push 전용 URL (다른 URL로 push)"
;;
# Branch specific 설정
branch.*.remote)
echo "이 브랜치의 원격 저장소"
;;
branch.*.merge)
echo "이 브랜치가 추적하는 원격 브랜치"
;;
branch.*.rebase)
if [ "$value" = "true" ]; then
echo "이 브랜치 pull시 rebase 사용"
else
echo "이 브랜치 pull시 merge 사용"
fi
;;
# HTTP 설정
"http.sslVerify")
if [ "$value" = "true" ]; then
echo "SSL 인증서 검증 (보안)"
else
echo "SSL 인증서 검증 안함 (보안 위험!)"
fi
;;
"http.proxy")
echo "HTTP 프록시: $value"
;;
"http.postBuffer")
echo "HTTP POST 버퍼 크기 (대용량 push시 조정)"
;;
# GPG 설정
"gpg.format")
case "$value" in
"openpgp") echo "OpenPGP 형식 서명" ;;
"x509") echo "X.509 형식 서명" ;;
"ssh") echo "SSH 키로 서명" ;;
*) echo "서명 형식" ;;
esac
;;
"gpg.ssh.allowedSignersFile")
echo "SSH 서명 허용 키 파일"
;;
# Submodule 설정
"submodule.recurse")
if [ "$value" = "true" ]; then
echo "서브모듈에도 명령 재귀 적용"
else
echo "서브모듈 별도 처리"
fi
;;
# 기본 처리
*)
echo ""
;;
esac
}
# origin을 짧은 형태로 변환
format_origin() {
local origin="$1"
case "$origin" in
"file:"*"/.gitconfig")
echo -e "${BLUE}[global]${NC}"
;;
"file:"*".git/config")
echo -e "${GREEN}[local]${NC}"
;;
"file:/etc/gitconfig"|"file:"*"/etc/gitconfig")
echo -e "${RED}[system]${NC}"
;;
"file:"*".config/git/config")
echo -e "${BLUE}[global]${NC}"
;;
"file:"*"Xcode"*"gitconfig")
echo -e "${MAGENTA}[xcode]${NC}"
;;
"file:"*"git-core/gitconfig")
echo -e "${MAGENTA}[system]${NC}"
;;
"command line:")
echo -e "${CYAN}[cmdline]${NC}"
;;
"blob:"*)
echo -e "${CYAN}[blob]${NC}"
;;
*)
# 파일 경로만 추출해서 짧게 표시
local short_path="${origin#file:}"
short_path="${short_path##*/}" # 파일명만
echo -e "${DIM}[$short_path]${NC}"
;;
esac
}
# 현재 설정 표시
show_current_config() {
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
echo -e "${BOLD}${CYAN} 현재 Git 설정 (git config --list --show-origin)${NC}"
echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
echo ""
echo -e " ${BLUE}[global]${NC}${DIM} ~/.gitconfig${NC} ${GREEN}[local]${NC}${DIM} .git/config${NC} ${RED}[system]${NC}${DIM} /etc/gitconfig${NC} ${MAGENTA}[xcode]${NC}${DIM} Xcode 번들${NC}"
echo ""
local current_section=""
# --show-origin 출력: "file:/path/to/config\tkey=value"
git config --list --show-origin | sort -t$'\t' -k2 | while IFS=$'\t' read -r origin keyvalue; do
# key=value 분리
local key="${keyvalue%%=*}"
local value="${keyvalue#*=}"
# 섹션 구분
local section="${key%%.*}"
if [ "$section" != "$current_section" ]; then
current_section="$section"
echo ""
echo -e "${BOLD}${YELLOW}[$section]${NC}"
fi
local desc=$(get_description "$key" "$value")
local origin_tag=$(format_origin "$origin")
if [ -n "$desc" ]; then
printf " %-18b ${GREEN}%-40s${NC} = ${BOLD}%-20s${NC} ${DIM}# %s${NC}\n" "$origin_tag" "$key" "$value" "$desc"
else
printf " %-18b ${GREEN}%-40s${NC} = ${BOLD}%s${NC}\n" "$origin_tag" "$key" "$value"
fi
done
}
# 설정 상태 확인 및 출력 함수
# 사용법: show_config_option "key" "recommended_value" "description" "options"
show_config_option() {
local key="$1"
local recommended="$2"
local desc="$3"
local options="$4"
local current=$(git config --get "$key" 2>/dev/null)
local status_icon
local cmd_color
local value_display
if [ -n "$current" ]; then
# 설정됨
status_icon="${GREEN}${NC}"
cmd_color="${DIM}"
value_display="${GREEN}현재: $current${NC}"
else
# 미설정
status_icon="${YELLOW}${NC}"
cmd_color="${CYAN}"
value_display="${YELLOW}미설정${NC}"
fi
echo -e " ${status_icon} ${cmd_color}git config --global $key \"$recommended\"${NC}"
echo -e " ${value_display} ${DIM}# $desc${NC}"
if [ -n "$options" ]; then
echo -e " ${DIM}옵션: $options${NC}"
fi
}
# 추천 설정 표시
show_recommended_settings() {
echo ""
echo -e "${BOLD}${MAGENTA}════════════════════════════════════════════════════════════════════════════════${NC}"
echo -e "${BOLD}${MAGENTA} 추천 Git 설정 옵션${NC}"
echo -e "${BOLD}${MAGENTA}════════════════════════════════════════════════════════════════════════════════${NC}"
echo ""
echo -e " ${GREEN}${NC} 설정됨 ${YELLOW}${NC} 미설정 (적용 권장)"
echo ""
echo -e "${BOLD}${YELLOW}[기본 설정 - 필수]${NC}"
show_config_option "user.name" "Your Name" "커밋에 표시될 이름" ""
show_config_option "user.email" "your@email.com" "커밋에 표시될 이메일" ""
echo ""
echo -e "${BOLD}${YELLOW}[에디터 설정]${NC}"
show_config_option "core.editor" "vim" "Git 기본 편집기" "vim | nano | code --wait | subl -n -w"
echo ""
echo -e "${BOLD}${YELLOW}[줄바꿈 처리 - OS별 권장]${NC}"
show_config_option "core.autocrlf" "input" "줄바꿈 자동 변환" "input (macOS/Linux) | true (Windows) | false"
echo ""
echo -e "${BOLD}${YELLOW}[한글 파일명 처리]${NC}"
show_config_option "core.quotepath" "false" "비ASCII 파일명 표시" "false: 한글 그대로 | true: 이스케이프"
show_config_option "core.precomposeunicode" "true" "macOS 한글 파일명 호환" "true: NFD→NFC 정규화"
echo ""
echo -e "${BOLD}${YELLOW}[기본 브랜치 이름]${NC}"
show_config_option "init.defaultBranch" "main" "새 저장소 기본 브랜치" "main | master | trunk"
echo ""
echo -e "${BOLD}${YELLOW}[Push 설정]${NC}"
show_config_option "push.default" "current" "푸시 기본 동작" "current | simple (기본) | upstream | matching"
show_config_option "push.autoSetupRemote" "true" "자동 원격 추적 설정" "true | false"
show_config_option "push.followTags" "true" "푸시시 관련 태그도 함께" "true | false"
echo ""
echo -e "${BOLD}${YELLOW}[Pull 설정]${NC}"
show_config_option "pull.rebase" "true" "pull시 rebase 사용" "true: rebase | false: merge (기본)"
show_config_option "pull.ff" "only" "fast-forward 설정" "only | true (기본) | false"
echo ""
echo -e "${BOLD}${YELLOW}[Fetch 설정]${NC}"
show_config_option "fetch.prune" "true" "삭제된 원격 브랜치 정리" "true | false"
show_config_option "fetch.pruneTags" "true" "삭제된 원격 태그 정리" "true | false"
echo ""
echo -e "${BOLD}${YELLOW}[Rebase 설정]${NC}"
show_config_option "rebase.autoStash" "true" "rebase 전후 자동 stash" "true | false"
show_config_option "rebase.autoSquash" "true" "fixup!/squash! 자동 처리" "true | false"
show_config_option "rebase.updateRefs" "true" "관련 브랜치 자동 업데이트" "true | false"
echo ""
echo -e "${BOLD}${YELLOW}[Merge 설정]${NC}"
show_config_option "merge.conflictstyle" "zdiff3" "충돌 표시 스타일" "zdiff3 (Git 2.35+) | diff3 | merge (기본)"
show_config_option "merge.ff" "false" "항상 merge 커밋 생성" "false | true (기본) | only"
echo ""
echo -e "${BOLD}${YELLOW}[Diff 설정]${NC}"
show_config_option "diff.algorithm" "histogram" "diff 알고리즘" "histogram | patience | minimal | default"
show_config_option "diff.colorMoved" "default" "이동된 코드 블록 표시" "default | zebra | plain | dimmed-zebra | no"
show_config_option "diff.renames" "true" "파일 이름 변경 감지" "true | copies | false"
echo ""
echo -e "${BOLD}${YELLOW}[충돌 해결 기억 (rerere)]${NC}"
show_config_option "rerere.enabled" "true" "충돌 해결 방법 기억" "true | false"
show_config_option "rerere.autoUpdate" "true" "rerere 적용 후 자동 스테이징" "true | false"
echo ""
echo -e "${BOLD}${YELLOW}[명령어 자동 수정]${NC}"
show_config_option "help.autocorrect" "prompt" "오타 자동 수정" "prompt | immediate | 10 (1초후) | 0 (끔)"
echo ""
echo -e "${BOLD}${YELLOW}[자격증명 저장]${NC}"
show_config_option "credential.helper" "osxkeychain" "자격증명 저장 방식" "osxkeychain (macOS) | manager (Win) | cache | store"
echo ""
echo -e "${BOLD}${YELLOW}[커밋 설정]${NC}"
show_config_option "commit.verbose" "true" "커밋시 diff 표시" "true | false"
echo ""
echo -e "${BOLD}${YELLOW}[Status 설정]${NC}"
show_config_option "status.showUntrackedFiles" "all" "추적 안된 파일 표시" "all | normal (기본) | no"
echo ""
echo -e "${BOLD}${YELLOW}[유용한 alias]${NC}"
show_config_option "alias.st" "status -sb" "git st → 간단한 상태" ""
show_config_option "alias.co" "checkout" "git co → checkout 단축" ""
show_config_option "alias.br" "branch -vv" "git br → 브랜치 상세" ""
show_config_option "alias.lg" "log --oneline --graph --decorate -20" "git lg → 그래프 로그" ""
show_config_option "alias.unstage" "reset HEAD --" "git unstage → 스테이지 취소" ""
show_config_option "alias.last" "log -1 HEAD --stat" "git last → 마지막 커밋" ""
show_config_option "alias.amend" "commit --amend --no-edit" "git amend → 커밋 수정" ""
show_config_option "alias.undo" "reset --soft HEAD~1" "git undo → 마지막 커밋 취소" ""
echo ""
echo -e "${BOLD}${YELLOW}[GPG/SSH 서명]${NC}"
show_config_option "commit.gpgsign" "true" "모든 커밋에 서명" "true | false"
show_config_option "gpg.format" "ssh" "서명 형식" "ssh | openpgp | x509"
show_config_option "user.signingkey" "~/.ssh/id_ed25519.pub" "서명 키" ""
echo ""
echo -e "${BOLD}${YELLOW}[대용량 파일/저장소]${NC}"
show_config_option "http.postBuffer" "524288000" "HTTP POST 버퍼 (500MB)" ""
show_config_option "core.compression" "9" "압축 레벨" "0-9 (-1: 기본)"
}
# 특정 설정 변경
apply_setting() {
local scope="$1" # --global, --local, --system
local key="$2"
local value="$3"
if [ -z "$key" ]; then
echo -e "${RED}설정 키를 입력해주세요${NC}"
return 1
fi
if [ -z "$value" ]; then
echo -e "${YELLOW}현재 값:${NC} $(git config $scope --get "$key" 2>/dev/null || echo "(설정 안됨)")"
return 0
fi
git config $scope "$key" "$value"
echo -e "${GREEN}설정 완료:${NC} $key = $value"
}
# 도움말
show_help() {
echo -e "${BOLD}사용법:${NC}"
echo " ptyGitConfig 현재 설정 및 추천 옵션 표시"
echo " ptyGitConfig list 현재 설정만 표시"
echo " ptyGitConfig recommend 추천 설정만 표시"
echo " ptyGitConfig get <key> 특정 설정 값 확인"
echo " ptyGitConfig set <key> <value> 로컬 설정"
echo " ptyGitConfig set-global <key> <value> 전역 설정"
echo ""
echo -e "${BOLD}예시:${NC}"
echo " ptyGitConfig get user.name"
echo " ptyGitConfig set-global user.name \"John Doe\""
echo " ptyGitConfig set-global core.autocrlf input"
}
# 메인 로직
case "$1" in
"list"|"-l")
show_current_config
;;
"recommend"|"rec"|"-r")
show_recommended_settings
;;
"get"|"-g")
value=$(git config --get "$2" 2>/dev/null)
if [ -n "$value" ]; then
desc=$(get_description "$2" "$value")
echo -e "${GREEN}$2${NC} = ${BOLD}$value${NC}"
if [ -n "$desc" ]; then
echo -e "${DIM}# $desc${NC}"
fi
else
echo -e "${YELLOW}설정되지 않음: $2${NC}"
fi
;;
"set"|"-s")
apply_setting "--local" "$2" "$3"
;;
"set-global"|"-sg")
apply_setting "--global" "$2" "$3"
;;
"help"|"-h"|"--help")
show_help
;;
"")
show_current_config
echo ""
show_recommended_settings
;;
*)
echo -e "${RED}알 수 없는 명령: $1${NC}"
show_help
exit 1
;;
esac
echo ""
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment