English | 中文
一个用于管理本地软件目录并自动同步更新的工具系统,支持GitHub和GitLab云存储,支持Git加速下载。
- 本地软件管理: 扫描本地软件目录,生成文件索引和版本列表
- 云端同步: 自动推送到GitHub或GitLab,支持Git加速下载
- 多平台支持: 支持GitHub和GitLab,可灵活切换
- 智能更新: 基于文件修改时间比较,只下载变更的文件
- 自动进程管理: 更新前自动关闭相关进程,更新后自动启动指定程序
- Windows服务支持: 自动识别并启动Windows服务(如NetTime服务)
- 多程序启动: 支持同时启动多个程序(如主程序和服务程序)
- 更新顺序控制: 按照配置文件顺序更新软件,确保依赖关系
- 系统托盘: 后台运行,支持系统托盘图标和静默更新
- 跨平台: 支持Windows、Linux、macOS
- 工作流程: 提供便捷的工作流程工具,支持单个软件更新和同步
- 开箱即用: 所见即所得注册破解版本,日常保持更新版本,已杀毒
-
文本编辑器: Notepad++、notepad-、SublimeText、EditPlus、EmEditor(大文件16T)、UltraEdit
-
系统工具: CCleaner、Everything、WinMemoryCleaner、CrystalDiskInfo、NetTime
-
压缩工具: WinRAR、7-Zip、非常好用看图工具XnViewMP
-
启动管理: HiBit Startup Manager,查找重复文件 Duplicate Cleaner Pro
-
系统优化: system_good目录包含多个系统工具
- 驱动管理: 驱动人生海外版 (DriverTalent)
- 系统优化: 开始菜单StartBackAIO支持全系win、关闭补丁更新、kms激活、关闭自带杀毒
- 实用工具: Ditto剪贴板、DuplicateCleaner重复文件清理、Putty、SmartDefrag磁盘整理等
- 文件服务器: copyparty - 本地自行建站同步、Web文件服务器、开源安全、多平台支持
- DNS配置工具: 一键配置加密DNS (DoH)
Configure_AdGuard_DNS.bat- 配置 AdGuard DNS(免费,拦截广告、跟踪器、恶意网站)Configure_18bit_DNS.bat- 配置 18bit 加密DNS(拦截广告、恶意网站)Restore_Default_DNS.bat- 还原为默认DNS设置(自动获取)
-
更多软件: 可轻松扩展支持,有其他需要可以发帖
-
**下载 config.json、一键快速同步.bat 或 quick_sync.bat
-
**修改下config.json的路径,启动 bat,即可使用,自动更新所有软件到最新版本
-
**下载 config.json、test_complete_sync.py 、 test_complete_sync.bat
-
**修改下config.json的路径,启动 test_complete_sync.bat,即可使用
softgitup/
├── config.json # 配置文件
├── soft_manager.py # 本地管理工具
├── soft_sync.py # 同步工具(GUI版本)
├── simple_sync.py # 简单同步工具(命令行)
├── workflow.py # 工作流程工具
├── build_exe.py # 打包脚本
├── generate_and_push.bat # 一键生成和推送批处理
├── software/ # 本地软件目录
│ ├── CCleaner/
│ ├── EditPlus/
│ ├── everything/
│ ├── notepad++/
│ ├── SublimeText/
│ └── ...
├── logs/ # 日志目录
└── README.md # 项目说明
- Python 3.7+
- Git
- 网络连接
pip install requests PyQt5 gitpython编辑 config.json 文件:
{
"git_platform": "github",
"github_repo": "https://github.com/shellsec/softgitup",
"gitlab_repo": "https://gitlab.com/your-username/softgitup",
"manager_base_path": "./software",
"sync_base_path": "",
"sync_time": "07:00",
"auto_start": true,
"auto_kill": true,
"git_mirrors": [
"https://gh-proxy.com/https://raw.githubusercontent.com/shellsec/softgitup"
],
"process_map": {
"notepad++": ["notepad++.exe"],
"NetTime": ["NetTime.exe", "NetTimeService.exe"]
},
"start_map": {
"notepad++": "notepad++.exe",
"NetTime": ["NetTimeService.exe", "NetTime.exe"]
},
"service_map": {
"NetTimeService.exe": "NetTimeSvc"
},
"start_after_update": [
"NetTime",
"everything",
"WinMemoryCleaner"
]
}切换到 GitLab 平台:
{
"git_platform": "gitlab",
"github_repo": "https://github.com/shellsec/softgitup",
"gitlab_repo": "https://gitlab.com/your-username/softgitup",
"manager_base_path": "./software",
"sync_base_path": "",
"sync_time": "07:00",
"auto_start": true,
"auto_kill": true,
"git_mirrors": [
"https://gitlab.com/your-username/softgitup/-/raw/master"
],
"process_map": {
"notepad++": ["notepad++.exe"],
"NetTime": ["NetTime.exe", "NetTimeService.exe"]
},
"start_map": {
"notepad++": "notepad++.exe",
"NetTime": ["NetTimeService.exe", "NetTime.exe"]
},
"service_map": {
"NetTimeService.exe": "NetTimeSvc"
},
"start_after_update": [
"NetTime",
"everything",
"WinMemoryCleaner"
]
}配置说明:
git_platform: 平台类型,可选"github"或"gitlab",默认为"github"github_repo: GitHub 仓库地址(GitHub 平台使用)gitlab_repo: GitLab 仓库地址(GitLab 平台使用)git_mirrors: 镜像源列表,支持多个镜像源作为备用
# 启动工作流程工具
python workflow.py# 扫描本地软件并推送到GitHub
python soft_manager.py
# 或使用批处理一键操作
generate_and_push.bat# 同步单个软件
python simple_sync.py everything
# 同步所有软件
python simple_sync.py
# 启动GUI同步工具(系统托盘)
python soft_sync.py使用 build_exe.py 脚本将Python程序打包成可执行文件:
python build_exe.py打包脚本提供多种选项:
- 构建所有程序 (推荐) - 包含GUI和控制台版本
- 只构建控制台版本 - 无GUI依赖,避免PyQt5 DLL问题
- 只构建GUI版本 - 包含完整的GUI功能
- 清理构建文件 - 清理临时文件
如果遇到 ImportError: DLL load failed while importing QtWidgets 错误:
方案1: 使用控制台版本
# 选择选项2,构建控制台版本
python build_exe.py
# 使用生成的 SoftGitUp_Sync_Simple.exe方案2: 使用Python脚本
# 直接运行Python脚本,避免打包问题
python simple_sync.py
python workflow.py方案3: 安装Visual C++ Redistributable
- 下载并安装Microsoft Visual C++ Redistributable
- 重新编译GUI版本
SoftGitUp_Workflow.exe- 工作流程工具(控制台)SoftGitUp_Manager.exe- 管理工具(GUI)SoftGitUp_Sync.exe- 同步工具(GUI,系统托盘)SoftGitUp_Sync_Simple.exe- 简化同步工具(控制台)
- 更新软件文件: 将新版本的软件放入
software/目录 - 生成列表: 运行
python soft_manager.py或使用批处理 - 推送到GitHub: 自动提交并推送更新
- 同步到其他设备: 在其他设备上运行同步工具
python workflow.py选择相应的操作:
- 更新单个软件并生成列表
- 同步单个软件
- 同步所有软件
- 生成完整软件列表
| 配置项 | 说明 | 默认值 |
|---|---|---|
github_repo |
GitHub仓库地址 | - |
manager_base_path |
管理工具扫描目录 | ./software |
sync_base_path |
同步工具下载目录(为空则使用项目根目录) | ""(空字符串) |
sync_time |
自动同步时间 | 07:00 |
git_mirrors |
Git镜像源列表 | - |
download_timeout |
下载超时时间(秒) | 30 |
retry_times |
重试次数 | 3 |
retry_delay |
重试延迟(秒) | 5 |
log_level |
日志级别 | INFO |
check_interval |
检查间隔(秒) | 3600 |
| 配置项 | 说明 | 默认值 |
|---|---|---|
auto_kill |
更新前自动关闭相关进程 | true |
auto_start |
更新后自动启动程序 | true |
process_map |
进程映射表,定义每个软件对应的进程名 | {} |
start_map |
启动路径映射表,定义每个软件的启动路径(支持数组) | {} |
service_map |
服务映射表,定义服务程序对应的Windows服务名 | {} |
start_after_update |
更新后需要自动启动的程序列表 | [] |
software_dirs |
软件目录映射,控制更新顺序 | {} |
process_map 用于定义更新时需要关闭的进程,支持多个进程:
{
"process_map": {
"notepad++": ["notepad++.exe"],
"NetTime": ["NetTime.exe", "NetTimeService.exe"],
"UltraEdit": ["uedit64.exe", "uedit32.exe"],
"system_good": ["putty.exe", "SmartDefrag-Pro.exe", "Ditto.exe"]
}
}start_map 支持单个程序或多个程序启动:
-
单个程序(字符串):
{ "start_map": { "notepad++": "notepad++.exe" } } -
多个程序(数组):按顺序启动
{ "start_map": { "NetTime": ["NetTimeService.exe", "NetTime.exe"] } } -
路径格式:
- 相对路径(推荐):相对于软件目录
"NetTime": "NetTime.exe" // D:\Program Files\NetTime\NetTime.exe "NetTime": "bin/NetTime.exe" // D:\Program Files\NetTime\bin\NetTime.exe
- 绝对路径:完整路径
"some_app": "C:/OtherPath/app.exe" // 完整绝对路径
- 相对路径(推荐):相对于软件目录
service_map 用于将服务程序映射到Windows服务名,系统会自动使用 net start 启动服务:
{
"service_map": {
"NetTimeService.exe": "NetTimeSvc",
"Everything.exe": "Everything" // 如果Everything安装为服务
}
}工作原理:
- 如果程序在
service_map中,系统会使用net start [服务名]启动服务 - 如果程序不在
service_map中,系统会直接运行程序文件 - 支持服务已在运行的情况检测
start_after_update 定义更新完成后需要自动启动的程序:
{
"start_after_update": [
"NetTime",
"everything",
"WinMemoryCleaner",
"notepad++"
]
}注意:
- 如果
start_after_update为空数组[],则所有软件更新后都会自动启动(当auto_start: true时) - 如果
start_after_update有值,则只有列表中的软件会在更新后自动启动
软件更新顺序由 config.json 中 software_dirs 的顺序决定:
{
"software_dirs": {
"WinMemoryCleaner": "WinMemoryCleaner", // 第一个更新
"NetTime": "NetTime", // 第二个更新
"system_good": "system_good" // 最后更新
}
}工作原理:
- 系统按照
software_dirs中配置的顺序依次更新软件 - 如果远程列表中有但
software_dirs中未配置的软件,会在最后按远程列表顺序更新 - 可以通过调整
software_dirs的顺序来控制更新优先级
sync_base_path 支持两种配置方式:
-
自动使用项目根目录(推荐):
"sync_base_path": ""
- 当配置为空字符串时,软件会下载到项目根目录
- 例如:
E:\GITHUB\softgitup\NetTime\、E:\GITHUB\softgitup\everything\ - 优点:无需管理员权限,便于管理,便于备份和迁移
-
指定自定义路径:
"sync_base_path": "D:/Program Files"
- 软件会下载到指定的目录
- 例如:
D:\Program Files\NetTime\、D:\Program Files\everything\ - 注意:如果目录不存在,系统会自动创建
使用 gh-proxy.com 作为Git加速下载源:
"git_mirrors": [
"https://gh-proxy.com/https://raw.githubusercontent.com/shellsec/softgitup"
]- 企业级部署: 支持私有化部署,适合内网环境
- 国内访问: GitLab.com 或自建实例,访问更稳定
- 功能丰富: 内置 CI/CD、项目管理等企业级功能
- 数据安全: 可完全控制数据存储位置
- 登录 GitLab(GitLab.com 或自建实例)
- 创建新项目(Project)
- 将代码推送到 GitLab 仓库
git remote add gitlab https://gitlab.com/your-username/softgitup.git
git push gitlab master修改 config.json 文件:
{
"git_platform": "gitlab",
"gitlab_repo": "https://gitlab.com/your-username/softgitup",
"git_mirrors": [
"https://gitlab.com/your-username/softgitup/-/raw/master"
]
}重要配置项:
git_platform: 设置为"gitlab"gitlab_repo: 填写你的 GitLab 仓库地址git_mirrors: GitLab 的 Raw 文件 URL 格式为https://gitlab.com/user/repo/-/raw/branch
运行同步测试:
python test_complete_sync.py或使用批处理文件:
一键快速同步.bat如果需要切换回 GitHub,只需修改 git_platform:
{
"git_platform": "github",
"github_repo": "https://github.com/shellsec/softgitup",
"git_mirrors": [
"https://gh-proxy.com/https://raw.githubusercontent.com/shellsec/softgitup"
]
}如果你有自建 GitLab 实例:
- 配置仓库地址:
{
"git_platform": "gitlab",
"gitlab_repo": "https://your-gitlab-instance.com/your-username/softgitup",
"git_mirrors": [
"https://your-gitlab-instance.com/your-username/softgitup/-/raw/master"
]
}-
私有仓库访问:
- 如果仓库是私有的,需要在 GitLab 中创建 Personal Access Token
- 在 URL 中包含 token:
https://oauth2:YOUR_TOKEN@your-gitlab-instance.com/user/repo/-/raw/master
-
分支配置:
- GitLab 默认分支可能是
master或main - 确保
git_mirrors中的分支名与实际分支名一致
- GitLab 默认分支可能是
Q: GitLab 和 GitHub 可以同时使用吗?
A: 可以,在 git_mirrors 中同时配置两个平台的镜像源,系统会按顺序尝试。
Q: 如何知道当前使用的是哪个平台? A: 查看日志文件,会显示使用的镜像源 URL。
Q: GitLab 私有仓库如何配置? A: 在 URL 中包含访问令牌,或使用 GitLab 的 Deploy Token。
- 在多台设备间同步常用软件
- 自动更新软件到最新版本
- 备份软件配置和设置
- 统一管理员工常用软件
- 批量部署和更新软件
- 软件版本控制和回滚
- 管理开发环境工具
- 快速搭建开发环境
- 工具链版本管理
系统支持在更新前自动关闭相关进程,更新后自动启动程序:
-
更新前关闭进程:
- 当
auto_kill: true时,系统会在下载文件前自动关闭process_map中定义的进程 - 支持关闭多个进程(如 NetTime 的主程序和服务程序)
- 使用 Windows
taskkill命令强制关闭进程
- 当
-
更新后启动程序:
- 当
auto_start: true时,系统会在文件更新完成后自动启动程序 - 根据
start_after_update列表决定启动哪些程序 - 支持单个程序或多个程序启动(数组配置)
- 支持相对路径和绝对路径配置
- 自动识别Windows服务并使用
net start启动
- 当
-
Windows服务支持:
- 自动检测程序是否在
service_map中 - 如果是服务,使用
net start [服务名]启动 - 如果是普通程序,直接运行可执行文件
- 支持服务已在运行的情况检测
- 自动检测程序是否在
-
更新顺序控制:
- 按照
config.json中software_dirs的顺序更新 - 确保依赖关系正确的软件按正确顺序更新
- 按照
-
工作流程:
开始同步 → 按 software_dirs 顺序 → 检查 auto_kill → 关闭相关进程 → 下载更新文件 → 检查 auto_start → 检查 start_after_update → 检查 service_map → 启动服务或程序
# 只更新特定软件
python -c "from soft_manager import SoftManager; SoftManager().generate_list_file('everything')"- 支持自定义同步时间
- 后台静默更新
- 系统托盘通知
- 自动进程管理
- 详细的同步日志
- 错误追踪和调试
- 可配置日志级别
- 进程关闭和启动日志记录
Q: 编译后运行报错 "DLL load failed while importing QtWidgets"? A: 这是PyQt5 DLL依赖问题,建议:
- 使用控制台版本:
python build_exe.py选择选项2 - 直接运行Python脚本:
python simple_sync.py - 安装Visual C++ Redistributable后重新编译
Q: 同步失败怎么办? A: 检查网络连接和GitHub仓库权限,确保使用正确的Git加速源。
Q: 文件修改时间不匹配? A: 这通常是因为文件内容发生了变化,系统会自动下载最新版本。
Q: 如何添加新的软件? A: 将软件放入software目录,在config.json中添加软件名称,然后运行管理工具。
Q: 如何配置自动关闭进程和启动程序? A: 在config.json中配置:
- 设置
auto_kill: true和auto_start: true - 在
process_map中添加软件对应的进程名 - 在
start_map中添加软件的启动路径(支持相对路径和绝对路径) - 在
start_after_update中添加需要自动启动的程序名称
Q: 启动路径如何配置? A: 支持两种方式:
- 相对路径:
"NetTime": "NetTime.exe"或"NetTime": "bin/NetTime.exe" - 绝对路径:
"some_app": "C:/Path/app.exe"
Q: system_good 包含多个程序,如何配置?
A: 在 process_map 的 system_good 数组中添加所有需要关闭的进程名:
"system_good": ["putty.exe", "SmartDefrag-Pro.exe", "Ditto.exe", ...]Q: 如何启动多个程序?
A: 在 start_map 中使用数组配置:
"NetTime": ["NetTimeService.exe", "NetTime.exe"]系统会按数组顺序依次启动程序。
Q: 如何配置Windows服务?
A: 在 service_map 中配置服务程序到服务名的映射:
"service_map": {
"NetTimeService.exe": "NetTimeSvc"
}系统会自动使用 net start 命令启动服务。
Q: 如何控制软件更新顺序?
A: 调整 config.json 中 software_dirs 的顺序即可。系统会按照配置的顺序依次更新软件。
Q: 服务启动失败怎么办? A: 确保服务已安装。可以通过以下方式安装服务:
- 使用软件提供的安装脚本(如 NetTime 的
ChangeNetTimePath.bat) - 或手动使用
sc create命令安装服务
Q: DNS 配置脚本如何使用? A: system_good 目录下提供了三个 DNS 配置脚本:
Configure_18bit_DNS.bat- 配置 18bit 加密 DNS(拦截广告、恶意网站)Configure_AdGuard_DNS.bat- 配置 AdGuard DNS(免费,拦截广告、跟踪器)Restore_Default_DNS.bat- 还原为默认 DNS 设置 使用方法:右键点击脚本,选择"以管理员身份运行"。配置完成后,可在系统设置中验证 DNS 是否显示"已加密"。
Q: DNS 配置后 DoH 未生效怎么办? A: 如果配置后 DoH 未生效,可以尝试:
- 重启网络适配器(禁用后重新启用)
- 在系统设置中手动启用 DoH:
- 设置 → 网络和 Internet → 以太网(或 WLAN)→ 硬件属性 → DNS 服务器分配
- 将"首选 DNS 加密"和"备用 DNS 加密"设置为"开(手动模板)"
- 重启计算机
- 某些 Windows 11 版本可能需要通过系统设置手动配置 DoH
# 查看管理工具日志
tail -f logs/manager.log
# 查看同步工具日志
tail -f logs/sync.log
# 查看简单同步日志
tail -f logs/simple_sync.log如果遇到问题,请:
- 查看日志文件获取详细错误信息
- 检查网络连接和GitHub仓库权限
- 尝试使用控制台版本避免GUI依赖问题
- 提交Issue到GitHub仓库
- 支持更多云存储平台(Gitee、GitLab等)
- 添加软件版本管理功能
- 支持增量更新和压缩传输
- 添加Web管理界面
- 支持插件系统
欢迎提交Issue和Pull Request!
- Fork项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建Pull Request
MIT License
注意: 请确保遵守相关软件的使用许可协议,本工具仅用于个人学习和合法用途。