<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ProjectManagement on Leanku 的博客</title><link>https://www.leanku.com/categories/projectmanagement/</link><description>Recent content in ProjectManagement on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 18 May 2025 13:46:01 +0800</lastBuildDate><atom:link href="https://www.leanku.com/categories/projectmanagement/index.xml" rel="self" type="application/rss+xml"/><item><title>Git项目多远程仓库同步方法</title><link>https://www.leanku.com/post/projectmanagement/git%E9%A1%B9%E7%9B%AE%E5%A4%9A%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E5%90%8C%E6%AD%A5%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 18 May 2025 13:46:01 +0800</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E9%A1%B9%E7%9B%AE%E5%A4%9A%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E5%90%8C%E6%AD%A5%E6%96%B9%E6%B3%95/</guid><description>&lt;h1 id="git项目多远程仓库同步方法"&gt;Git项目多远程仓库同步方法&lt;/h1&gt;&#10;&lt;p&gt;同一个 Git 项目可以同时推送到多个远程仓库（如 Gogs 和 Gitee）。&lt;/p&gt;&#10;&lt;h2 id="1--添加-gitee-作为新的远程仓库"&gt;1. 添加 Gitee 作为新的远程仓库&lt;/h2&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-bsah" data-lang="bsah"&gt;git remote add gitee &amp;lt;Gitee仓库的URL&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2-验证远程仓库设置"&gt;2. 验证远程仓库设置&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;git remote -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-推送到-gitee"&gt;3. 推送到 Gitee&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;git push gitee master &lt;span class="c1"&gt;# 推送 master 分支&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或推送所有分支：&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;git push --all gitee&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="4可选设置默认同时推送到两个仓库"&gt;4.（可选）设置默认同时推送到两个仓库&lt;/h2&gt;&#10;&lt;p&gt;修改 .git/config 文件，在 [remote &amp;ldquo;origin&amp;rdquo;] 部分添加多个 push URL：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[remote &amp;#34;origin&amp;#34;]&#10; url = https://gogs.example.com/yourname/yourrepo.git&#10; fetch = +refs/heads/*:refs/remotes/origin/*&#10; pushurl = https://gogs.example.com/yourname/yourrepo.git&#10; pushurl = https://gitee.com/yourname/yourrepo.git&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这样 git push 会同时推送到两个仓库。&lt;/p&gt;&#10;&lt;h2 id="5-可选从-gitee-拉取更新"&gt;5. （可选）从 Gitee 拉取更新&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;git pull gitee master&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="删除指定的远程仓库如-gitee"&gt;删除指定的远程仓库（如 gitee）&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;git remote remove gitee&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="注意事项"&gt;注意事项：&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;两个仓库的分支结构最好保持一致&lt;/li&gt;&#10;&lt;li&gt;如果两边都有新的提交，可能需要先合并再推送&lt;/li&gt;&#10;&lt;li&gt;大型项目首次推送到 Gitee 可能需要较长时间&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;这种方法可以让你保持代码在多个远程仓库同步，适用于需要备份或多平台协作的场景。&lt;/p&gt;</description></item><item><title>Git创建不继承内容的新分支</title><link>https://www.leanku.com/post/projectmanagement/git%E5%88%9B%E5%BB%BA%E4%B8%8D%E7%BB%A7%E6%89%BF%E5%86%85%E5%AE%B9%E7%9A%84%E6%96%B0%E5%88%86%E6%94%AF/</link><pubDate>Sat, 10 May 2025 19:46:01 +0800</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E5%88%9B%E5%BB%BA%E4%B8%8D%E7%BB%A7%E6%89%BF%E5%86%85%E5%AE%B9%E7%9A%84%E6%96%B0%E5%88%86%E6%94%AF/</guid><description>&lt;h1 id="git-filter-branch-清理误提交大文件"&gt;git filter-branch 清理误提交大文件&lt;/h1&gt;&#10;&lt;h2 id="问题概述"&gt;问题概述：&lt;/h2&gt;&#10;&lt;p&gt;在当前项目中放有大文件（超过100M）package/grpc.tar.gz,进行了git add,commit 并push, push过程中出现了错误如：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;remote: error: File package/grpc.tar.gz is 973.06 MB; this exceeds GitHub's file size limit of 100.00 MB&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;这个问题会导致后面的提交以及push出错&lt;/p&gt;&#10;&lt;h2 id="git-filter-branch"&gt;git filter-branch&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;用 git filter-branch 删除历史中所有的 grpc.tar.gz&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;git filter-branch --force --index-filter \&#10;&amp;#34;git rm --cached --ignore-unmatch package/grpc.tar.gz&amp;#34; \&#10;--prune-empty -- lite-AlmaLinux&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;💡 说明：这个命令会清理当前分支里所有 commit 中的 package/grpc.tar.gz&lt;/p&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;清理垃圾对象并压缩仓库大小&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;git reflog expire --expire=now --all&#10;git gc --prune=now --aggressive&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;然后重新 push（第一次 push 分支）&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;git push --set-upstream origin lite-AlmaLinux&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="防止此类问题"&gt;防止此类问题&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;优化 .gitignore， 比如&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-gitignore" data-lang="gitignore"&gt;# 忽略大文件&#10;*.tar.gz&#10;&lt;/code&gt;&lt;/pre&gt;然后&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;git add .gitignore&#10;git commit -m &amp;#34;update: ignore tar.gz files&amp;#34;&#10;git push&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>GitHub 项目版本管理规范</title><link>https://www.leanku.com/post/projectmanagement/github-%E9%A1%B9%E7%9B%AE%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E8%A7%84%E8%8C%83/</link><pubDate>Fri, 11 Apr 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/projectmanagement/github-%E9%A1%B9%E7%9B%AE%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E8%A7%84%E8%8C%83/</guid><description>&lt;h1 id="github-项目版本管理规范"&gt;GitHub 项目版本管理规范&lt;/h1&gt;&#10;&lt;p&gt;Git 标签（Tags）和 发布（Releases）&#10;在 GitHub 项目中定义和管理版本，通常结合 Git 标签（Tags）、发布（Releases） 和 语义化版本（SemVer） 来实现。以下是具体方法和最佳实践：&lt;/p&gt;&#10;&lt;h2 id="1-使用-git-标签tags定义版本"&gt;1. 使用 Git 标签（Tags）定义版本&lt;/h2&gt;&#10;&lt;h3 id="1创建版本标签"&gt;（1）创建版本标签&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建轻量标签&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;git tag v1.0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建附注标签（推荐，包含提交信息和签名）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;git tag -a v1.0.0 -m &lt;span class="s2"&gt;&amp;#34;Release version 1.0.0&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 推送标签到 GitHub&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;git push origin v1.0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2语义化版本semver"&gt;（2）语义化版本（SemVer）&lt;/h3&gt;&#10;&lt;p&gt;版本号格式：MAJOR.MINOR.PATCH&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;MAJOR：不兼容的 API 变更&lt;/li&gt;&#10;&lt;li&gt;MINOR：向后兼容的功能新增&lt;/li&gt;&#10;&lt;li&gt;PATCH：向后兼容的问题修复&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;示例：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;v1.0.0：初始稳定版本&lt;/li&gt;&#10;&lt;li&gt;v1.2.3：第 1 个大版本，第 2 次功能更新，第 3 次补丁&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="2-通过-github-releases-管理版本"&gt;2. 通过 GitHub Releases 管理版本&lt;/h2&gt;&#10;&lt;h3 id="1手动创建-release"&gt;（1）手动创建 Release&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;进入 GitHub 仓库 → Releases → Draft a new release&lt;/p&gt;</description></item><item><title>Git提交日志规范指南</title><link>https://www.leanku.com/post/projectmanagement/git%E6%8F%90%E4%BA%A4%E6%97%A5%E5%BF%97%E8%A7%84%E8%8C%83%E6%8C%87%E5%8D%97/</link><pubDate>Sun, 02 Apr 2023 21:46:01 +0800</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E6%8F%90%E4%BA%A4%E6%97%A5%E5%BF%97%E8%A7%84%E8%8C%83%E6%8C%87%E5%8D%97/</guid><description>&lt;p&gt;在软件开发流程中，Git已经成为版本控制的事实标准。每次提交代码都需要填写commit message，否则不允许提交。然而，在日常开发中，我们经常会看到各种各样模糊不清的提交信息，如“fix bug”、“更新代码”、“修改问题”等。这些不规范的commit message充斥在git history中，导致后续维护人员无法快速定位问题，有时甚至连提交者自己都不记得某次提交的目的。因此，我们需要一套&lt;strong&gt;统一的规范来管理和约束commit message&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="规范概述"&gt;规范概述&lt;/h2&gt;&#10;&lt;p&gt;目前业界最知名的规范是&lt;strong&gt;Angular团队的commit message规范&lt;/strong&gt;，它结构清晰、易于实施，已被广泛应用于开源项目和商业项目中。同时，许多IDE（如IntelliJ IDEA）也提供了相应的插件（如Git Commit Template）来辅助开发者遵循这一规范。&lt;/p&gt;&#10;&lt;p&gt;本文将以Angular规范为基础，详细介绍一套通用的Git commit message规范，并提供具体的操作示例。&lt;/p&gt;&#10;&lt;h2 id="commit-message整体结构"&gt;Commit Message整体结构&lt;/h2&gt;&#10;&lt;p&gt;规范的commit message包含三个部分：&lt;strong&gt;Header&lt;/strong&gt;、&lt;strong&gt;Body&lt;/strong&gt;和&lt;strong&gt;Footer&lt;/strong&gt;。其格式如下：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;header&amp;gt;&#10;&amp;lt;BLANK LINE&amp;gt;&#10;&amp;lt;body&amp;gt;&#10;&amp;lt;BLANK LINE&amp;gt;&#10;&amp;lt;footer&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;重要说明&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Header是必需的&lt;/strong&gt;，包含type、scope和summary三个子元素&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Body是必需的&lt;/strong&gt;，用于详细描述提交内容&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Footer是可选的&lt;/strong&gt;，用于记录不兼容变更或关闭issue&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;关键规则&lt;/strong&gt;：Header和Body之间必须有一个空行分隔，这是许多Git工具正确解析提交信息的前提。&lt;/p&gt;&#10;&lt;h3 id="整体结构示例"&gt;整体结构示例&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;feat(用户认证): 增加短信验证码登录功能&#10;&#10;为了提升用户登录体验，增加了通过手机号接收验证码进行登录的方式。&#10;- 集成阿里云短信服务&#10;- 新增验证码生成与校验逻辑&#10;- 更新登录页面UI&#10;&#10;Closes #245&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="header详解"&gt;Header详解&lt;/h2&gt;&#10;&lt;p&gt;Header是commit message的“标题”，格式为：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;type&amp;gt;(&amp;lt;scope&amp;gt;): &amp;lt;summary&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其中，&lt;strong&gt;type和summary为必填项，scope为可选项&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="type提交类别"&gt;Type：提交类别&lt;/h3&gt;&#10;&lt;p&gt;Type用于说明本次提交的类别，必须使用以下标准化标识之一：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;使用场景&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;feat&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;新功能&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;新增用户可见的功能特性&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;fix&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;修复bug&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;修复线上或测试环境发现的缺陷&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;docs&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;文档更新&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;仅修改文档，不涉及代码变更&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;style&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;代码格式&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不影响代码运行的格式调整（空格、缩进、分号等）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;refactor&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;代码重构&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;既不是新增功能，也不是修复bug的代码结构调整&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;perf&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;性能优化&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;提升系统性能或用户体验的代码变更&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;test&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;测试相关&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;新增或修改测试用例&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;chore&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;构建/工具变动&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;构建流程、依赖管理、辅助工具等变更&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;revert&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;回滚提交&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;撤销之前的某次提交&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;Type使用示例&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>项目规范指南</title><link>https://www.leanku.com/post/projectmanagement/%E9%A1%B9%E7%9B%AE%E8%A7%84%E8%8C%83%E6%8C%87%E5%8D%97/</link><pubDate>Sat, 01 Apr 2023 21:46:01 +0800</pubDate><guid>https://www.leanku.com/post/projectmanagement/%E9%A1%B9%E7%9B%AE%E8%A7%84%E8%8C%83%E6%8C%87%E5%8D%97/</guid><description>&lt;h1 id="项目规范指南"&gt;项目规范指南&lt;/h1&gt;&#10;&lt;p&gt;本规范适用于团队/开源项目的版本管理，目标是做到：规范化、可追踪、可溯源。&lt;/p&gt;&#10;&lt;h2 id="1-版本管理-versioning"&gt;1. 版本管理 (Versioning)&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;遵循 语义化版本规范 (Semantic Versioning, SemVer 2.0.0)&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;MAJOR.MINOR.PATCH&#10;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;MAJOR&lt;/strong&gt;：主版本号，不兼容的 API 改动&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;MINOR&lt;/strong&gt;：次版本号，新增功能（向下兼容）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;PATCH&lt;/strong&gt;：修订号，修复 bug（向下兼容）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面，作为延伸。&lt;/li&gt;&#10;&lt;li&gt;预发布版本：&lt;code&gt;1.0.0-alpha.1&lt;/code&gt;、&lt;code&gt;2.0.0-rc.1&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;参考语义化版本规范&lt;/strong&gt;：&lt;a href="https://semver.org/lang/zh-CN/"&gt;https://semver.org/lang/zh-CN/&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="2-license-mit"&gt;2. LICENSE (MIT)&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;作用&lt;/strong&gt;：MIT，明确版权&lt;/p&gt;&#10;&lt;h3 id="规范"&gt;规范&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;项目必须包含 &lt;code&gt;LICENSE&lt;/code&gt; 文件，放置于项目根目录。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;推荐使用 &lt;strong&gt;MIT License&lt;/strong&gt;（宽松、常用，几乎所有开源项目可接受）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;文件名统一：&lt;code&gt;LICENSE&lt;/code&gt;（不要写成 &lt;code&gt;LICENSE.txt&lt;/code&gt; 或 &lt;code&gt;license.md&lt;/code&gt;）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在 &lt;code&gt;README.md&lt;/code&gt; 中需明确说明 License 类型。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="示例"&gt;示例&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;LICENSE&lt;/code&gt; 文件（MIT）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;MIT License&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;Copyright (c) 2025 Your Name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;Permission is hereby granted, free of charge, to any person obtaining a copy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;of this software and associated documentation files (the &amp;#34;Software&amp;#34;), to deal&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-readmemd"&gt;3. README.md&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;作用&lt;/strong&gt;：项目介绍 + 使用 + License&lt;/p&gt;</description></item><item><title>Git创建不继承内容的新分支</title><link>https://www.leanku.com/post/projectmanagement/git%E5%88%9B%E5%BB%BA%E4%B8%8D%E7%BB%A7%E6%89%BF%E5%86%85%E5%AE%B9%E7%9A%84%E6%96%B0%E5%88%86%E6%94%AF/</link><pubDate>Sun, 26 Feb 2023 19:46:01 +0800</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E5%88%9B%E5%BB%BA%E4%B8%8D%E7%BB%A7%E6%89%BF%E5%86%85%E5%AE%B9%E7%9A%84%E6%96%B0%E5%88%86%E6%94%AF/</guid><description>&lt;h1 id="git创建不继承内容的新分支方法"&gt;Git创建不继承内容的新分支方法&lt;/h1&gt;&#10;&lt;p&gt;在 Git 中，想创建一个新的分支，并且不想要当前分支的任何内容（即希望新分支是完全干净的，不包含当前分支的修改或提交），可以按照以下步骤操作：&lt;/p&gt;&#10;&lt;h2 id="方法-1基于远程默认分支如-mainmaster创建新分支"&gt;方法 1：基于远程默认分支（如 main/master）创建新分支&lt;/h2&gt;&#10;&lt;p&gt;如果你希望新分支是基于远程仓库的默认分支（而不是当前分支），可以这样做：&#10;```&#10;# 1. 确保本地没有未提交的修改（否则会提示你提交或暂存）&#10;git status&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;# 2. 拉取远程最新代码（确保本地默认分支是最新的）&#10;git fetch origin&#10;&#10;# 3. 基于远程默认分支（如 origin/main）创建新分支&#10;git checkout -b 新分支名 origin/main&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="方法-2基于某个提交或分支创建全新分支"&gt;方法 2：基于某个提交或分支创建全新分支&lt;/h2&gt;&#10;&lt;p&gt;如果你想基于某个特定的提交（而不是当前分支）创建新分支：&#10;```&#10;# 1. 先切换到目标分支或提交（例如切换到 main 分支）&#10;git checkout main&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;# 2. 拉取最新代码（可选）&#10;git pull origin main&#10;&#10;# 3. 创建并切换到新分支&#10;git checkout -b 新分支名&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="方法-3强制创建孤立分支完全无历史"&gt;方法 3：强制创建孤立分支（完全无历史）&lt;/h2&gt;&#10;&lt;p&gt;如果你想创建一个完全独立的新分支（不继承任何历史）：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在切换分支之前，确保你没有未提交的修改，否则 Git 可能会尝试携带这些修改到新分支：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;git status&#10;&#10;# 提交他们&#10;git add .&#10;git commit -m &amp;#34;暂存当前修改&amp;#34;&#10;&#10;# 或者丢弃它们&#10;git reset --hard # 强制丢弃所有未提交的修改&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;创建一个完全独立的新分支（不继承任何历史）&lt;/p&gt;</description></item><item><title>Git历史重置</title><link>https://www.leanku.com/post/projectmanagement/git%E5%8E%86%E5%8F%B2%E9%87%8D%E7%BD%AE/</link><pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E5%8E%86%E5%8F%B2%E9%87%8D%E7%BD%AE/</guid><description>&lt;h1 id="git历史重置"&gt;Git历史重置&lt;/h1&gt;&#10;&lt;p&gt;有时候需要克隆github的项目使用，自己进行修改需要提交到自己的代码仓库，但是会包含前仓库的大量提交历史，看起来不方便，就需要清理历史记录并重置为一个全新的提交&lt;/p&gt;&#10;&lt;h2 id="新项目如git-clone-的项目"&gt;新项目（如git clone 的项目）&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 进入项目目录&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; template-repo-master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 删除原有的.git目录（如果存在）初始化全新的Git仓库&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;rm -rf .git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;git init&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;git add .&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s2"&gt;&amp;#34;Initial commit from template&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;git remote add origin git@github.com:your-username/your-new-repo.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;git push -u origin master --force&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已经将代码推送到自己的远程仓库-清理历史记录并重置为一个全新的提交"&gt;已经将代码推送到自己的远程仓库 清理历史记录并重置为一个全新的提交&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 克隆你的远程仓库（可选）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;git clone git@github.com:your-username/your-repo.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; your-repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2.创建孤立分支（全新的历史起点）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;git checkout --orphan new-branch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 添加所有文件到新分支&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;git add -A&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s2"&gt;&amp;#34;Initial commit (cleaned history)&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#4. 删除旧的主分支&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;git branch -D master &lt;span class="c1"&gt;# 或 main&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 5. 重命名新分支为主分支&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;git branch -m master &lt;span class="c1"&gt;# 或 main&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 6. 强制推送到远程仓库&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;git push -f origin master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 7. 更新远程仓库设置（如有必要）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;git branch --set-upstream-to&lt;span class="o"&gt;=&lt;/span&gt;origin/master master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 检查提交历史应该只显示你的&amp;#34;Initial commit&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;git log --oneline&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git同时配置github和gitee</title><link>https://www.leanku.com/post/projectmanagement/git%E5%90%8C%E6%97%B6%E9%85%8D%E7%BD%AEgithub%E5%92%8Cgitee/</link><pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E5%90%8C%E6%97%B6%E9%85%8D%E7%BD%AEgithub%E5%92%8Cgitee/</guid><description>&lt;h1 id="git同时配置github和gitee"&gt;Git同时配置github和gitee&lt;/h1&gt;&#10;&lt;h2 id="想要同时使用github和gitee但是每次输入密码就会很麻烦为此本文将介绍-git同时配置github和gitee的ssh-key"&gt;想要同时使用GitHub和Gitee，但是每次输入密码就会很麻烦。为此，本文将介绍 Git 同时配置 &lt;strong&gt;github&lt;/strong&gt;和 &lt;strong&gt;gitee&lt;/strong&gt; 的ssh key&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#查看git配置&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;git config --global --list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#没配置过的话先配置用户名和邮箱信息&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;git config --global user.name “username”&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;git config --global user.email “email”&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#默认没有.ssh目录，&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;ssh-keygen -t rsa -C &lt;span class="s2"&gt;&amp;#34;xxxxxxx@xx.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#在windows下会生成.ssh目录 [c盘/用户/用户名/.ssh]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="1--查看ssh文件"&gt;1. 查看ssh文件&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.ssh**  &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2--删除之前的ssh"&gt;2. 删除之前的.ssh&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt; rm -rf id_rsa id_rsa.pub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-生成gitee和github-的-ssh-key"&gt;3. 生成gitee和github 的 SSH Key&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;ssh-keygen -t rsa -C &lt;span class="s2"&gt;&amp;#34;xxxxxxx@xx.com&amp;#34;&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;id_rsa_github&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;ssh-keygen -t rsa -C &lt;span class="s2"&gt;&amp;#34;xxxxxxx@xx.com&amp;#34;&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;id_rsa_gitee&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="4-查看ssh-key"&gt;4. 查看SSH Key&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;cat id_rsa_github.pub**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5-拷贝-ssh-rsa-开头的-ssh-key然后到github上添加ssh-key"&gt;5. 拷贝 ssh-rsa 开头的 ssh key，然后到github上添加ssh key&lt;/h3&gt;&#10;&lt;h3 id="6-添加-config解决ssh冲突"&gt;6. 添加 config解决ssh冲突&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;vim config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 文件类容如下&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# gitee&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;Host gitee.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;HostName gitee.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;PreferredAuthentications publickey&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;IdentityFile ~/.ssh/id_rsa_gitee&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# github&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;Host github.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;HostName github.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;PreferredAuthentications publickey&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;IdentityFile ~/.ssh/id_rsa_github&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="7-测试是否配置成功"&gt;7. 测试是否配置成功&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;ssh -T git@gitee.com &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;ssh -T git@github.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置成功 正常会输出如下&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;Hi leanku! You&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;ve successfully authenticated, but GitHub does not provide shell access.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="8-已经配置了-ssh-密钥但在-git-push-时仍然要求输入用户名和密码"&gt;8. 已经配置了 SSH 密钥，但在 git push 时仍然要求输入用户名和密码&lt;/h3&gt;&#10;&lt;p&gt;检查远程 URL,如果显示 https://&amp;hellip;，说明 Git 仍然在使用 HTTPS 方式。&lt;/p&gt;</description></item><item><title>Git版本升级</title><link>https://www.leanku.com/post/projectmanagement/git%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/projectmanagement/git%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7/</guid><description>&lt;p&gt;使用 &lt;a href="https://brew.sh/"&gt;Brew&lt;/a&gt; 对Mac系统Git进行版本升级&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#安装最新的Git&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;➜ ~ brew install git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#改变默认Git指向&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;➜ ~ which git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#/usr/bin/git&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;➜ ~ git --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#git version 2.24.1 (Apple Git-126)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;➜ ~ brew link git --overwrite&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#新开终端查看版本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;➜ ~ git version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#git version 2.38.1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以看到，我们的 git 版本已经升级到最新版了&lt;/p&gt;</description></item></channel></rss>