Compare commits
2 Commits
e20c435e43
...
d9485e3c67
| Author | SHA1 | Date | |
|---|---|---|---|
| d9485e3c67 | |||
| 19a94c45bb |
334
AGENTS.md
Normal file
334
AGENTS.md
Normal file
@@ -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
|
||||||
48
README.md
48
README.md
@@ -11,6 +11,7 @@
|
|||||||
- **状态查看** - 快速查看仓库状态和提交历史
|
- **状态查看** - 快速查看仓库状态和提交历史
|
||||||
- **彩色界面** - 友好的彩色控制台输出
|
- **彩色界面** - 友好的彩色控制台输出
|
||||||
- **模块化设计** - 易于维护和扩展
|
- **模块化设计** - 易于维护和扩展
|
||||||
|
- **跨平台支持** - 完美兼容 Windows、Linux、macOS
|
||||||
|
|
||||||
## 项目结构
|
## 项目结构
|
||||||
|
|
||||||
@@ -19,11 +20,13 @@ QuickGit/
|
|||||||
├── quickgit/ # 核心模块
|
├── quickgit/ # 核心模块
|
||||||
│ ├── __init__.py # 包初始化
|
│ ├── __init__.py # 包初始化
|
||||||
│ ├── config.py # 配置模块
|
│ ├── config.py # 配置模块
|
||||||
│ ├── utils.py # 工具类(命令执行、输出格式化、输入验证)
|
│ ├── utils.py # 工具类(命令执行、输出格式化、输入验证、平台工具)
|
||||||
│ ├── git_operations.py # Git操作模块
|
│ ├── git_operations.py # Git操作模块
|
||||||
│ ├── remote_manager.py # 远程仓库管理模块
|
│ ├── remote_manager.py # 远程仓库管理模块
|
||||||
│ └── ui.py # UI交互模块
|
│ └── ui.py # UI交互模块
|
||||||
├── quickgit.py # 主程序入口
|
├── quickgit.py # 主程序入口
|
||||||
|
├── run.bat # Windows启动脚本
|
||||||
|
├── run.sh # Linux/macOS启动脚本
|
||||||
├── mengya_git_manager.py # 旧版单文件脚本(兼容保留)
|
├── mengya_git_manager.py # 旧版单文件脚本(兼容保留)
|
||||||
└── README.md # 项目文档
|
└── README.md # 项目文档
|
||||||
```
|
```
|
||||||
@@ -32,8 +35,30 @@ QuickGit/
|
|||||||
|
|
||||||
### 运行脚本
|
### 运行脚本
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
```bash
|
```bash
|
||||||
# 使用新版模块化脚本(推荐)
|
# 使用启动脚本(自动设置UTF-8编码)
|
||||||
|
run.bat
|
||||||
|
|
||||||
|
# 或直接运行
|
||||||
|
python quickgit.py
|
||||||
|
```
|
||||||
|
|
||||||
|
**Linux/macOS:**
|
||||||
|
```bash
|
||||||
|
# 首次使用需要添加执行权限
|
||||||
|
chmod +x run.sh
|
||||||
|
|
||||||
|
# 使用启动脚本(推荐)
|
||||||
|
./run.sh
|
||||||
|
|
||||||
|
# 或直接运行
|
||||||
|
python3 quickgit.py
|
||||||
|
```
|
||||||
|
|
||||||
|
**通用方式:**
|
||||||
|
```bash
|
||||||
|
# 新版模块化脚本(推荐)
|
||||||
python quickgit.py
|
python quickgit.py
|
||||||
|
|
||||||
# 或使用旧版单文件脚本
|
# 或使用旧版单文件脚本
|
||||||
@@ -97,9 +122,21 @@ python mengya_git_manager.py
|
|||||||
|
|
||||||
## 系统要求
|
## 系统要求
|
||||||
|
|
||||||
- Python 3.6+
|
- **Python:** 3.6+ (Linux/macOS 使用 python3)
|
||||||
- Git 已安装并配置
|
- **Git:** 已安装并配置
|
||||||
- SSH密钥已配置(用于远程仓库推送)
|
- **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`: 命令执行器
|
- `CommandExecutor`: 命令执行器
|
||||||
- `OutputFormatter`: 输出格式化器
|
- `OutputFormatter`: 输出格式化器
|
||||||
- `InputValidator`: 输入验证器
|
- `InputValidator`: 输入验证器
|
||||||
|
- `PlatformUtils`: 跨平台工具(清屏、平台检测)
|
||||||
|
|
||||||
### git_operations.py - Git操作模块
|
### git_operations.py - Git操作模块
|
||||||
提供Git基本操作功能:
|
提供Git基本操作功能:
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
工具类模块 - 提供命令执行、输出格式化等工具函数
|
工具类模块 - 提供命令执行、输出格式化等工具函数
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
class Colors:
|
class Colors:
|
||||||
@@ -160,6 +162,47 @@ class OutputFormatter:
|
|||||||
print(f"{icon} {text}")
|
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:
|
class InputValidator:
|
||||||
"""输入验证器"""
|
"""输入验证器"""
|
||||||
|
|
||||||
|
|||||||
9
run.sh
Normal file
9
run.sh
Normal file
@@ -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
|
||||||
150
跨平台说明.md
Normal file
150
跨平台说明.md
Normal file
@@ -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!
|
||||||
Reference in New Issue
Block a user