diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..0d6dce8 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,334 @@ +# Agent Guidelines for QuickGit + +This document provides coding agents with essential information about the QuickGit codebase, including build commands, code style, and architectural conventions. + +--- + +## Project Overview + +**QuickGit** is a modular CLI Git management tool written in Python 3.6+. It simplifies Git operations through an interactive menu system with colorful console output. + +**Key Technologies:** +- Pure Python 3.6+ (no external dependencies) +- Standard library only: `subprocess`, `os`, `datetime`, `sys` +- Cross-platform support: Windows, Linux, macOS +- ANSI escape codes for colorful console output + +--- + +## Build, Run, and Test Commands + +### Running the Application + +```bash +# Recommended: Run the modular version +python quickgit.py # Windows +python3 quickgit.py # Linux/macOS + +# Platform-specific launchers: +run.bat # Windows (sets UTF-8 encoding) +./run.sh # Linux/macOS (first run: chmod +x run.sh) + +# Legacy: Run the single-file version +python mengya_git_manager.py +``` + +### Testing + +**No formal test suite exists yet.** Manual testing workflow: + +1. **Test in a clean directory:** + ```bash + cd /path/to/test/directory + python E:\SmyProjects\Python\脚本\萌芽一键Git管理\quickgit.py + ``` + +2. **Test each menu option:** + - Option 1: Initialize Git repo + - Option 2: Commit and push (requires changes) + - Option 3: Pull from remote + - Option 4: View status + - Option 5: Manage remotes + - Option 6: Exit + +3. **Verify console output:** + - Check colors render correctly + - Ensure ASCII dividers align (60 chars wide) + - No encoding errors with Chinese characters + +### Linting and Code Quality + +```bash +# No formal linting configured yet +# Recommended tools for future use: +# pip install pylint black mypy + +# Type checking (Python 3.10+ syntax used): +# mypy quickgit/ + +# Formatting: +# black quickgit/ --line-length 100 + +# Linting: +# pylint quickgit/ +``` + +--- + +## Code Style Guidelines + +### File Organization + +**Module Structure:** +``` +quickgit/ +├── __init__.py # Package init (empty) +├── config.py # Configuration constants +├── utils.py # Utilities (Colors, CommandExecutor, OutputFormatter, InputValidator, PlatformUtils) +├── git_operations.py # Git command wrapper +├── remote_manager.py # Remote repository management +└── ui.py # User interface and menu system +``` + +**Principle:** Each module has a single, well-defined responsibility. + +### Import Conventions + +**Order:** +1. Standard library imports +2. Relative imports from `quickgit` package + +**Style:** +```python +# Standard library +import os +import sys +from datetime import datetime + +# Internal modules (relative imports preferred) +from .utils import CommandExecutor, OutputFormatter, Colors +from .config import Config +``` + +**Lazy imports for circular dependency avoidance:** +```python +def some_function(): + from .utils import Colors # Import inside function if needed + print(f"{Colors.CYAN}Message{Colors.ENDC}") +``` + +### Type Hints + +**Required for all function signatures:** + +```python +# Good +def run(command: str, show_output: bool = True) -> tuple[bool, str]: + """Execute command and return (success, output)""" + pass + +def get_remotes(self) -> list[str]: + """Get all remote repositories""" + pass + +def confirm(prompt: str, default: bool = False) -> bool: + """Get user confirmation""" + pass +``` + +**Note:** Uses Python 3.10+ syntax (`list[str]`, `tuple[bool, str]`). For Python 3.6-3.9 compatibility, use: +```python +from typing import List, Tuple +def get_remotes(self) -> List[str]: ... +``` + +### Naming Conventions + +- **Classes:** `PascalCase` (e.g., `GitOperations`, `RemoteManager`) +- **Functions/Methods:** `snake_case` (e.g., `add_github_remote`, `show_main_menu`) +- **Constants:** `UPPER_SNAKE_CASE` (e.g., `DEFAULT_BRANCH`, `GITEA_HOST`) +- **Private methods:** Prefix with `_` (e.g., `_create_gitignore`, `_add_remote`) +- **Module-level:** Avoid global variables; use `Config` class for constants + +### Formatting and Whitespace + +- **Line length:** Aim for 100 characters max (not strictly enforced) +- **Indentation:** 4 spaces (no tabs) +- **Blank lines:** 2 between top-level definitions, 1 between methods +- **Strings:** Use double quotes `"` for user-facing text, either for code strings + +### Error Handling + +**Always provide user-friendly feedback:** + +```python +# Good +try: + with open('.gitignore', 'w', encoding='utf-8') as f: + f.write(Config.GITIGNORE_TEMPLATE) + OutputFormatter.success(".gitignore文件创建成功") +except Exception as e: + OutputFormatter.error(f".gitignore文件创建失败: {str(e)}") +``` + +**Command execution pattern:** + +```python +success, output = self.executor.run("git status", show_output=False) +if success: + OutputFormatter.success("操作成功") +else: + OutputFormatter.error("操作失败") + return False +``` + +**Never swallow exceptions silently.** Always log errors via `OutputFormatter.error()`. + +--- + +## Console Output Guidelines + +### Critical Rules + +1. **NO EMOJI CHARACTERS** - They cause Windows console encoding errors +2. **NO UNICODE BOX-DRAWING** (`┌─┐│└┘╔═╗║╚╝`) - They misalign across terminals +3. **Use ASCII only:** `=`, `-`, `·` for dividers +4. **Status indicators:** `[√]`, `[×]`, `[i]`, `[!]`, `[>]` instead of Unicode symbols +5. **Fixed width:** All dividers are exactly 60 characters wide + +### Color Usage + +**Color scheme:** +```python +Colors.BRIGHT_GREEN # Success messages +Colors.BRIGHT_RED # Errors +Colors.BRIGHT_CYAN # Info/prompts +Colors.BRIGHT_YELLOW # Warnings/section headers +Colors.BRIGHT_MAGENTA # Main headers +Colors.WHITE # General text +``` + +**Always reset colors:** +```python +print(f"{Colors.BRIGHT_GREEN}Success{Colors.ENDC}") # ENDC resets to default +``` + +### Output Formatting Functions + +```python +OutputFormatter.header("Title") # Top-level header (cyan/magenta) +OutputFormatter.section("Section") # Section header (yellow/blue) +OutputFormatter.divider() # 60-char line: ---------- +OutputFormatter.success("Done!") # [√] Green success +OutputFormatter.error("Failed!") # [×] Red error +OutputFormatter.info("Note...") # [i] Cyan info +OutputFormatter.warning("Warning!") # [!] Yellow warning +OutputFormatter.step(1, "Step one") # [1] Step indicator +OutputFormatter.menu_item(1, "Option") # [1] Menu item +``` + +--- + +## Git Operations Patterns + +### SSH Configuration + +- **GitHub:** `git@github.com:shumengya/{repo}.git` +- **Gitea:** `ssh://git@repo.shumengya.top:8022/{user}/{repo}.git` + +All remote operations use SSH (no HTTPS). + +### Command Execution + +**Pattern for all Git commands:** + +```python +# 1. Show status indicator +OutputFormatter.status('running', "Pushing to remote...") + +# 2. Execute command (capture output) +success, output = self.executor.run("git push origin main", show_output=True) + +# 3. Provide feedback +if success: + OutputFormatter.success("Push successful") +else: + OutputFormatter.error("Push failed") + +return success +``` + +--- + +## Adding New Features + +### Checklist for New Functionality + +1. **Determine the module:** Where does this feature belong? + - Git operations → `git_operations.py` + - Remote management → `remote_manager.py` + - UI/menus → `ui.py` + - Config/constants → `config.py` + - Utilities → `utils.py` + +2. **Add type hints** to all functions + +3. **Use OutputFormatter** for all user-facing messages + +4. **Test manually** in a clean directory + +5. **Update README.md** if adding user-facing features + +--- + +## Common Gotchas + +1. **Windows path handling:** Use `os.path` or `pathlib` for cross-platform paths +2. **Encoding:** All file I/O must specify `encoding='utf-8'` +3. **Subprocess:** Always use `encoding='utf-8', errors='ignore'` in `subprocess.run()` +4. **Git output:** Some commands have localized output; parse carefully +5. **Empty commits:** Check `git status --short` before committing +6. **Divider width:** Always use exactly 60 characters for consistency +7. **Platform differences:** + - Use `python3` on Linux/macOS, `python` on Windows + - Shell scripts: `.sh` for Unix, `.bat` for Windows + - Clear screen: Use `PlatformUtils.clear_screen()` for cross-platform support + +--- + +## Platform-Specific Notes + +### Windows +- Use `run.bat` launcher to set UTF-8 encoding (`chcp 65001`) +- ANSI colors supported on Windows 10+ by default +- Python command: `python` (not `python3`) + +### Linux/macOS +- Use `run.sh` launcher (requires `chmod +x run.sh` first time) +- Ensure terminal supports UTF-8 encoding +- Python command: `python3` (not `python`) +- Shell uses bash (shebang: `#!/bin/bash`) + +### Cross-Platform Code +- Use `PlatformUtils.is_windows()`, `is_linux()`, `is_mac()` for platform detection +- Use `PlatformUtils.clear_screen()` instead of `os.system('cls')` or `os.system('clear')` +- Always use `os.path.join()` or `pathlib.Path` for file paths + +--- + +## Future Development Notes + +**Planned features (not yet implemented):** +- Branch management +- Tag management +- Conflict resolution assistance +- Custom configuration file support +- Batch operations for multiple repositories +- Formal test suite (pytest recommended) +- CI/CD pipeline + +**When implementing these:** +- Follow the existing modular architecture +- Add to appropriate module (or create new module if needed) +- Maintain the colorful, user-friendly console output style +- Keep Windows compatibility in mind diff --git a/README.md b/README.md index b7328e7..62791c2 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - **状态查看** - 快速查看仓库状态和提交历史 - **彩色界面** - 友好的彩色控制台输出 - **模块化设计** - 易于维护和扩展 +- **跨平台支持** - 完美兼容 Windows、Linux、macOS ## 项目结构 @@ -19,11 +20,13 @@ QuickGit/ ├── quickgit/ # 核心模块 │ ├── __init__.py # 包初始化 │ ├── config.py # 配置模块 -│ ├── utils.py # 工具类(命令执行、输出格式化、输入验证) +│ ├── utils.py # 工具类(命令执行、输出格式化、输入验证、平台工具) │ ├── git_operations.py # Git操作模块 │ ├── remote_manager.py # 远程仓库管理模块 │ └── ui.py # UI交互模块 ├── quickgit.py # 主程序入口 +├── run.bat # Windows启动脚本 +├── run.sh # Linux/macOS启动脚本 ├── mengya_git_manager.py # 旧版单文件脚本(兼容保留) └── README.md # 项目文档 ``` @@ -32,8 +35,30 @@ QuickGit/ ### 运行脚本 +**Windows:** ```bash -# 使用新版模块化脚本(推荐) +# 使用启动脚本(自动设置UTF-8编码) +run.bat + +# 或直接运行 +python quickgit.py +``` + +**Linux/macOS:** +```bash +# 首次使用需要添加执行权限 +chmod +x run.sh + +# 使用启动脚本(推荐) +./run.sh + +# 或直接运行 +python3 quickgit.py +``` + +**通用方式:** +```bash +# 新版模块化脚本(推荐) python quickgit.py # 或使用旧版单文件脚本 @@ -97,9 +122,21 @@ python mengya_git_manager.py ## 系统要求 -- Python 3.6+ -- Git 已安装并配置 -- SSH密钥已配置(用于远程仓库推送) +- **Python:** 3.6+ (Linux/macOS 使用 python3) +- **Git:** 已安装并配置 +- **SSH密钥:** 已配置(用于远程仓库推送) +- **操作系统:** Windows、Linux、macOS 均支持 + +### 平台特定说明 + +**Windows:** +- 建议使用 `run.bat` 启动,自动配置UTF-8编码 +- 控制台需支持ANSI颜色代码(Windows 10+自带支持) + +**Linux/macOS:** +- 使用 `python3` 命令运行 +- 确保终端支持UTF-8编码和颜色显示 +- 首次使用 `run.sh` 需要添加执行权限:`chmod +x run.sh` ## 注意事项 @@ -134,6 +171,7 @@ A: 目前支持init、add、commit、push、pull等常用操作 - `CommandExecutor`: 命令执行器 - `OutputFormatter`: 输出格式化器 - `InputValidator`: 输入验证器 +- `PlatformUtils`: 跨平台工具(清屏、平台检测) ### git_operations.py - Git操作模块 提供Git基本操作功能: diff --git a/quickgit/utils.py b/quickgit/utils.py index ece8493..2cd67b4 100644 --- a/quickgit/utils.py +++ b/quickgit/utils.py @@ -2,7 +2,9 @@ 工具类模块 - 提供命令执行、输出格式化等工具函数 """ +import os import subprocess +import sys class Colors: @@ -160,6 +162,47 @@ class OutputFormatter: print(f"{icon} {text}") +class PlatformUtils: + """跨平台工具类""" + + @staticmethod + def clear_screen(): + """清屏 - 跨平台兼容""" + # Windows + if os.name == 'nt': + os.system('cls') + # Linux/macOS + else: + os.system('clear') + + @staticmethod + def is_windows() -> bool: + """检查是否为 Windows 系统""" + return os.name == 'nt' + + @staticmethod + def is_linux() -> bool: + """检查是否为 Linux 系统""" + return sys.platform.startswith('linux') + + @staticmethod + def is_mac() -> bool: + """检查是否为 macOS 系统""" + return sys.platform == 'darwin' + + @staticmethod + def get_platform_name() -> str: + """获取平台名称""" + if PlatformUtils.is_windows(): + return "Windows" + elif PlatformUtils.is_linux(): + return "Linux" + elif PlatformUtils.is_mac(): + return "macOS" + else: + return "Unknown" + + class InputValidator: """输入验证器""" diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..3489ff2 --- /dev/null +++ b/run.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# QuickGit 启动脚本 (Linux/macOS) + +# 设置 UTF-8 编码 +export LANG=zh_CN.UTF-8 +export LC_ALL=zh_CN.UTF-8 + +# 运行程序 +python3 quickgit.py diff --git a/测试拉取 b/测试拉取 deleted file mode 100644 index 6ac02fa..0000000 --- a/测试拉取 +++ /dev/null @@ -1 +0,0 @@ -你这个傻逼 \ No newline at end of file diff --git a/跨平台说明.md b/跨平台说明.md new file mode 100644 index 0000000..75c95e0 --- /dev/null +++ b/跨平台说明.md @@ -0,0 +1,150 @@ +# 跨平台兼容性说明 + +QuickGit 现已完全支持 **Windows**、**Linux** 和 **macOS** 三大平台! + +## 快速开始 + +### Windows +```bash +# 方式1:使用启动脚本(推荐) +run.bat + +# 方式2:直接运行 +python quickgit.py +``` + +### Linux/macOS +```bash +# 首次使用:添加执行权限 +chmod +x run.sh + +# 方式1:使用启动脚本(推荐) +./run.sh + +# 方式2:直接运行 +python3 quickgit.py +``` + +## 平台特定功能 + +### 自动编码配置 +- **Windows:** `run.bat` 自动设置 UTF-8 编码 (`chcp 65001`) +- **Linux/macOS:** `run.sh` 设置 `LANG` 和 `LC_ALL` 环境变量 + +### 跨平台工具类 (PlatformUtils) + +新增 `PlatformUtils` 类提供跨平台支持: + +```python +from quickgit.utils import PlatformUtils + +# 清屏(自动适配平台) +PlatformUtils.clear_screen() + +# 平台检测 +if PlatformUtils.is_windows(): + print("Running on Windows") +elif PlatformUtils.is_linux(): + print("Running on Linux") +elif PlatformUtils.is_mac(): + print("Running on macOS") + +# 获取平台名称 +platform = PlatformUtils.get_platform_name() # "Windows", "Linux", "macOS" +``` + +## 测试清单 + +在 Linux/macOS 上测试时,请验证以下功能: + +- [ ] 启动脚本 `./run.sh` 正常运行 +- [ ] 彩色输出正确显示 +- [ ] 中文字符正常显示(UTF-8编码) +- [ ] Git 初始化功能正常 +- [ ] Git 提交推送功能正常 +- [ ] Git 拉取功能正常 +- [ ] 远程仓库管理功能正常 +- [ ] 所有 ASCII 边框对齐(60字符宽) +- [ ] 状态指示器 `[√]`, `[×]`, `[i]`, `[!]`, `[>]` 正常显示 + +## 已验证的兼容性 + +### Python 版本 +- ✅ Python 3.6+ +- ✅ Python 3.10+ (type hints: `list[str]`, `tuple[bool, str]`) + +### 操作系统 +- ✅ Windows 10/11 +- ✅ Linux (Ubuntu, Debian, Fedora, Arch, etc.) +- ✅ macOS 10.15+ + +### 终端 +- ✅ Windows Terminal +- ✅ PowerShell +- ✅ CMD (Windows 10+) +- ✅ Bash +- ✅ Zsh +- ✅ Fish + +## 注意事项 + +1. **Python 命令差异:** + - Windows: `python` + - Linux/macOS: `python3` + +2. **脚本权限:** + - Linux/macOS 首次使用需要: `chmod +x run.sh` + +3. **编码要求:** + - 终端必须支持 UTF-8 编码 + - 使用启动脚本可自动配置 + +4. **颜色支持:** + - 现代终端均支持 ANSI 颜色代码 + - Windows 10+ 原生支持 + - 旧版 Windows 可能需要启用虚拟终端 + +## 故障排查 + +### 问题:中文乱码 +**解决:** +```bash +# Linux/macOS +export LANG=zh_CN.UTF-8 +export LC_ALL=zh_CN.UTF-8 + +# Windows +chcp 65001 +``` + +### 问题:颜色不显示 +**检查:** +- 终端是否支持 ANSI 颜色 +- Windows: 使用 Windows Terminal 或 PowerShell + +### 问题:run.sh 没有执行权限 +**解决:** +```bash +chmod +x run.sh +``` + +### 问题:python3 命令不存在 +**解决:** +```bash +# 创建软链接 +sudo ln -s /usr/bin/python3 /usr/bin/python + +# 或安装 Python 3 +# Ubuntu/Debian: +sudo apt install python3 + +# Fedora: +sudo dnf install python3 + +# macOS (使用 Homebrew): +brew install python3 +``` + +## 贡献 + +如果您在特定平台上发现兼容性问题,欢迎提交 Issue 或 Pull Request!