<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post/686/</link>
<title><![CDATA[Git不同服务器配置不同身份]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Thu, 21 May 2026 01:48:34 +0000</pubDate> 
<guid>https://www.heckjj.com/post/686/</guid> 
<description>
<![CDATA[ 
	# 你的默认全局账号<br/>[user]<br/>&nbsp;&nbsp;name = heck<br/>&nbsp;&nbsp;email = i@heckjj.com<br/><br/># ======================<br/># 自动切换 heckjj 账号<br/># ======================<br/>[includeIf &quot;hasconfig:remote.*.url:https://git.tencent.com/**&quot;]<br/>&nbsp;&nbsp;path = .gitconfig-tencent<br/><br/>最后一步：必须新建这个文件<br/>打开文件夹：C:&#92;Users&#92;你的用户名&#92;<br/>新建一个文件，名字叫：<br/>.gitconfig-tencent<br/>内容只有这两行：<br/>[user]<br/>&nbsp;&nbsp;name = heck<br/>&nbsp;&nbsp;email = heck@tencent.com<br/><br/>这样就自动生效了<br/>所有 git.tencent.com 仓库 → 自动用 heck<br/>其他所有仓库 → 用你的默认账号 heck<br/>不用手动切换，不用每个仓库单独设置<br/>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/685/</link>
<title><![CDATA[Conventional Commits 常见规范]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Mon, 18 May 2026 08:53:34 +0000</pubDate> 
<guid>https://www.heckjj.com/post/685/</guid> 
<description>
<![CDATA[ 
	`git feat` 是指在 Git 提交（commit）信息中使用 `feat` 作为前缀，它是英文 “feature”（新功能）的缩写，用于标识本次提交新增了一个功能或特性。<br/><br/>这一用法源于 [Conventional Commits（约定式提交）](https://www.conventionalcommits.org/) 规范，该规范通过标准化提交信息格式，提升团队协作效率，并便于自动生成变更日志（changelog）和版本号管理。<br/><br/>---<br/><br/>常见提交类型前缀含义<br/><br/>- `feat`：新增功能（feature）&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`feat: 添加用户登录功能`<br/>- `fix`：修复 bug&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`fix: 修复登录超时问题`<br/>- `docs`：仅修改文档&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`docs: 更新 README 使用说明`<br/>- `style`：代码样式调整（不影响运行）&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`style: 格式化代码缩进`<br/>- `refactor`：代码重构（非新增功能、非修复 bug）&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`refactor: 提取用户验证逻辑为独立函数`<br/>- `chore`：构建过程或工具依赖更新&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`chore: 更新 npm 依赖包`<br/>- `test`：增加或修改测试&nbsp;&nbsp;<br/>&nbsp;&nbsp;示例：`test: 添加登录接口单元测试`<br/><br/>---<br/><br/>提交信息结构（Conventional Commits）<br/><br/>标准格式为：<br/><br/>```<br/><type>(<scope>): <subject><br/>[body]<br/>[footer]<br/>```<br/><br/>- `type`：必须，如 `feat`、`fix` 等&nbsp;&nbsp;<br/>- `scope`：可选，限定影响范围，如 `(auth)`、`(api)`&nbsp;&nbsp;<br/>- `subject`：简短描述（≤50 字符）&nbsp;&nbsp;<br/>- `body` / `footer`：可选，详细说明或关联 issue<br/><br/>示例完整写法：<br/><br/>```bash<br/>feat(auth): 添加 Google OAuth 登录支持<br/><br/>- 允许用户通过 Google 账号一键登录<br/>- 集成 OAuth2.0 流程<br/>- 关联 JIRA-123<br/>```<br/><br/>---<br/><br/>实践意义<br/><br/>- ✅ 提高可读性：团队成员快速理解提交目的&nbsp;&nbsp;<br/>- ✅ 支持自动化：工具（如 `semantic-release`）可依据 `feat` 自动升级版本号&nbsp;&nbsp;<br/>- ✅ 便于生成 changelog：按类型分类生成发布说明&nbsp;&nbsp;<br/><br/>更多规范细节可参考：[Conventional Commits 官方规范](https://www.conventionalcommits.org/)
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/684/</link>
<title><![CDATA[团队 Git 使用规范]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Mon, 18 May 2026 08:29:14 +0000</pubDate> 
<guid>https://www.heckjj.com/post/684/</guid> 
<description>
<![CDATA[ 
	本文档定义了团队使用 Git 的标准流程和规范，所有团队成员必须遵循。<br/><br/>版本：v1.0.0<br/>最后更新：2026年<br/>适用范围：所有项目 <br/><br/>目录<br/>分支管理规范<br/>提交信息规范<br/>工作流程规范<br/>代码审查规范<br/>命名规范<br/>安全规范<br/>工具与配置<br/>常见场景处理<br/>1. 分支管理规范<br/>1.1 分支类型<br/>主分支（Main Branches）<br/>main / master<br/><br/>用途：生产环境代码<br/>保护：✅ 必须通过 Pull Request 合并<br/>禁止：❌ 禁止直接推送，禁止强制推送<br/>develop<br/><br/>用途：开发环境代码，日常开发集成<br/>保护：✅ 必须通过 Pull Request 合并<br/>禁止：❌ 禁止直接推送<br/>辅助分支（Supporting Branches）<br/>feature/* - 功能开发分支<br/><br/>命名：feature/功能名称，如 feature/user-login<br/>来源：从 develop 创建<br/>目标：合并回 develop<br/>生命周期：功能完成后删除<br/>fix/* - Bug 修复分支<br/><br/>命名：fix/问题描述，如 fix/login-button-bug<br/>来源：从 develop 创建<br/>目标：合并回 develop<br/>生命周期：修复完成后删除<br/>hotfix/* - 紧急修复分支<br/><br/>命名：hotfix/紧急修复描述，如 hotfix/security-patch<br/>来源：从 main 创建<br/>目标：合并回 main 和 develop<br/>生命周期：修复完成后删除<br/>release/* - 发布准备分支<br/><br/>命名：release/版本号，如 release/1.0.0<br/>来源：从 develop 创建<br/>目标：合并回 main 和 develop<br/>生命周期：发布完成后删除<br/>1.2 分支命名规则<br/>✅ 允许的命名：<br/><br/>使用小写字母<br/>使用连字符 - 分隔单词<br/>简洁但描述性<br/>示例：feature/user-authentication、fix/payment-error<br/>❌ 禁止的命名：<br/><br/>使用大写字母<br/>使用下划线或空格<br/>使用个人名称<br/>使用特殊字符<br/>示例：Feature/Login、fix_bug、zhangsan-feature<br/>1.3 分支保护规则<br/>main 分支保护<br/>✅ 必须通过 Pull Request 合并<br/>✅ 至少 1 位团队成员审查通过<br/>✅ 必须通过所有 CI/CD 检查<br/>✅ 禁止直接推送<br/>✅ 禁止强制推送<br/>✅ 禁止删除分支<br/>develop 分支保护<br/>✅ 必须通过 Pull Request 合并<br/>✅ 至少 1 位团队成员审查通过<br/>✅ 必须通过所有 CI/CD 检查<br/>✅ 禁止直接推送<br/>✅ 禁止强制推送<br/>2. 提交信息规范<br/>2.1 提交信息格式<br/>&lt;类型&gt;(&lt;范围&gt;): &lt;简短描述&gt;<br/><br/>&lt;详细描述（可选）&gt;<br/><br/>&lt;相关 Issue（可选）&gt;<br/><br/>2.2 类型（Type）<br/>类型&nbsp;&nbsp;说明&nbsp;&nbsp;示例<br/>feat&nbsp;&nbsp;新功能&nbsp;&nbsp;feat(用户): 添加用户登录功能<br/>fix&nbsp;&nbsp;修复 Bug&nbsp;&nbsp;fix(登录): 修复登录按钮点击无效的问题<br/>docs&nbsp;&nbsp;文档更新&nbsp;&nbsp;docs: 更新 API 文档<br/>style&nbsp;&nbsp;代码格式调整&nbsp;&nbsp;style: 修复代码缩进问题<br/>refactor&nbsp;&nbsp;代码重构&nbsp;&nbsp;refactor(服务): 重构用户服务层<br/>perf&nbsp;&nbsp;性能优化&nbsp;&nbsp;perf(数据库): 优化查询性能<br/>test&nbsp;&nbsp;测试相关&nbsp;&nbsp;test: 添加登录功能单元测试<br/>chore&nbsp;&nbsp;构建/工具相关&nbsp;&nbsp;chore: 更新依赖包版本<br/>ci&nbsp;&nbsp;CI/CD 配置&nbsp;&nbsp;ci: 添加自动化测试流程<br/>2.3 范围（Scope）<br/>范围是可选的，用于标识提交影响的部分：<br/><br/>模块名：feat(用户): ...<br/>文件名：fix(api.js): ...<br/>组件名：feat(登录): ...<br/>2.4 提交信息示例<br/>✅ 好的提交信息：<br/><br/>feat(用户): 添加用户注册功能<br/><br/>实现了用户注册的完整流程：<br/>- 添加注册表单验证<br/>- 实现邮箱验证功能<br/>- 添加密码加密存储<br/><br/>Closes #123<br/>fix(支付): 修复支付接口超时问题<br/><br/>修复了支付接口在高峰期超时的问题，增加重试机制。<br/><br/>Fixes #456<br/>❌ 不好的提交信息：<br/><br/>更新代码<br/>修复bug<br/>提交<br/>WIP<br/><br/>2.5 提交频率<br/>✅ 推荐：小步提交，完成一个小功能就提交<br/>✅ 推荐：每个提交解决一个问题<br/>❌ 禁止：大量不相关的更改放在一个提交中<br/>❌ 禁止：提交无法编译或测试失败的代码<br/>3. 工作流程规范<br/>3.1 日常开发流程<br/>开始新功能<br/># 1. 确保 develop 分支是最新的<br/>git checkout develop<br/>git pull origin develop<br/><br/># 2. 创建功能分支<br/>git checkout -b feature/user-login<br/><br/># 3. 开始开发<br/># ... 编写代码 ...<br/>开发过程<br/># 1. 查看修改状态<br/>git status<br/><br/># 2. 添加修改到暂存区<br/>git add .<br/><br/># 3. 提交更改<br/>git commit -m &quot;feat(用户): 实现登录功能&quot;<br/><br/># 4. 定期推送到远程<br/>git push origin feature/user-login<br/>完成功能<br/># 1. 确保代码通过测试<br/>npm test<br/><br/># 2. 确保代码符合规范<br/>npm run lint<br/><br/># 3. 推送到远程<br/>git push origin feature/user-login<br/><br/># 4. 在平台创建 Pull Request<br/><br/>3.2 Pull Request 流程<br/>创建 Pull Request<br/>填写信息：<br/><br/>清晰的标题<br/>详细的描述<br/>关联相关 Issue<br/>添加截图（如适用）<br/>检查清单：<br/><br/> 代码已通过测试<br/> 已更新相关文档<br/> 已遵循代码规范<br/> 无控制台错误<br/> 已关联相关 Issue<br/>请求审查：<br/><br/>指定至少 1 位审查者<br/>添加相关标签<br/>Pull Request 模板<br/>## ???? 变更描述<br/>简要描述本次 PR 的变更内容<br/><br/>## ???? 变更类型<br/>- [ ] 新功能 (feat)<br/>- [ ] Bug 修复 (fix)<br/>- [ ] 文档更新 (docs)<br/>- [ ] 代码重构 (refactor)<br/>- [ ] 性能优化 (perf)<br/>- [ ] 测试相关 (test)<br/>- [ ] 其他 (chore)<br/><br/>## ???? 测试说明<br/>描述如何测试这些变更<br/><br/>## ???? 截图（如适用）<br/>添加相关截图或演示<br/><br/>## ✅ 检查清单<br/>- [ ] 代码已通过测试<br/>- [ ] 已更新相关文档<br/>- [ ] 已遵循代码规范<br/>- [ ] 无控制台错误<br/>- [ ] 已关联相关 Issue<br/><br/>## ???? 相关 Issue<br/>Closes #123<br/><br/>3.3 代码审查流程<br/>审查者职责<br/>及时响应：24 小时内响应审查请求<br/><br/>仔细审查：<br/><br/>代码功能正确性<br/>代码质量和风格<br/>性能和安全问题<br/>测试覆盖<br/>提供反馈：<br/><br/>建设性的意见<br/>具体的改进建议<br/>必要时提供代码示例<br/>提交者职责<br/>及时回复：及时回复审查意见<br/>积极修改：根据反馈修改代码<br/>保持沟通：对审查意见有疑问及时沟通<br/>3.4 合并后清理<br/># 1. 切换到主分支<br/>git checkout develop<br/>git pull origin develop<br/><br/># 2. 删除本地分支<br/>git branch -d feature/user-login<br/><br/># 3. 删除远程分支（如果 PR 合并时未自动删除）<br/>git push origin --delete feature/user-login<br/><br/>4. 代码审查规范<br/>4.1 审查检查清单<br/> 功能正确性：代码实现了预期功能<br/> 代码质量：代码清晰、可读、可维护<br/> 代码风格：遵循团队代码规范<br/> 性能：没有明显的性能问题<br/> 安全性：没有安全漏洞<br/> 错误处理：错误处理完善<br/> 测试：有足够的测试覆盖<br/> 文档：必要文档已更新<br/>4.2 审查意见格式<br/>✅ 好的审查意见：<br/><br/>这里可以优化一下，使用更简洁的方式：<br/><br/>```javascript<br/>// 当前代码<br/>const result = array.filter(item =&gt; item &gt; 0).map(item =&gt; item * 2);<br/><br/>// 建议<br/>const result = array.reduce((acc, item) =&gt; &#123;<br/>&nbsp;&nbsp;if (item &gt; 0) acc.push(item * 2);<br/>&nbsp;&nbsp;return acc;<br/>&#125;, []);<br/><br/>❌ 不好的审查意见：<br/><br/>这个不对<br/>不好<br/>需要改<br/><br/>4.3 审查状态<br/>✅ 批准（Approve）：代码可以合并<br/>⚠️ 需要修改（Request Changes）：需要修改后才能合并<br/>???? 评论（Comment）：有疑问或建议，但不阻止合并<br/>5. 命名规范<br/>5.1 分支命名<br/>见 分支管理规范<br/><br/>5.2 提交信息命名<br/>见 提交信息规范<br/><br/>5.3 文件命名<br/>使用小写字母<br/>使用连字符或下划线分隔<br/>避免使用空格和特殊字符<br/>示例：user-service.js、user_model.py<br/>6. 安全规范<br/>6.1 敏感信息管理<br/>❌ 禁止提交：<br/><br/>密码、密钥、Token<br/>API 密钥<br/>数据库连接字符串<br/>个人隐私信息<br/>配置文件中的敏感信息<br/>✅ 正确做法：<br/><br/>使用环境变量<br/>使用 .gitignore 排除敏感文件<br/>使用密钥管理服务<br/>提供 .env.example 模板<br/>6.2 .gitignore 配置<br/># 环境变量<br/>.env<br/>.env.local<br/>.env.*.local<br/><br/># 密钥和证书<br/>*.key<br/>*.pem<br/>*.cert<br/>secrets/<br/>*.secret<br/><br/># 配置文件<br/>config/production.json<br/>config/local.json<br/><br/># 日志文件<br/>*.log<br/>logs/<br/><br/># 临时文件<br/>*.tmp<br/>*.temp<br/>*.cache<br/><br/><br/>6.3 访问控制<br/>使用 SSH Keys 而非密码<br/>定期轮换访问密钥<br/>遵循最小权限原则<br/>离职员工及时撤销权限<br/>7. 工具与配置<br/>7.1 必需工具<br/>Git：版本 &gt;= 2.30.0<br/>代码托管平台：GitHub / GitLab / Gitee<br/>代码审查工具：平台内置或第三方工具<br/>7.2 推荐工具<br/>Git GUI：SourceTree、GitKraken、GitHub Desktop<br/>IDE 集成：VS Code、WebStorm、IntelliJ IDEA<br/>提交信息检查：commitlint、husky<br/>7.3 Git 配置<br/># 设置用户信息<br/>git config --global user.name &quot;你的姓名&quot;<br/>git config --global user.email &quot;your.email@example.com&quot;<br/><br/># 设置默认编辑器<br/>git config --global core.editor &quot;code --wait&quot;<br/><br/># 设置默认分支名<br/>git config --global init.defaultBranch main<br/><br/># 启用颜色输出<br/>git config --global color.ui true<br/><br/># 设置推送行为<br/>git config --global push.default simple<br/><br/>8. 常见场景处理<br/>8.1 处理合并冲突<br/>拉取最新代码：git pull origin develop<br/>查看冲突文件：git status<br/>手动解决冲突<br/>标记已解决：git add &lt;file&gt;<br/>完成合并：git commit<br/>8.2 紧急修复（Hotfix）<br/># 1. 从 main 创建 hotfix 分支<br/>git checkout main<br/>git pull origin main<br/>git checkout -b hotfix/critical-bug<br/><br/># 2. 修复问题并提交<br/>git add .<br/>git commit -m &quot;fix: 修复紧急问题&quot;<br/>git push origin hotfix/critical-bug<br/><br/># 3. 创建 Pull Request 合并到 main<br/><br/># 4. 合并后同步到 develop<br/>git checkout develop<br/>git merge main<br/>git push origin develop<br/><br/>8.3 撤销误提交<br/># 撤销未推送的提交<br/>git reset --soft HEAD~1&nbsp;&nbsp;# 保留更改在暂存区<br/>git reset HEAD~1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 保留更改在工作区<br/>git reset --hard HEAD~1&nbsp;&nbsp;# 丢弃所有更改（危险！）<br/><br/># 撤销已推送的提交（推荐使用 revert）<br/>git revert HEAD<br/>git push origin branch-name<br/><br/>8.4 保存临时更改<br/># 保存当前更改<br/>git stash<br/><br/># 查看保存的更改<br/>git stash list<br/><br/># 恢复更改<br/>git stash pop<br/><br/>9. 违规处理<br/>9.1 违规行为<br/>❌ 直接推送到保护分支<br/>❌ 强制推送到共享分支<br/>❌ 提交无法编译的代码<br/>❌ 提交敏感信息<br/>❌ 使用不规范的分支命名<br/>❌ 提交信息不规范<br/>9.2 处理措施<br/>第一次：提醒并指导正确做法<br/>多次违规：团队内讨论，必要时限制权限<br/>严重违规：影响项目安全或稳定性时，立即处理<br/>10. 更新与维护<br/>10.1 规范更新<br/>规范的更新需要团队讨论通过<br/>更新后及时通知所有成员<br/>更新版本号和日期<br/>10.2 培训<br/>新成员入职时进行 Git 规范培训<br/>定期组织 Git 使用技巧分享<br/>提供详细的文档和示例<br/>附录<br/>A. 快速参考<br/># 开始新功能<br/>git checkout develop &amp;&amp; git pull &amp;&amp; git checkout -b feature/name<br/><br/># 提交更改<br/>git add . &amp;&amp; git commit -m &quot;feat: 描述&quot; &amp;&amp; git push<br/><br/># 同步主分支<br/>git checkout develop &amp;&amp; git pull origin develop<br/><br/># 查看状态<br/>git status &amp;&amp; git log --oneline -5<br/><br/>B. 相关文档<br/>Git 基础入门<br/>团队协作基础<br/>团队协作注意事项<br/>进阶技巧与最佳实践<br/>推荐团队实践<br/>C. 联系方式<br/>如有问题或建议，请联系：<br/><br/>团队负责人：xxx<br/>技术负责人：xxx<br/>文档维护：xxx<br/>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/683/</link>
<title><![CDATA[Git多分支规范]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Mon, 18 May 2026 08:17:27 +0000</pubDate> 
<guid>https://www.heckjj.com/post/683/</guid> 
<description>
<![CDATA[ 
	一、什么是Git分支管理？<br/>Git分支管理是指在Git版本控制系统中，通过创建和管理多个分支来组织代码开发流程，支持并行开发、代码隔离和版本控制。<br/>简单说，就像一棵树的主干和分支，master分支是主干，feature分支是枝叶，每个分支都可以独立生长，最后再合并到主干。<br/>其核心作用包括：<br/>&nbsp;&nbsp;<br/>• 并行开发：多个功能可以同时开发而不相互干扰。<br/>&nbsp;&nbsp;<br/>• 代码隔离：开发分支、测试分支、生产分支相互隔离。<br/>&nbsp;&nbsp;<br/>• 版本管理：支持版本回退、热修复和发布管理。<br/>&nbsp;&nbsp;<br/>• 团队协作：多人协作时减少代码冲突。<br/>&nbsp;&nbsp;<br/>二、分支类型说明<br/>2.1 长期存在分支（核心基础分支）<br/>master 主分支<br/>&nbsp;&nbsp;<br/>• 定位：生产环境分支，存放已发布的稳定、可靠版本代码。<br/>&nbsp;&nbsp;<br/>• 核心规则：仅用于发布新版本，禁止直接修改或提交新功能。<br/>&nbsp;&nbsp;<br/>develop 开发分支<br/>&nbsp;&nbsp;<br/>• 定位：日常开发主分支，汇总当前所有正在推进的功能和任务。<br/>&nbsp;&nbsp;<br/>• 核心规则：所有新功能开发、改进、优化均从该分支发起，完成后最终合并回此分支。<br/>&nbsp;&nbsp;<br/>2.2 临时创建分支（辅助开发/发布分支，完成后删除）<br/>feature 功能分支<br/>&nbsp;&nbsp;<br/>• 创建来源：从 develop 分支创建，功能分支的名字，可以采用feature-*的形式命名<br/>&nbsp;&nbsp;<br/>• 用途：单独开发某一个新功能（一个功能对应一个分支）<br/>&nbsp;&nbsp;<br/>• 流转终点：功能实现、测试完成后，合并回 develop 分支<br/>&nbsp;&nbsp;<br/>release 发布分支（不一定用）<br/>&nbsp;&nbsp;<br/>• 创建来源：从 develop 分支创建<br/>&nbsp;&nbsp;<br/>• 用途：为即将发布的版本做最终准备，仅开展测试、bug修复、文档检查等工作（不新增功能）<br/>&nbsp;&nbsp;<br/>• 流转终点：准备完成且测试通过后，同时合并回 master 分支（作为新发布版本）和 develop 分支（同步发布前的修复内容）<br/>&nbsp;&nbsp;<br/>hotfix 紧急修复分支<br/>&nbsp;&nbsp;<br/>• 创建来源：从 master 分支创建<br/>&nbsp;&nbsp;<br/>• 用途：紧急修复生产环境（master 分支对应版本）中出现的问题<br/>&nbsp;&nbsp;<br/>• 流转终点：修复完成后，同时合并回 master 分支（更新生产版本）和 develop 分支（同步修复内容，避免后续版本复现问题）<br/>&nbsp;&nbsp;<br/>三、业务流程图<br/>sequenceDiagram<br/>&nbsp;&nbsp;&nbsp;&nbsp;participant M as Master分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;participant D as Develop分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;participant F as Features功能分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;participant B as Bugfix缺陷分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;participant DT as 开发测试环境<br/>&nbsp;&nbsp;&nbsp;&nbsp;participant PT as 生产测试环境<br/>&nbsp;&nbsp;&nbsp;&nbsp;%% 功能开发流程（标注关键测试节点）<br/>&nbsp;&nbsp;&nbsp;&nbsp;note over M,D: 功能开发阶段<br/>&nbsp;&nbsp;&nbsp;&nbsp;M->>D: 从master初始化develop分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;D->>F: 基于develop创建功能分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;F->>DT: 开发完成→直接发布到开发测试环境（第一轮测试）<br/>&nbsp;&nbsp;&nbsp;&nbsp;note over F,DT: 开发联调阶段<br/>&nbsp;&nbsp;&nbsp;&nbsp;DT->>F: 反馈联调问题<br/>&nbsp;&nbsp;&nbsp;&nbsp;F->>F: 在功能分支修复问题<br/>&nbsp;&nbsp;&nbsp;&nbsp;F->>D: 修复完成→合并到develop分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;D->>DT: 合并后→再次发布到开发测试环境（第二轮验证）<br/>&nbsp;&nbsp;&nbsp;&nbsp;DT->>F: 开发测试通过<br/>&nbsp;&nbsp;&nbsp;&nbsp;F->>M: 功能分支合并到master分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;M->>PT: master发布到生产测试环境<br/>&nbsp;&nbsp;&nbsp;&nbsp;%% 缺陷修复流程（标注合并develop再测试）<br/>&nbsp;&nbsp;&nbsp;&nbsp;note over M,PT: 缺陷修复阶段<br/>&nbsp;&nbsp;&nbsp;&nbsp;PT->>M: 反馈生产测试缺陷问题<br/>&nbsp;&nbsp;&nbsp;&nbsp;M->>B: 基于master创建Bugfix缺陷分支<br/>&nbsp;&nbsp;&nbsp;&nbsp;B->>B: 在Bugfix分支修复缺陷问题<br/>&nbsp;&nbsp;&nbsp;&nbsp;B->>D: Bugfix分支→合并缺陷修复到develop<br/>&nbsp;&nbsp;&nbsp;&nbsp;D->>DT: 合并后→发布到开发测试环境联调<br/>&nbsp;&nbsp;&nbsp;&nbsp;DT->>D: 缺陷联调测试通过<br/>&nbsp;&nbsp;&nbsp;&nbsp;D->>M: develop→合并缺陷修复到master<br/>&nbsp;&nbsp;&nbsp;&nbsp;M->>PT: master再次发布到生产测试验收<br/>&nbsp;&nbsp;&nbsp;&nbsp;M->>M: 验收通过，创建版本标签<br/><a href="https://www.heckjj.com/attachment.php?fid=269" target="_blank"><img src="https://www.heckjj.com/attachment.php?fid=269" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>四、常见分支策略<br/>&nbsp;&nbsp;<br/>• master：生产环境代码，标签标记版本<br/>&nbsp;&nbsp;<br/>• develop：开发主分支，集成功能分支<br/>&nbsp;&nbsp;<br/>• feature：功能开发分支，从develop创建<br/>&nbsp;&nbsp;<br/>• release：发布准备分支，从develop/master创建<br/>&nbsp;&nbsp;<br/>• hotfix：紧急修复分支，从master创建<br/>&nbsp;&nbsp;<br/>五、分支命名规范<br/>&nbsp;&nbsp;<br/>• 功能分支：feature/功能名称 或 feature/issue-id-功能描述<br/>&nbsp;&nbsp;<br/>• 发布分支：release/v1.2.0 或 release/2027-01-01<br/>&nbsp;&nbsp;<br/>• 热修复分支：hotfix/bug-id 或 hotfix/紧急修复描述<br/>&nbsp;&nbsp;<br/>• 开发分支：develop 或 development<br/>&nbsp;&nbsp;<br/>六、互联网大厂Git工作流实战 devops<br/><a href="https://www.heckjj.com/attachment.php?fid=270" target="_blank"><img src="https://www.heckjj.com/attachment.php?fid=270" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>七、分支管理最佳实践<br/>&nbsp;&nbsp;<br/>• 分支生命周期管理：及时删除已合并的分支<br/>&nbsp;&nbsp;<br/>• 保护主分支：通过分支保护规则防止直接推送<br/>• 代码审查：所有合并都需要Pull Request和审查<br/>• 定期同步：保持分支与主分支的同步<br/>&nbsp;&nbsp;<br/>• 标签管理：重要版本打tag标记<br/>&nbsp;&nbsp;<br/>八、Git多分支实战和代码合并规范讲解<br/>8.1 Git分支基本操作实战<br/># 查看当前分支<br/>git branch<br/># 创建新分支（基于当前分支）<br/>git branch feature/user-login<br/># 创建并切换到新分支<br/>git checkout -b feature/user-login<br/># 基于指定分支创建新分支<br/>git checkout -b feature/payment develop<br/># 查看所有分支（包括远程）<br/>git branch -a<br/>8.2 分支工作流完整演练<br/>功能开发工作流<br/># 1. 从develop分支创建功能分支<br/>git checkout develop<br/>git pull origin develop<br/>git checkout -b feature/user-registration<br/># 2. 开发功能并提交<br/># ... 开发代码 ...<br/>git add .<br/>git commit -m "feat: 增加用户注册功能"<br/># 3. 推送分支到远程<br/>git push origin feature/user-registration<br/># 4. 创建Pull Request/Merge Request<br/># 在GitHub/GitLab上创建PR<br/># 5. 同步最新代码<br/>git checkout develop<br/>git pull origin develop<br/>git checkout feature/user-registration<br/># 6. 解决可能的冲突<br/># ... 解决冲突 ...<br/># 7. 推送更新后的分支<br/>git push origin feature/user-registration --force-with-lease<br/>紧急修复工作流<br/># 1. 从master创建热修复分支<br/>git checkout master<br/>git pull origin master<br/>git checkout -b hotfix/critical-bug-fix<br/># 2. 修复bug<br/># ... 修复代码 ...<br/>git add .<br/>git commit -m "fix: 解决严重的授权问题"<br/># 3. 同时合并到master和develop<br/>git checkout master<br/>git merge hotfix/critical-bug-fix<br/>git push origin master<br/>git checkout develop<br/>#将热修复代码合并到develop分支，同步修复逻辑到开发分支。<br/>git merge hotfix/critical-bug-fix<br/>git push origin develop<br/># 4. 删除热修复分支<br/>git branch -d hotfix/critical-bug-fix<br/>代码合并规范说明<br/>提交信息规范<br/># 格式：type(scope): description<br/>git commit -m "feat(授权): 增加JWT授权验证"<br/># 常用type：<br/># feat: 新功能<br/># fix: 修复bug<br/># docs: 文档更新<br/># style: 代码格式调整<br/># refactor: 代码重构<br/># test: 测试相关<br/>分支命名规范<br/>&nbsp;&nbsp;<br/>• 功能分支：feature/功能名称 或 feature/issue-123-user-login<br/>&nbsp;&nbsp;<br/>• 修复分支：fix/bug描述 或 fix/issue-456-data-validation<br/>&nbsp;&nbsp;<br/>• 发布分支：release/v1.2.0<br/>&nbsp;&nbsp;<br/>• 热修复：hotfix/紧急修复描述<br/>&nbsp;&nbsp;<br/>合并请求规范<br/>• 标题清晰描述变更内容<br/>&nbsp;&nbsp;<br/>• 详细描述变更原因和影响<br/>&nbsp;&nbsp;<br/>• 关联相关issue或需求<br/>&nbsp;&nbsp;<br/>• 提供测试说明和验证步骤<br/>Tags - <a href="https://www.heckjj.com/tags/git/" rel="tag">git</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/653/</link>
<title><![CDATA[/bin/bash^M: bad interpreter: No such file or directory]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Mon, 21 Aug 2023 05:42:40 +0000</pubDate> 
<guid>https://www.heckjj.com/post/653/</guid> 
<description>
<![CDATA[ 
	错误原因和现象<br/>在执行shell脚本的时候，报错：/bin/bash^M: bad interpreter: No such file or directory。<br/>是由于该脚本文件是在Windows平台编写，然后在MacOS或者Kylin-Server平台中执行。<br/>在Windows平台上文件是dos格式，换行符尾&#92;r&#92;n，而MacOS或者Kylin-Server平台文件是unix格式，换行符尾&#92;n。因此在运行脚本文件时，不能正确解析&#92;r，导致编译错误、运行失败。<br/><br/>解决方案<br/><br/>在MacOS或者Kylin-Server平台上，打开命令行工具执行命令vim *.sh（编辑你的脚本文件），然后执行命令:set ff=unix，最后执行:wq( 保存退出)即可。<br/>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/649/</link>
<title><![CDATA[linux同步时间命令有哪些]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Thu, 29 Jun 2023 07:02:32 +0000</pubDate> 
<guid>https://www.heckjj.com/post/649/</guid> 
<description>
<![CDATA[ 
	linux同步时间命令：<br/><br/>1、hwclock命令，可以让系统时间和硬件时间的同步，例“hwclock -w”或“hwclock -s”；<br/>2、ntpdate命令，可以让不同机器间同步时间。<br/><br/><br/>在Windwos中，系统时间的设置很简单，界面操作，通俗易懂，而且设置后，重启，关机都没关系。系统时间会自动保存在BIOS时钟里面，启动计算机的时候，系统会自动在BIOS里面取硬件时间，以保证时间的不间断。<br/><br/>但在Linux下，默认情况下，系统时间和硬件时间并不会自动同步。在Linux运行过程中，系统时间和硬件时间以异步的方式运行，互不干扰。硬件时间的运行，是靠BIOS电池来维持，而系统时间，是用CPU Tick来维持的。在系统开机的时候，会自动从BIOS中取得硬件时间，设置为系统时间。<br/><br/>1. Linux系统时间的设置<br/>在Linux中设置系统时间，可以用date命令：<br/><br/>//查看时间<br/><br/>[root@node1 ~]# date<br/><br/>Tue Feb 25 20:15:18 CST 2014<br/><br/>//修改时间<br/><br/>[root@node1 ~]# date -s &quot;20140225 20:16:00&quot;&nbsp;&nbsp;#yyyymmdd hh:mm:ss<br/><br/>Tue Feb 25 20:16:00 CST 2014<br/><br/>//date 有多种时间格式可接受，查看date --help<br/><br/>2. Linux硬件时间的设置<br/>硬件时间的设置，可以用hwclock或者clock命令。两者基本相同，只用一个就行，只不过clock命令除了支持x86硬件体系外，还支持Alpha硬件体系。<br/><br/>//查看硬件时间可以是用hwclock ，hwclock --show 或者 hwclock -r<br/><br/>[root@node1 ~]# hwclock --show<br/><br/>Tue 25 Feb 2014 08:21:14 PM CST -0.327068 seconds<br/><br/>//设置硬件时间<br/><br/>[root@node1 ~]# hwclock --set --date &quot;20140225 20:23:00&quot;<br/><br/>[root@node1 ~]# hwclock<br/><br/>Tue 25 Feb 2014 08:23:04 PM CST -0.750440 seconds<br/><br/>3. 系统时间和硬件时间的同步<br/>同步系统时间和硬件时间，可以使用hwclock命令。<br/><br/>//以系统时间为基准，修改硬件时间<br/><br/>[root@node1 ~]# hwclock --systohc &lt;== sys（系统时间）to（写到）hc（Hard Clock）<br/><br/>//或者<br/><br/>[root@node1 ~]# hwclock -w<br/><br/>//以硬件时间为基准，修改系统时间<br/><br/>[root@node1 ~]# hwclock --hctosys<br/><br/>//或者<br/><br/>[root@node1 ~]# hwclock -s<br/><br/>4. 不同机器之间的时间同步<br/>为了避免主机时间因为长期运行下所导致的时间偏差，进行时间同步（synchronize）的工作是非常必要的。Linux系统下，一般使用ntp服务器来同步不同机器的时间。一台机器，可以同时是ntp服务端和ntp客户端。在生产系统中，推荐使用像DNS服务器一样分层的时间服务器来同步时间。<br/><br/>不同机器间同步时间，可以使用ntpdate命令，也可以使用ntpd服务。<br/><br/>4.1 ntpdate命令<br/><br/>使用ntpdate比较简单。格式如下：<br/><br/><br/>1 [root@node1 ~]# ntpdate [NTP IP/hostname]<br/><br/>2 [root@node1 ~]# ntpdate 192.168.0.1<br/><br/>3 [root@node1 ~]# ntpdate time.ntp.org<br/><br/>但这样的同步，只是强制性的将系统时间设置为ntp服务器时间。如果CPU Tick有问题，只是治标不治本。所以，一般配合cron命令，来进行定期同步设置。比如，在crontab中添加：<br/><br/>0 12 * * * /usr/sbin/ntpdate 192.168.0.1<br/><br/>这样，会在每天的12点整，同步一次时间。ntp服务器为192.168.0.1。<br/><br/>或者将下列脚本添加到/etc/cron.hourly/，这样就每小时会执行一次同步：<br/><br/>#!/bin/bash<br/><br/>#<br/><br/># $Id: sync-clock,v 1.6 2009/12/23 15:41:29 jmates Exp $<br/><br/>#<br/><br/># Use ntpdate to get rough clock sync with department of Genome Sciences<br/><br/># time server.<br/><br/> <br/><br/>NTPDATE=/usr/sbin/ntpdate<br/><br/>SERVER=&quot;192.168.0.1 &quot;<br/><br/><br/># if running from cron (no tty available), sleep a bit to space<br/><br/># out update requests to avoid slamming a server at a particular time<br/><br/>if ! test -t 0; then<br/><br/>&nbsp;&nbsp;MYRAND=$RANDOM<br/><br/>&nbsp;&nbsp;MYRAND=$&#123;MYRAND:=$$&#125;<br/><br/> <br/><br/>&nbsp;&nbsp;if [ $MYRAND -gt 9 ]; then<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;sleep `echo $MYRAND &#124; sed &#039;s/.*&#92;(..&#92;)$/&#92;1/&#039; &#124; sed &#039;s/^0//&#039;`<br/><br/>&nbsp;&nbsp;fi<br/><br/>fi<br/><br/> <br/><br/>$NTPDATE -su $SERVER<br/><br/># update hardware clock on Linux (RedHat?) systems<br/><br/>if [ -f /sbin/hwclock ]; then<br/><br/>&nbsp;&nbsp;/sbin/hwclock --systohc<br/><br/>fi<br/><br/>4.2 ntpd服务<br/><br/>使用ntpd服务，要好于ntpdate加cron的组合。因为，ntpdate同步时间会造成时间的突变和跳跃，对一些依赖时间的程序和服务会造成影响。比如sleep，timer等。而且ntpd服务可以在修正时间的同时，修正CPU Tick。因此理想的做法为，在开机的时候，使用ntpdate强制同步时间，在其他时候使用ntpd服务来同步时间。<br/><br/>要注意的是，ntpd 有一个自我保护的机制：如果本机与上源时间相差太大，ntpd 不会运行时间同步操作，所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务运行后，先是每64秒与上源NTP服务器同步一次，根据每次同步时测得的误差值经复杂计算逐步调整自己的时间，随着误差减小，逐步增加同步的间隔。每次跳动，都会重复这个调整的过程。<br/><br/>4.3. ntpd服务的设置<br/><br/>ntpd服务的相关设置文件如下：<br/><br/>（1）/etc/ntp.conf：这个是NTP daemon的主要设文件，也是 NTP 唯一的设定文件。<br/><br/>（2）/usr /share/zoneinfo/：在这个目录下的文件其实是规定了各主要时区的时间设定文件，例如北京地区的时区设定文件在 /usr/share/zoneinfo/Asia/Shanghai 就是了。这个目录里面的文件与底下要谈的两个文件(clock 与localtime)是有关系的。<br/><br/>（3）/etc/sysconfig/clock：这个文件其实也不包含在NTP 的 daemon 当中，因为这个是 Linux 的主要时区设定文件。每次开机后，Linux 会自动的读取这个文件来设定自己系统所默认要显示的时间。<br/><br/>（4）/etc /localtime：这个文件就是&quot;本地端的时间配置文件&quot;。刚刚那个clock 文件里面规定了使用的时间设置文件(ZONE) 为 /usr/share/zoneinfo/Asia/Shanghai ，所以说，这就是本地端的时间了，此时， Linux系统就会将Shanghai那个文件另存为一份 /etc/localtime文件，所以未来我们的时间显示就会以Beijing那个时间设定文件为准。<br/><br/>下面重点介绍 /etc/ntp.conf文件的设置。在 NTP Server 的设定上，建议不要对Internet 无限制的开放，尽量仅提供局域网内部的 Client 端联机进行网络校时。此外，NTP Server 总也是需要网络上面较为准确的主机来自行更新自己的时间啊，所以在我们的 NTP Server 上面也要找一部最靠近自己的 Time Server 来进行自我校正。事实上， NTP 这个服务也是 Server/Client 的一种模式。<br/><br/>[root@linux ~]# vi /etc/ntp.conf <br/><br/># 1. 关于权限设定部分 <br/><br/>#　　权限的设定主要以 restrict 这个参数来设定，主要的语法为： <br/><br/># 　　restrict IP mask netmask_IP parameter <br/><br/># 　　其中 IP 可以是软件地址，也可以是 default ，default 就类似 0.0.0.0 <br/><br/>#　　至于 paramter 则有： <br/><br/>#　　　ignore　：关闭所有的 NTP 联机服务 <br/><br/>#　　　nomodify：表示 Client 端不能更改 Server 端的时间参数，不过Client 端仍然可以透过 Server 端来进行网络校时。<br/><br/>#　　　notrust ：该 Client 除非通过认证，否则该 Client 来源将被视为不信任网域 <br/><br/>#　　　noquery ：不提供 Client 端的时间查询<br/><br/><br/>#　　　notrap ：不提供trap这个远程事件登入<br/><br/> <br/>#　　如果 paramter 完全没有设定，那就表示该 IP (或网域)&quot;没有任何限制&quot;<br/><br/><br/>restrict default nomodify notrap noquery　# 关闭所有的 NTP 要求封包<br/><br/>restrict 127.0.0.1　　　 #这是允许本机查询<br/><br/>restrict 192.168.0.1 mask 255.255.255.0 nomodify<br/><br/><br/>#在192.168.0.1/24网段内的服务器就可以通过这台NTP Server进行时间同步了 <br/><br/># 2. 上层主机的设定 <br/><br/>#　　要设定上层主机主要以 server 这个参数来设定，语法为：<br/><br/>#　　server [IP&#124;HOST Name] [prefer]<br/><br/>#　　Server 后面接的就是上层 Time Server，而如果 Server 参数<br/><br/> <br/># 后面加上 perfer 的话，那表示我们的 NTP 主机主要以该部主机来<br/><br/><br/># 作为时间校正的对应。另外，为了解决更新时间封包的传送延迟动作，<br/><br/>#　　所以可以使用 driftfile 来规定我们的主机 <br/><br/>#　　在与 Time Server 沟通时所花费的时间，可以记录在 driftfile&nbsp;&nbsp;<br/><br/>#　　后面接的文件内，例如下面的范例中，我们的 NTP server 与&nbsp;&nbsp;<br/><br/>#　　cn.pool.ntp.org联机时所花费的时间会记录在 /etc/ntp/drift文件内 <br/><br/>server 0.pool.ntp.org<br/>server 1.pool.ntp.org<br/>server 2.pool.ntp.org<br/>server cn.pool.ntp.org prefer<br/><br/>#其他设置值，以系统默认值即可<br/>server&nbsp;&nbsp;127.127.1.0&nbsp;&nbsp;&nbsp;&nbsp; # local clock<br/>fudge&nbsp;&nbsp; 127.127.1.0 stratum 10<br/>driftfile /var/lib/ntp/drift<br/>broadcastdelay&nbsp;&nbsp;0.008<br/><br/>keys /etc/ntp/keys<br/><br/>总结一下，restrict用来设置访问权限，server用来设置上层时间服务器，driftfile用来设置保存漂移时间的文件。<br/><br/>4.4 ntpd服务的启动与查询<br/><br/>在启动NTP服务前，先对提供服务的这台主机手动的校正一次时间（因为启动服务器，端口会被服务端占用，就不能手动同步时间了）。<br/><br/>[root@node1 ~]# ntpdate cn.pool.ntp.org<br/><br/>25 Feb 21:10:52 ntpdate[9549]: adjust time server 202.112.31.197 offset 0.000101 sec<br/><br/>然后，启动ntpd服务：<br/><br/>[root@node1 ~]# /etc/init.d/ntpd start<br/><br/>Starting ntpd: [ OK ]<br/><br/>[root@node1 ~]# date<br/><br/>Tue Feb 25 21:11:07 CST 2014<br/><br/>查看端口（ntpd服务使用UDP的123端口）：<br/><br/>[root@node1 ~]# netstat -ln &#124;grep :123<br/><br/>udp 0 0 12.12.12.100:123 0.0.0.0:*<br/><br/>udp 0 0 192.168.0.100:123 0.0.0.0:*<br/><br/>udp 0 0 172.18.226.174:123 0.0.0.0:*<br/><br/>udp 0 0 10.10.10.100:123 0.0.0.0:*<br/><br/>udp 0 0 127.0.0.1:123 0.0.0.0:*<br/><br/>udp 0 0 0.0.0.0:123 0.0.0.0:*<br/><br/>udp 0 0 fe80::225:90ff:fe98:61ff:123 :::*<br/><br/>udp 0 0 fe80::225:90ff:fe98:61fe:123 :::*<br/><br/>udp 0 0 fe80::202:c903:1b:afa1:123 :::*<br/><br/>udp 0 0 ::1:123 :::*<br/><br/>udp 0 0 :::123 :::*<br/><br/>如何确认我们的NTP服务器已经更新了自己的时间呢？<br/><br/>[root@node1 ~]# ntpstat<br/><br/>synchronised to NTP server (202.120.2.101) at stratum 4<br/><br/>time correct to within 557 ms<br/><br/>polling server every 64 s<br/><br/># 该指令可列出NTP服务器是否与上层联机。由上述输出结果可知，时间校正约<br/><br/># 为557*10(-6)秒，且每隔64秒会主动更新时间。<br/><br/>常见的错误：<br/><br/>unsynchronized time server re-starting polling server every 64 s<br/><br/>// 或者<br/><br/>25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found<br/><br/>其实，这不是一个错误。而是由于每次重启NTP服务器之后大约要3－5分钟客户端才能与server建立正常的通讯连接。当此时用客户端连接服务端就会报这样的信息。一般等待几分钟就可以了。<br/><br/>[root@node1 ~] # ntptrace –n<br/><br/>127.0.0.1:stratum 11, offset 0.000000，synch distance 0.950951<br/><br/>222.73.214.125：stratum 2，offset –0.000787，synch distance 0.108575<br/><br/>209.81.9.7:stratum 1，offset 0.000028，synch distance 0.00436，refid &#039;GPS&#039;<br/><br/># 这个指令可以列出目前NTP服务器（第一层）与上层NTP服务器（第二层）<br/><br/># 彼此之间的关系，注意：该命令需要安装ntp-perl包<br/><br/>ntpq命令：<br/><br/><br/>[root@node1 ~]# ntpq -p<br/><br/>在这里插入图片描述<br/><br/>指令&quot;ntpq -p&quot;可以列出目前我们的NTP与相关的上层NTP的状态，以上的几个字段的意义如下：<br/><br/>remote：即NTP主机的IP或主机名称。注意最左边的符号，如果由&quot;+“则代表目前正在作用钟的上层NTP，如果是”*&quot;则表示也有连上线，不过是作为次要联机的NTP主机。<br/><br/>refid：参考的上一层NTP主机的地址<br/><br/>st：即stratum阶层<br/><br/>when：几秒前曾做过时间同步更新的操作<br/><br/>poll：下次更新在几秒之后<br/><br/>reach：已经向上层NTP服务器要求更新的次数<br/><br/>delay：网络传输过程钟延迟的时间<br/><br/>offset：时间补偿的结果<br/><br/>jitter：Linux系统时间与BIOS硬件时间的差异时间<br/><br/>最后提及一点，ntp服务默认只会同步系统时间。如果想要让ntp同时同步硬件时间，可以设置/etc/sysconfig/ntpd 文件。<br/><br/>在/etc/sysconfig/ntpd文件中，添加 SYNC_HWCLOCK=yes 这样，就可以让硬件时间与系统时间一起同步。
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/641/</link>
<title><![CDATA[MinIO 服务器配置（配置目录）]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Thu, 12 Jan 2023 07:09:44 +0000</pubDate> 
<guid>https://www.heckjj.com/post/641/</guid> 
<description>
<![CDATA[ 
	MinIO 服务器配置文件（config.json）存储在 --config-dir 指定的配置目录中，--config-dir 默认值为 $&#123;HOME&#125;/.minio（笔者的目录为 C:&#92;Users&#92;Administrator&#92;.minio）。<br/><br/>但是从 RELEASE.2018-08-18T03-49-57Z 之后的版本开始，配置文件已迁移到存储数据的 .minio.sys/config 目录（存储后端是启动服务器时传递给 MinIO 服务器的目录）。如果使用如下命令启动 MinIO 服务：<br/><br/><br/>minio.exe server D:/tmp/data<br/>则配置文件位于 D:&#92;tmp&#92;data&#92;.minio.sys&#92;config 目录中。<br/><br/>注意：你可以使用 mc -h 命令查看当前 MinIO 的版本信息，如下：<br/><br/><br/>D:&#92;server&#92;minio&gt;mc -h<br/>NAME:<br/>&nbsp;&nbsp;mc - MinIO Client for cloud storage and filesystems.<br/>...<br/>VERSION:<br/>&nbsp;&nbsp;RELEASE.2021-06-13T17-48-22Z<br/>您可以使用 --config-dir 指定现有配置的位置，MinIO 会自动将 config.json 迁移到您的后端存储。您当前 --config-dir 指定的 config.json 配置文件将在成功迁移后重命名为 config.json.deprecated。<br/><br/>如果你的配置文件位于 C:&#92;Users&#92;Administrator&#92;.minio&#92;config.json，MinIO 会自动将 config.json 中的配置迁移到 D:&#92;tmp&#92;data&#92;.minio.sys&#92;config&#92;config.json 文件，然后将 C:&#92;Users&#92;Administrator&#92;.minio&#92;config.json 重命名为 C:&#92;Users&#92;Administrator&#92;.minio&#92;config.json.deprecated。<br/><br/>此外 --config-dir 现在是一个遗留选项，计划在将来删除，因此请相应地更新您的本地启动和 ansible 脚本。使用如下命令去启动 MinIO 服务：<br/><br/>minio.exe server D:&#92;tmp&#92;data<br/>上面命令，将创建的存储桶以及存储桶中的对象放到 D:&#92;tmp&#92;data 目录，并且配置信息均位于 D:&#92;tmp&#92;data&#92;.minio.sys 目录。<br/><br/>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/640/</link>
<title><![CDATA[Linux安装MinIO]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Thu, 12 Jan 2023 05:06:57 +0000</pubDate> 
<guid>https://www.heckjj.com/post/640/</guid> 
<description>
<![CDATA[ 
	第一步，进入/opt 目录，创建minio文件夹<br/>cd /opt<br/>mkdir minio<br/>第二步，wget下载安装包：<br/>https://dl.minio.io/server/minio/release/linux-amd64/minio<br/><br/>第三步，进入minio文件夹创建log文件<br/>cd /minio<br/>touch minio.log<br/><br/><br/> 第四步，赋予minio文件执行权限<br/><br/>chmod 777 minio<br/>第五步，启动minio<br/>./minio server /opt/minio/data （/opt/minio/data 为你存放静态文件的目录）<br/><br/><br/>这个时候我们看下面爆红的提示，说的是：<br/>警告：控制台端点正在侦听动态端口 (39175)，请使用 --console-address “:PORT” 选择静态端口。<br/>警告：检测到默认凭据“minioadmin:minioadmin”，我们建议您使用“MINIO_ROOT_USER”和“MINIO_ROOT_PASSWORD”环境变量更改这些值<br/><br/>所以我们按照提示来：<br/> <br/><br/>export MINIO_ROOT_USER=fileadmin<br/>export MINIO_ROOT_PASSWORD=fileadmin<br/>第六步，重新启动minio<br/>./minio server /opt/minio/data （/opt/minio/data 为你存放静态文件的目录）<br/>第七步，设置环境变量<br/>vim /etc/profile<br/>添加<br/><br/># set minio environment<br/>export MINIO_ROOT_USER=fileadmin<br/>export MINIO_ROOT_PASSWORD=fileadmin<br/> 生效：source /etc/profile;<br/><br/>第 七步，设置minio后台启动（指定端口）<br/>vim start.sh<br/> <br/>nohup /opt/minio/minio server&nbsp;&nbsp;/opt/minio/data --console-address &quot;:35555&quot; &gt; /opt/minio/minio.log 2&gt;&amp;1 &amp;<br/>(&#039;2&gt;&amp;1’表示现在标准输出直接输入到/opt/minio/minio.log 中，而2&gt;&amp;1是将标准错误重定向到标准输出,‘nohup’和末尾’&amp;&#039;组合使用表示脱离终端后继续执行)<br/>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/638/</link>
<title><![CDATA[让bat批处理以管理员权限运行的实现方法]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Mon, 12 Dec 2022 07:12:50 +0000</pubDate> 
<guid>https://www.heckjj.com/post/638/</guid> 
<description>
<![CDATA[ 
	让bat批处理以管理员权限运行的实现方法<br/>有的电脑是非管理员登录，运行程序时，需要提示是否运行运行。解决方法如下：<br/>在批处理开头加上：<br/>适用于无参数<br/><br/>%1 mshta vbscript:CreateObject(&quot;Shell.Application&quot;).ShellExecute(&quot;cmd.exe&quot;,&quot;/c &quot;^&amp;chr(34)^&amp;&quot;%~0&quot;^&amp;chr(34)^&amp;&quot; ::&quot;,&quot;%cd%&quot;,&quot;runas&quot;,1)(window.close)&amp;&amp;exit<br/><br/>适用于有参数<br/><br/>%2 mshta vbscript:CreateObject(&quot;Shell.Application&quot;).ShellExecute(&quot;cmd.exe&quot;,&quot;/c &quot;^&amp;chr(34)^&amp;&quot;%~0&quot;^&amp;chr(34)^&amp;&quot; &quot;^&amp;chr(34)^&amp;&quot;%~1&quot;^&amp;chr(34)^&amp;&quot; ::&quot;,&quot;%cd%&quot;,&quot;runas&quot;,1)(window.close)&amp;&amp;exit<br/><br/>更多参数的以此类推<br/>运行批处理时多加一个参数::，这句就不会执行<br/>为了兼容8.3短路径，可把%~0等换成%~s0等<br/>理论上是没问题，但启动路径有时不可靠，之后可能还要pushd或cd /d<br/><br/>bat文件以管理员权限运行的几种方式<br/><br/>1、创建bat快捷方式，然后右键快捷方式--&gt;properties--&gt;advanced--&gt;Run as administrator。<br/>2、下载bat转成exe工具，将bat转成exe,然后右键exe--&gt;properties--&gt;Compatibility--&gt;Run as administrator。<br/>3、以管理员权限运行cmd，然后dos框中运行相应的bat。
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post/637/</link>
<title><![CDATA[怎么使用bat脚本更改本地受保护的hosts文件]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[运维管理]]></category>
<pubDate>Fri, 09 Dec 2022 14:15:16 +0000</pubDate> 
<guid>https://www.heckjj.com/post/637/</guid> 
<description>
<![CDATA[ 
	想更改hosts文件添加域名与地址ip、由于hosts文件受保护并且是只读属性。因此需要先赋予权限，并取消只读属性才能正常写入<br/>&nbsp;&nbsp; /E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编辑 ACL 而不替换。<br/>&nbsp;&nbsp; /G 　　　赋予指定用户访问权限。<br/>&nbsp;&nbsp; F 　　　完全权限。<br/><a href="https://www.heckjj.com/attachment.php?fid=252" target="_blank"><img src="https://www.heckjj.com/attachment.php?fid=252" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Administrators、SYSTEM、Users（是windows用户组需要什么加什么）<br/><br/>attrib 是控制文件属性的<br/><br/>　　+ 添加文件属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;删除文件属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R 只读文件属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A 存档文件属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S 系统文件属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H 隐藏文件属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I 无连接属性<br/><br/>@echo<br/>@echo 127.0.0.1 .heckjj.com &gt;&gt;E:hosts（这是我们要写入的内容）<br/><br/>虽然脚本比较笨拙，但是亲测有效，若是找不到好的方法可以选择试一下O(∩_∩)O<br/>======================================================================================<br/>1、新建记事本输入一下内容<br/> bat脚本代码如下：<br/><br/>set HOSTS=C:&#92;Windows&#92;System32&#92;drivers&#92;etc&#92;hosts<br/>echo Y&#124;cacls %HOSTS% /E /G Administrators:F<br/>echo Y&#124;cacls %HOSTS% /E /G SYSTEM:F<br/>echo Y&#124;cacls %HOSTS% /E /G Users:F<br/><br/>attrib -r -h %HOSTS%<br/><br/>@echo<br/>@echo.&gt;&gt;%HOSTS%<br/><br/><br/>@echo 127.0.0.1 heckjj.com &gt;&gt;%HOSTS%<br/><br/>attrib +r +h %HOSTS%<br/><br/>title 刷新本地dns缓存并退出<br/>echo 查看修改后的hosts文件内容,1秒后退出!<br/>type &quot;%HOSTS%&quot; &#124;findstr /v &quot;^#&quot;&#124;findstr &quot;[0-9]&quot;<br/>ping -n 1 127.0.0.1&gt;nul<br/>ipconfig /flushdns<br/>echo 刷新本地缓存成功，即将退出!<br/>ping -n 2 127.0.0.1&gt;nul<br/>echo.<br/>exit<br/>2、将记事本后缀名改为.bat格式的文件，然后双击即可完成修改。
]]>
</description>
</item>
</channel>
</rss>