Skip to content

MH-14/git-sync-cli

Repository files navigation

@git-tools/sync-cli

专业的 Git 分支同步工具,支持上游仓库同步、多分支管理和智能合并策略。

✨ 特性

  • 🔄 智能同步: 自动检测并同步上游、origin 和本地分支
  • 🌿 多分支支持: 支持 dev、test、main 等多分支工作流
  • 🛡️ 安全检查: 预检测冲突,避免意外的合并问题
  • 🎯 交互式操作: 友好的用户界面和确认提示
  • 📊 详细状态: 完整的 Git 状态报告和同步建议
  • 高性能: 优化的 Git 操作,减少不必要的网络请求

📦 安装

全局安装

npm install -g @git-tools/sync-cli

项目依赖

npm install --save-dev @git-tools/sync-cli

🚀 使用方法

基本命令

# 同步 dev 分支(默认)
git-sync sync

# 同步指定分支
git-sync sync --branch=main

# 仅检查状态,不执行同步
git-sync sync --check-only

# 强制同步(跳过某些安全检查)
git-sync sync --force

# 自动暂存工作区更改
git-sync sync --stash

状态检查

# 显示详细 Git 状态
git-sync status

# 简短状态输出
git-sync status --short

# JSON 格式输出
git-sync status --json

初始化配置

# 交互式配置向导
git-sync setup

# 直接配置上游仓库
git-sync setup --upstream=https://github.com/original/repo.git

配置管理

# 显示所有配置
git-sync config --list

# 获取配置值
git-sync config --get user.name

# 设置配置值
git-sync config --set user.name "Your Name"

清理操作

# 清理已合并的分支
git-sync clean --branches

# 清理 Git 缓存
git-sync clean --cache

# 预览清理操作
git-sync clean --dry-run
### sync 命令参数

- `-b, --branch <branch>`: 目标分支 (默认: dev)
- `-c, --check-only`: 仅检查状态,不执行同步
- `-f, --force`: 强制执行,跳过某些检查
- `-s, --stash`: 自动暂存未提交的更改
- `--no-fetch`: 跳过 fetch 操作
- `--no-push`: 跳过 push 操作
- `--dry-run`: 模拟执行,显示将要执行的操作

### status 命令参数

- `-s, --short`: 简短输出
- `--json`: 以 JSON 格式输出

### setup 命令参数

- `--upstream <url>`: 上游仓库 URL
- `--interactive`: 交互式配置 (默认)
- `--reset`: 重置现有配置

## 🔧 在项目中使用

### package.json 脚本

```json
{
  "scripts": {
    "sync": "git-sync sync",
    "sync:dev": "git-sync sync --branch=dev",
    "sync:test": "git-sync sync --branch=test",
    "sync:check": "git-sync sync --check-only",
    "git:status": "git-sync status",
    "git:setup": "git-sync setup"
  }
}
```

编程方式使用

import { GitSyncCLI } from "@git-tools/sync-cli";

const syncTool = new GitSyncCLI({
  branch: "dev",
  force: false,
  verbose: true,
});

// 执行同步
await syncTool.sync();

// 检查状态
await syncTool.status();

// 初始化配置
await syncTool.setup();

🌊 工作流程

标准同步流程

  1. 环境检查: 验证 Git 仓库、工作区状态
  2. 获取更新: 从所有远程仓库获取最新更新
  3. 上游同步: 合并上游仓库的更新
  4. 分支同步: 同步当前分支与远程分支
  5. 多分支处理: 根据需要同步其他相关分支
  6. 推送更新: 将合并后的更改推送到远程

分支策略

  • dev 分支: 开发主分支,从上游同步,合并到 test
  • test 分支: 测试分支,从 dev 合并更新
  • main/master 分支: 生产分支,通常受保护

🛡️ 安全特性

预检查验证

  • Git 仓库完整性检查
  • 工作区状态验证
  • 分支存在性确认
  • 远程仓库连通性测试

冲突检测

  • 合并前冲突预测
  • 冲突文件详细报告
  • 安全合并策略选择

回滚机制

  • 自动暂存工作区更改
  • 合并失败时自动回滚
  • 操作历史记录

📊 状态报告

详细状态信息

git-sync status

输出包含:

  • Git 环境信息
  • 仓库基本信息
  • 工作区状态
  • 分支同步状态
  • 远程仓库配置
  • 同步建议

JSON 格式输出

git-sync status --json

适用于自动化脚本和 CI/CD 集成。

🔄 CI/CD 集成

GitHub Actions

name: Sync Branches
on:
  schedule:
    - cron: "0 9 * * 1-5" # 工作日每天 9:00
  workflow_dispatch:

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "18"

      - name: Install git-sync-cli
        run: npm install -g @git-tools/sync-cli

      - name: Configure Git
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "actions@github.com"

      - name: Sync branches
        run: git-sync sync --force --branch=dev

GitLab CI

sync-branches:
  stage: sync
  script:
    - npm install -g @git-tools/sync-cli
    - git config --global user.name "GitLab CI"
    - git config --global user.email "ci@example.com"
    - git-sync setup --upstream=$UPSTREAM_REPO --non-interactive
    - git-sync sync --force
  only:
    - schedules

⚙️ 配置

全局配置

工具会读取标准的 Git 配置:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.editor "code --wait"

项目配置

在项目根目录创建 .git-sync.config.js

export default {
  defaultBranch: "main",
  protectedBranches: ["main", "master", "production"],
  syncStrategy: "merge", // merge, rebase, squash
  autoCleanup: true,
  hooks: {
    beforeSync: async (context) => {
      console.log("开始同步...");
    },
    afterSync: async (context) => {
      console.log("同步完成!");
    },
  },
};

🐛 故障排除

常见问题

问题: fatal: not a git repository 解决: 确保在 Git 仓库目录中执行命令

问题: error: Your local changes would be overwritten 解决: 使用 --stash 参数或手动提交/暂存更改

问题: fatal: 'upstream' does not appear to be a git repository 解决: 运行 git-sync setup 配置上游仓库

调试模式

# 开启调试输出
git-sync sync --debug

# 使用环境变量
DEBUG=git-sync:* git-sync sync

日志级别

# 详细输出
git-sync sync --verbose

# 静默模式
git-sync sync --quiet

🤝 贡献

欢迎贡献代码!请查看 贡献指南

开发环境

# 克隆项目
git clone https://github.com/your-org/git-sync-cli.git
cd git-sync-cli

# 安装依赖
npm install

# 运行测试
npm test

# 构建项目
npm run build

# 本地开发
npm run dev

📄 许可证

MIT License. 查看 LICENSE 文件了解详情。

🔗 相关链接

📈 版本历史

查看 CHANGELOG.md 了解详细的版本更新信息。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors