<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on Dapeng Zhang</title><link>https://zhangdapeng.dev/tags/git/</link><description>Recent content in Git on Dapeng Zhang</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 14 Jul 2025 16:22:14 +0000</lastBuildDate><atom:link href="https://zhangdapeng.dev/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>Git warning 提示记录</title><link>https://zhangdapeng.dev/p/git-warning-ti-shi-ji-lu/</link><pubDate>Mon, 14 Jul 2025 16:22:14 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-warning-ti-shi-ji-lu/</guid><description>&lt;p&gt;git version 2.28.0&lt;/p&gt;
&lt;p&gt;出现问题时执行的命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git pull origin master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;warning提示如下&lt;/p&gt;
&lt;p&gt;warning: 不建议在没有为偏离分支指定合并策略时执行 pull 操作。 您可以在执行下一次&lt;br&gt;
pull 操作之前执行下面一条命令来抑制本消息：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git config pull.rebase false # 合并（缺省策略）&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git config pull.rebase true # 变基&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git config pull.ff only # 仅快进&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;您可以将 &amp;ldquo;git config&amp;rdquo; 替换为 &amp;ldquo;&lt;code&gt;git config --global&lt;/code&gt;&amp;rdquo; 以便为所有仓库设置&lt;br&gt;
缺省的配置项。您也可以在每次执行 pull 命令时添加 &amp;ndash;rebase、&amp;ndash;no-rebase，&lt;br&gt;
或者 &amp;ndash;ff-only 参数覆盖缺省设置。&lt;/p&gt;</description></item><item><title>Git gc的作用以及如何删除仓库中错误的大文件</title><link>https://zhangdapeng.dev/p/git-gc-de-zuo-yong-yi-ji-ru-he-shan-chu-cang-ku-zhong-cuo-wu-de-da-wen-jian/</link><pubDate>Mon, 14 Jul 2025 14:45:18 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-gc-de-zuo-yong-yi-ji-ru-he-shan-chu-cang-ku-zhong-cuo-wu-de-da-wen-jian/</guid><description>&lt;p&gt;之前对&lt;code&gt;gc&lt;/code&gt;一直不了解，这玩意是个bug吧&lt;/p&gt;
&lt;p&gt;为什么&lt;code&gt;git pull&lt;/code&gt;的时候会出现一个&lt;code&gt;git gc&lt;/code&gt;的命令，还提示我可以自己运行&lt;/p&gt;
&lt;p&gt;回忆下，第一次遇到这个问题的时候就是这个状态，然后就一直没理会&lt;/p&gt;
&lt;p&gt;最近测试服务器部署代码的时候，经常会遇到这个命令在执行&lt;/p&gt;
&lt;p&gt;于是搜搜了下，才发现这个命令是对大文件进行压缩的&lt;/p&gt;
&lt;p&gt;同时如果出现这个命令的执行或者提示你让你去执行这个gc的命令&lt;/p&gt;
&lt;p&gt;说明你的项目真的很大了&lt;/p&gt;
&lt;p&gt;或者说明你的项目存在非常大的文件&lt;/p&gt;
&lt;p&gt;原理就是压缩了下，创建了一个包文件和一个索引文件，方便后面更快的对文件的更改进行对比（&lt;code&gt;diff&lt;/code&gt;）操作，不然文件很大的话读取再对比其实是很慢的，这样可以理解的通透了&lt;/p&gt;
&lt;p&gt;另外需要对git的原理有更多的理解&lt;/p&gt;
&lt;p&gt;就是我们每次对一个文件进行更改的时候&lt;code&gt;git&lt;/code&gt;都会生成一个全新的对象来存储新的文件内容。&lt;/p&gt;
&lt;p&gt;推荐一篇文章，&lt;a class="link" href="https://www.jianshu.com/p/7231b509c279" target="_blank" rel="noopener"
 &gt;点这里&lt;/a&gt;，具体介绍了如何删除大文件，同时对&lt;code&gt;git gc&lt;/code&gt;有更详细的了解&lt;/p&gt;</description></item><item><title>Git-flow 工作流程</title><link>https://zhangdapeng.dev/p/git-flow-gong-zuo-liu-cheng/</link><pubDate>Fri, 11 Jul 2025 11:16:06 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-flow-gong-zuo-liu-cheng/</guid><description>&lt;h2 id="git-flow-工作流程"&gt;git-flow 工作流程
&lt;/h2&gt;&lt;p&gt;当在团队开发中使用版本控制系统时，商定一个统一的工作流程是至关重要的。Git 的确可以在各个方面做很多事情，然而，如果在你的团队中还没有能形成一个特定有效的工作流程，那么混乱就将是不可避免的。&lt;/p&gt;
&lt;p&gt;基本上你可以定义一个完全适合你自己项目的工作流程，或者使用一个别人定义好的。&lt;/p&gt;
&lt;h2 id="什么是git-flow"&gt;什么是git-flow
&lt;/h2&gt;&lt;p&gt;一旦安装 git-flow，你将会拥有一些扩展命令。这些命令会在一个预定义的顺序下自动执行多个操作。是的，这就是我们的工作流程！&lt;/p&gt;
&lt;p&gt;git-flow 并不是要替代 Git，它仅仅是非常聪明有效地把标准的 Git 命令用脚本组合了起来。&lt;/p&gt;
&lt;p&gt;严格来讲，你并不需要安装什么特别的东西就可以使用 git-flow 工作流程。你只需要了解，哪些工作流程是由哪些单独的任务所组成的，并且附带上正确的参数，以及在一个正确的顺序下简单执行那些对应的 Git 命令就可以了。当然，如果你使用 git-flow 脚本就会更加方便了，你就不需要把这些命令和顺序都记在脑子里&lt;/p&gt;
&lt;h2 id="安装git-flow"&gt;安装git-flow
&lt;/h2&gt;&lt;p&gt;近些年来出现了很多不同的安装方法。在本章节中我们会使用当前最流行的一种： &lt;a class="link" href="https://github.com/petervanderdoes/gitflow/" target="_blank" rel="noopener"
 &gt;AVH Edition&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;要了解安装 git-flow 细节，请阅读下面这个文档 &lt;a class="link" href="https://github.com/petervanderdoes/gitflow/wiki#installing-git-flow" target="_blank" rel="noopener"
 &gt;official documentation&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="在项目中设置-git-flow"&gt;在项目中设置 git-flow
&lt;/h2&gt;&lt;p&gt;当你想把你的项目 “切换” 到 git-flow 上后，Git 还是可以像往常一样工作的。这完全是取决于你在仓库上使用特殊的 git-flow 命令或是普通的 Git 命令。换句话说，git-flow 它不会以任何一种戏剧性的方式来改变你的仓库。&lt;/p&gt;
&lt;p&gt;话虽如此，git-flow 却存在一些限制。让我们开始在一个新的项目上初始化它吧，之后我们就会有所发现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git flow init
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Initialized empty Git repository in /Users/xxx/xxx-website/.git/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Branch name &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; production releases: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;master&lt;span style="color:#f92672"&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Branch name &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;next release&amp;#34;&lt;/span&gt; development: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;develop&lt;span style="color:#f92672"&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;How to name your supporting branch prefixes?
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Feature branches? &lt;span style="color:#f92672"&gt;[&lt;/span&gt;feature/&lt;span style="color:#f92672"&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Release branches? &lt;span style="color:#f92672"&gt;[&lt;/span&gt;release/&lt;span style="color:#f92672"&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hotfix branches? &lt;span style="color:#f92672"&gt;[&lt;/span&gt;hotfix/&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当在项目的根目录执行 “git flow init” 命令时（它是否已经包括了一个 Git 仓库并不重要），一个交互式安装助手将引导您完成这个初始化操作。听起来有点炫，但实际上它只是在你的分支上配置了一些命名规则。 尽管如此，这个安装助手还是允许你使用自己喜欢的名字。我强烈建议你使用默认的命名机制，并且一步一步地确定下去。&lt;/p&gt;
&lt;h2 id="分支的模式"&gt;分支的模式
&lt;/h2&gt;&lt;p&gt;git-flow 模式会预设两个主分支在仓库中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;master 只能用来包括产品代码。你不能直接工作在这个 master 分支上，而是在其他指定的，独立的特性分支中（这方面我们会马上谈到）。不直接提交改动到 master 分支上也是很多工作流程的一个共同的规则。&lt;/li&gt;
&lt;li&gt;develop 是你进行任何新的开发的基础分支。当你开始一个新的功能分支时，它将是_开发_的基础。另外，该分支也汇集所有已经完成的功能，并等待被整合到 master 分支中。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="master" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.git-tower.com/learn/media/pages/git/ebook/cn/command-line/advanced-topics/git-flow/1637630691-1594909678/01-master-develop.png"&gt;&lt;/p&gt;
&lt;p&gt;这两个分支被称作为 长期分支。它们会存活在项目的整个生命周期中。而其他的分支，例如针对功能的分支，针对发行的分支，仅仅只是临时存在的。它们是根据需要来创建的，当它们完成了自己的任务之后就会被删除掉。&lt;/p&gt;
&lt;p&gt;&lt;img alt="长期分支" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.git-tower.com/learn/media/pages/git/ebook/cn/command-line/advanced-topics/git-flow/2144379591-1594909678/02-features-hotfix.png"&gt;&lt;/p&gt;
&lt;p&gt;让我们开始探索一些在现实应用中可能遇到的案例吧！&lt;/p&gt;
&lt;h2 id="功能开发"&gt;功能开发
&lt;/h2&gt;&lt;p&gt;对于一个开发人员来说，最平常的工作可能就是功能的开发。这就是为什么 git-flow 定义了很多对于功能开发的工作流程，从而来帮助你有组织地完成它。&lt;/p&gt;
&lt;h2 id="开始新功能"&gt;开始新功能
&lt;/h2&gt;&lt;p&gt;让我们开始开发一个新功能 “rss-feed”：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git flow feature start rss-feed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Switched to a new branch &lt;span style="color:#e6db74"&gt;&amp;#39;feature/rss-feed&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Summary of actions:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- A new branch &lt;span style="color:#e6db74"&gt;&amp;#39;feature/rss-feed&amp;#39;&lt;/span&gt; was created, based on &lt;span style="color:#e6db74"&gt;&amp;#39;develop&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- You are now on branch &lt;span style="color:#e6db74"&gt;&amp;#39;feature/rss-feed&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;正如上面这个新功能一样，git-flow 会创建一个名为 “feature/rss-feed” 的分支（这个 “feature/” 前缀 是一个可配置的选项设置）。你已经知道了，在你做新功能开发时使用一个独立的分支是版本控制中最重要的规则之一。 git-flow 也会直接签出这个新的分支，这样你就可以直接进行工作了。&lt;/p&gt;
&lt;h2 id="完成一个功能"&gt;完成一个功能
&lt;/h2&gt;&lt;p&gt;经过一段时间艰苦地工作和一系列的聪明提交，我们的新功能终于完成了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git flow feature finish rss-feed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Switched to branch &lt;span style="color:#e6db74"&gt;&amp;#39;develop&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Updating 6bcf266..41748ad
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Fast-forward
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; feed.xml | &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; file changed, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; insertions&lt;span style="color:#f92672"&gt;(&lt;/span&gt;+&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; deletions&lt;span style="color:#f92672"&gt;(&lt;/span&gt;-&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; create mode &lt;span style="color:#ae81ff"&gt;100644&lt;/span&gt; feed.xml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Deleted branch feature/rss-feed &lt;span style="color:#f92672"&gt;(&lt;/span&gt;was 41748ad&lt;span style="color:#f92672"&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最重要的是，这个 “feature finish” 命令会把我们的工作整合到主 “develop” 分支中去。在这里它需要等待：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个在更广泛的 “开发” 背景下的全面测试。&lt;/li&gt;
&lt;li&gt;稍后和所有积攒在 “develop” 分支中的其它功能一起进行发布。 之后，git-flow 也会进行清理操作。它会删除这个当下已经完成的功能分支，并且换到 “develop” 分支。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="管理-releases"&gt;管理 releases
&lt;/h2&gt;&lt;p&gt;Release 管理是版本控制处理中的另外一个非常重要的话题。让我们来看看如何利用 git-flow 创建和发布 release。&lt;/p&gt;
&lt;h2 id="创建-release"&gt;创建 release
&lt;/h2&gt;&lt;p&gt;当你认为现在在 “develop” 分支的代码已经是一个成熟的 release 版本时，这意味着：第一，它包括所有新的功能和必要的修复；第二，它已经被彻底的测试过了。如果上述两点都满足，那就是时候开始生成一个新的 release 了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git flow release start 1.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Switched to a new branch &lt;span style="color:#e6db74"&gt;&amp;#39;release/1.1.5&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;请注意，release 分支是使用版本号命名的。这是一个明智的选择，这个命名方案还有一个很好的附带功能，那就是当我们完成了release 后，git-flow 会适当地_自动_去标记那些 release 提交。&lt;/p&gt;
&lt;p&gt;有了一个 release 分支，再完成针对 release 版本号的最后准备工作（如果项目里的某些文件需要记录版本号），并且进行最后的编辑。&lt;/p&gt;
&lt;h2 id="完成-release"&gt;完成 release
&lt;/h2&gt;&lt;p&gt;现在是时候按下那个危险的红色按钮来完成我们的release了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git flow release finish 1.1.5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个命令会完成如下一系列的操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先，git-flow 会拉取远程仓库，以确保目前是最新的版本。&lt;/li&gt;
&lt;li&gt;然后，release 的内容会被合并到 “master” 和 “develop” 两个分支中去，这样不仅产品代码为最新的版本，而且新的功能分支也将基于最新代码。&lt;/li&gt;
&lt;li&gt;为便于识别和做历史参考，release 提交会被标记上这个 release 的名字（在我们的例子里是 “1.1.5”）。&lt;/li&gt;
&lt;li&gt;清理操作，版本分支会被删除，并且回到 “develop”。 从 Git 的角度来看，release 版本现在已经完成。依据你的设置，对 “master” 的提交可能已经触发了你所定义的部署流程，或者你可以通过手动部署，来让你的软件产品进入你的用户手中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="hotfix"&gt;hotfix
&lt;/h2&gt;&lt;p&gt;很多时候，仅仅在几个小时或几天之后，当对 release 版本作做全面测试时，可能就会发现一些小错误。 在这种情况下，git-flow 提供一个特定的 “hotfix” 工作流程（因为在这里不管使用 “功能” 分支流程，还是 “release” 分支流程都是不恰当的）。&lt;/p&gt;
&lt;h2 id="创建-hotfixes"&gt;创建 Hotfixes
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git flow hotfix start missing-link
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个命令会创建一个名为 “hotfix/missing-link” 的分支。因为这是对产品代码进行修复，所以这个 hotfix 分支是基于 “master” 分支。 这也是和 release 分支最明显的区别，release 分支都是基于 “develop” 分支的。因为你不应该在一个还不完全稳定的开发分支上对产品代码进行地修复。&lt;/p&gt;
&lt;p&gt;就像 release 一样，修复这个错误当然也会直接影响到项目的版本号！&lt;/p&gt;
&lt;h2 id="完成-hotfixes"&gt;完成 Hotfixes
&lt;/h2&gt;&lt;p&gt;在把我们的修复提交到 hotfix 分支之后，就该去完成它了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git flow hotfix finish missing-link
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个过程非常类似于发布一个 release 版本：&lt;/p&gt;
&lt;p&gt;完成的改动会被合并到 “master” 中，同样也会合并到 “develop” 分支中，这样就可以确保这个错误不会再次出现在下一个 release 中。 这个 hotfix 程序将被标记起来以便于参考。 这个 hotfix 分支将被删除，然后切换到 “develop” 分支上去。 还是和产生 release 的流程一样，现在需要编译和部署你的产品（如果这些操作不是自动被触发的话）。&lt;/p&gt;
&lt;p&gt;原文地址：https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow&lt;/p&gt;</description></item><item><title>代理 - 终端和Git使用如何代理</title><link>https://zhangdapeng.dev/p/dai-li-zhong-duan-he-git-shi-yong-ru-he-dai-li/</link><pubDate>Thu, 03 Jul 2025 17:37:24 +0000</pubDate><guid>https://zhangdapeng.dev/p/dai-li-zhong-duan-he-git-shi-yong-ru-he-dai-li/</guid><description>&lt;h2 id="git"&gt;GIT
&lt;/h2&gt;&lt;p&gt;设置HTTP协议&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;socks5方式&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global http.proxy &lt;span style="color:#e6db74"&gt;&amp;#39;socks5://127.0.0.1:1080&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global https.proxy &lt;span style="color:#e6db74"&gt;&amp;#39;socks5://127.0.0.1:1080&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;http方式&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global http.proxy &lt;span style="color:#e6db74"&gt;&amp;#34;http://127.0.0.1:6667&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global https.proxy &lt;span style="color:#e6db74"&gt;&amp;#34;http://127.0.0.1:6667&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;取消设置&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global --unset http.proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global --unset https.proxy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;设置SSH协议&lt;/p&gt;
&lt;p&gt;创建文件 ~/.ssh/config 【如果存在可忽略】&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host bitbucket.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	User git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	HostName altssh.bitbucket.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	Port &lt;span style="color:#ae81ff"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	ProxyCommand connect -S 127.0.0.1:1080 %h %p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host github.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	User git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	HostName ssh.github.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	Port &lt;span style="color:#ae81ff"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 	ProxyCommand connect -S 127.0.0.1:1080 %h %p%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="终端-terminal"&gt;终端 terminal
&lt;/h2&gt;&lt;p&gt;打开终端执行下面命令即可，无须重启终端&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export http_proxy&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;socks5://127.0.0.1:1080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export https_proxy&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;socks5://127.0.0.1:1080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;设置完后 执行下面命令查看自己的IP&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -i http://ip.cn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有个问题就是设置完代理，上面的命令无法测试自己的IP了，应该是这个地址也同时被墙了。&lt;/p&gt;
&lt;p&gt;参考：https://blog.kelu.org/tech/2017/06/19/setting-socks5-proxy.html&lt;/p&gt;</description></item><item><title>Git 之 ssh config 加速clone仓库代码</title><link>https://zhangdapeng.dev/p/git-zhi-ssh-config-jia-su-clone-cang-ku-dai-ma/</link><pubDate>Thu, 03 Jul 2025 16:50:12 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-zhi-ssh-config-jia-su-clone-cang-ku-dai-ma/</guid><description>&lt;p&gt;代码记录如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host github.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; User git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Hostname ssh.github.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Port &lt;span style="color:#ae81ff"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ProxyCommand connect -S 127.0.0.1:1180 %h %p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host bitbucket.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; User git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Hostname altssh.bitbucket.org
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Port &lt;span style="color:#ae81ff"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ProxyCommand connect -S 127.0.0.1:1180 %h %p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;操作方式是这里用到了connect 这个功能，所以为了为了使用这个功能，前提是安装connect&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install connect
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git 之 用socks5加速git clone</title><link>https://zhangdapeng.dev/p/git-zhi-yong-socks5-jia-su-git-clone/</link><pubDate>Thu, 03 Jul 2025 16:50:08 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-zhi-yong-socks5-jia-su-git-clone/</guid><description>&lt;p&gt;需要使用github，但是国内访问很慢，往往会发生connection refused的事情发生，那就自己去弄个vpn吧。前提不要做扰乱国家安稳的事情&lt;/p&gt;
&lt;p&gt;下面记录下git的配置方法&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global http.proxy &lt;span style="color:#e6db74"&gt;&amp;#39;socks5://127.0.0.1:1080&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global https.proxy &lt;span style="color:#e6db74"&gt;&amp;#39;socks5://127.0.0.1:1080&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Mac 之 git mergetool的安装使用</title><link>https://zhangdapeng.dev/p/mac-zhi-git-mergetool-de-an-zhuang-shi-yong/</link><pubDate>Thu, 03 Jul 2025 11:58:29 +0000</pubDate><guid>https://zhangdapeng.dev/p/mac-zhi-git-mergetool-de-an-zhuang-shi-yong/</guid><description>&lt;p&gt;git mergetool 工具安装&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install meld 或 brew install homebrew/gui/meld
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global merge.tool meld
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git mergetool
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git查看某个文件的修改历史</title><link>https://zhangdapeng.dev/p/git-cha-kan-mou-ge-wen-jian-de-xiu-gai-li-shi/</link><pubDate>Thu, 03 Jul 2025 11:07:47 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-cha-kan-mou-ge-wen-jian-de-xiu-gai-li-shi/</guid><description>&lt;p&gt;如何查看一个文件的修改历史记录：&lt;/p&gt;
&lt;h1 id="第一个步骤"&gt;&lt;a class="link" href="#1" &gt;第一个步骤&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;找到某个文件的修改历史&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git log --pretty&lt;span style="color:#f92672"&gt;=&lt;/span&gt;oneline ./static/js/detail.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果会列出下面的结果&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;e4f37d08ce8e9d729a824568f3a23d4eeb21ba30 恢复误删的js&lt;/p&gt;
&lt;p&gt;85e4a01822b690da8b152d780271a12d9a3b8dd9 添加 反馈详情页面&lt;/p&gt;
&lt;p&gt;0d3893c8c4f8b124ca50731f02334b70b88ebe5e 更新页面&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h1 id="第二个步骤"&gt;&lt;a class="link" href="#2" &gt;第二个步骤&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;查看具体的历史修改记录&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git show e4f37d08ce8e9d729a824568f3a23d4eeb21ba30
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果会看到如下的修改信息&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;commit e4f37d08ce8e9d729a824568f3a23d4eeb21ba30&lt;/p&gt;
&lt;p&gt;Author: durban &amp;lt;&lt;a class="link" href="https://zhangdapeng.dev/cdn-cgi/l/email-protection" &gt;xx@xx&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;Date: Mon Dec 21 11:26:20 2015 +0800&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;恢复误删的js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;diff &amp;ndash;git a/gulpfile.js b/gulpfile.js&lt;/p&gt;
&lt;p&gt;index 6563d1b..da42836 100644&lt;/p&gt;
&lt;p&gt;&amp;mdash; a/gulpfile.js&lt;/p&gt;
&lt;p&gt;+++ b/gulpfile.js&lt;/p&gt;
&lt;p&gt;@@ -78,6 +78,16 @@ gulp.task(&amp;lsquo;fonts-replace&amp;rsquo;, [&amp;lsquo;publish-fonts&amp;rsquo;], () =&amp;gt; {&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; .pipe(gulp.dest('./static/css/tmp'));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;});&lt;/p&gt;
&lt;p&gt;+gulp.task(&amp;lsquo;images-replace&amp;rsquo;, [&amp;lsquo;webpack&amp;rsquo;,&amp;lsquo;publish-images&amp;rsquo;], () =&amp;gt; {&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;return gulp.src([&amp;rsquo;./static/build/rev/images/*.json&amp;rsquo;, &amp;lsquo;./.public/js/**/*.js&amp;rsquo;])&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;.pipe(revCollector({&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt; dirReplacements: {
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt; '/images/': ''
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt; }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;}))&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;.pipe(gulp.dest(&amp;rsquo;./.public/js/**/*.js&amp;rsquo;));&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;+});&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;/blockquote&gt;
&lt;p&gt;是不是很清晰。Yeah！&lt;/p&gt;
&lt;h1 id="补充"&gt;&lt;a class="link" href="#3" &gt;补充&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;如果想查看单个文件的历史记录，也可以这样子的。&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git log -p filename
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>配置Git 使其对文件名大小写敏感</title><link>https://zhangdapeng.dev/p/pei-zhi-git-shi-qi-dui-wen-jian-ming-da-xiao-xie-min-gan/</link><pubDate>Wed, 02 Jul 2025 16:00:43 +0000</pubDate><guid>https://zhangdapeng.dev/p/pei-zhi-git-shi-qi-dui-wen-jian-ming-da-xiao-xie-min-gan/</guid><description>&lt;p&gt;执行如下代码：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config core.ignorecase false
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;另外一个问题&lt;/p&gt;
&lt;p&gt;当我们遇到文件大小写的时候，当在编辑器改完之后，提交代码，实际上仓库中并没有改变这个文件的大小写，可以通过下面的方式来修改&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git mv A B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;实例演示如下，如果我有个文件是&lt;/p&gt;
&lt;p&gt;components/StatCNZZWidget.php&lt;/p&gt;
&lt;p&gt;想要修改为&lt;/p&gt;
&lt;p&gt;components/StatCnzzWidget.php&lt;/p&gt;
&lt;p&gt;执行如下代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git mv components/StatCNZZWidget.php components/StatCnzzWidget.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当执行如下代码的时候&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;会有如下类似的输出&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;renamed: components/StatCNZZWidget.php -&amp;gt; components/StatCnzzWidget.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git拉取远程分支到本地</title><link>https://zhangdapeng.dev/p/git-la-qu-yuan-cheng-fen-zhi-dao-ben-di/</link><pubDate>Wed, 02 Jul 2025 15:39:59 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-la-qu-yuan-cheng-fen-zhi-dao-ben-di/</guid><description>&lt;p&gt;前提是远程仓库已经存在某个分支，本地并没有对应的分支【这是情景描述前提】&lt;/p&gt;
&lt;p&gt;对应的标题操作很简单，方法如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git fetch origin remote_branch:local_branch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git生成ssh key及本地解决多个ssh key的问题</title><link>https://zhangdapeng.dev/p/git-sheng-cheng-ssh-key-ji-ben-di-jie-jue-duo-ge-ssh-key-de-wen-ti/</link><pubDate>Tue, 01 Jul 2025 15:04:16 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-sheng-cheng-ssh-key-ji-ben-di-jie-jue-duo-ge-ssh-key-de-wen-ti/</guid><description>&lt;p&gt;ssh是一种网络协议，用于计算机之间的加密登录。ssh原理及应用可参考：&lt;/p&gt;
&lt;p&gt;SSH原理与运用（一）：远程登录&lt;/p&gt;
&lt;h1 id="生成ssh-key步骤"&gt;&lt;a class="link" href="#1" &gt;生成ssh key步骤&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;这里以配置github的ssh key为例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;生成ssh key&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh-keygen -t rsa -C &lt;span style="color:#e6db74"&gt;&amp;#34;邮箱&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后根据提示连续回车即可在~/.ssh目录下得到id_rsa和id_rsa.pub两个文件，id_rsa.pub文件里存放的就是我们要使用的key。&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;上传key到github&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clip &amp;lt; ~/.ssh/id_rsa.pub
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;复制key到剪贴板&lt;/p&gt;
&lt;p&gt;登录github&lt;/p&gt;
&lt;p&gt;点击右上方的Accounting settings图标&lt;/p&gt;
&lt;p&gt;选择 SSH key&lt;/p&gt;
&lt;p&gt;点击 Add SSH key&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;测试是否配置成功&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh -T xxx@xxx.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果配置成功，则会显示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="解决本地多个ssh-key问题"&gt;&lt;a class="link" href="#2" &gt;解决本地多个ssh key问题&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;有的时候，不仅github使用ssh key，工作项目或者其他云平台可能也需要使用ssh key来认证，如果每次都覆盖了原来的id_rsa文件，那么之前的认证就会失效。这个问题我们可以通过在~/.ssh目录下增加config文件来解决。&lt;/p&gt;
&lt;p&gt;下面以配置git oschina的ssh key为例。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;生成ssh key时同时指定保存的文件名,这里也可以不用指定，只需要在创建的时候根据提示修改就可以，这里使用直接指定路径文件名的方式&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh-keygen -t rsa -f ~/.ssh/oschina/id_rsa -C &lt;span style="color:#e6db74"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时~/.ssh目录下会多出oschina/id_rsa和oschina/id_rsa.pub两个文件，id_rsa.pub里保存的就是我们要使用的key。&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;新增并配置config文件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;添加config文件&lt;/p&gt;
&lt;p&gt;如果config文件不存在，先添加；存在则直接修改&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;touch ~/.ssh/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在config文件里添加如下内容(User表示你的用户名)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host git.oschina.net
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HostName git.oschina.net
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdentityFile ~/.ssh/oschina/id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; User git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;上传key到oschina &lt;a class="link" href="http://git.oschina.net/profile/sshkeys" target="_blank" rel="noopener"
 &gt;http://git.oschina.net/profile/sshkeys&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;测试ssh key是否配置成功&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh -T xx@xx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;成功的话会显示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Welcome to Git@OSC, 张大鹏!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;至此，本地便成功配置多个ssh key。日后如需添加，则安装上述配置生成key，并修改config文件即可。&lt;/p&gt;
&lt;p&gt;提示：在此过程中会出现如下问题&lt;/p&gt;
&lt;p&gt;1，Bad owner or permissions on .ssh/config&lt;/p&gt;
&lt;p&gt;2，进行测试的时候总会出现提示输入密码&lt;/p&gt;
&lt;p&gt;解决办法参照另外一篇文章&lt;a class="link" href="http://gowhich.com/blog/687" target="_blank" rel="noopener"
 &gt;点击这里&lt;/a&gt;&lt;/p&gt;</description></item><item><title>配置多个ssh key的遇到的问题</title><link>https://zhangdapeng.dev/p/pei-zhi-duo-ge-ssh-key-de-yu-dao-de-wen-ti/</link><pubDate>Tue, 01 Jul 2025 15:04:13 +0000</pubDate><guid>https://zhangdapeng.dev/p/pei-zhi-duo-ge-ssh-key-de-yu-dao-de-wen-ti/</guid><description>&lt;h1 id="配置多个ssh-key的遇到的问题"&gt;&lt;a class="link" href="#1" &gt;配置多个ssh key的遇到的问题&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;1，Bad owner or permissions on .ssh/config&lt;/p&gt;
&lt;p&gt;2，进行测试的时候总会出现提示输入密码&lt;/p&gt;
&lt;p&gt;以上两个问题多数是由于权限的问题&lt;/p&gt;
&lt;p&gt;解决问题一：&lt;/p&gt;
&lt;p&gt;将config的执行权限修改为600&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chmod &lt;span style="color:#ae81ff"&gt;600&lt;/span&gt; ~/.ssh/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解决问题二:&lt;/p&gt;
&lt;p&gt;这个问题在我这里出现的原因是由于我将config拥有权限改成了root，导致出现的问题&lt;/p&gt;
&lt;p&gt;如果你也遇到这样的问题的话，可以试着改成拥有权限为自己就可以了。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chown xxx ~/.ssh/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;[xxx]为linux的当前用户&lt;/p&gt;
&lt;p&gt;执行完之后在测试下，是不是已经就成功了，没有的话可以加群沟通&lt;/p&gt;</description></item><item><title>Git标签的添加、删除、查看</title><link>https://zhangdapeng.dev/p/git-biao-qian-de-tian-jia-shan-chu-cha-kan/</link><pubDate>Mon, 30 Jun 2025 15:57:36 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-biao-qian-de-tian-jia-shan-chu-cha-kan/</guid><description>&lt;p&gt;最近突然想试试git的tag标签，感觉git的标签很实用，比如说你要在某个分之上发布一个app的版本包，ok，你就可以直接将此分支搞过来就好了，下次你想使用或者查看上一个版本的包，可以指定上一个tag就可以直接获取到上一个版本的代码了。&lt;/p&gt;
&lt;p&gt;其实理解一下tag的添加、查看、删除这些基本的操作很简单的。&lt;/p&gt;
&lt;p&gt;问题是，如果我想要获得某个版本的代码即某个标签的代码，来做修改，改如何处理呢？&lt;/p&gt;
&lt;p&gt;这里我在网上搜索了一些资料。简单的介绍了一下git的分支管理策略，这个对项目的管理，测试，分发，以及后面的代码bug修改都有很大的帮助。&lt;/p&gt;
&lt;p&gt;一篇是&lt;a class="link" href="http://www.ruanyifeng.com/blog/2012/07/git.html" title="git的分支管理策略"
 target="_blank" rel="noopener"
 &gt;git的分支管理策略&lt;/a&gt;，一篇是&lt;a class="link" href="http://zengrong.net/post/1746.htm" title="git标签的操作指南"
 target="_blank" rel="noopener"
 &gt;git标签的操作指南&lt;/a&gt;，简要的介绍了一个标签的创建和使用，更简单的git标签的使用也可以参考这篇文章：&lt;a class="link" href="http://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE" title="git-打标签"
 target="_blank" rel="noopener"
 &gt;GIT-打标签&lt;/a&gt;，同时还有另外一篇文章，解决了我的疑问的文章，就是&lt;a class="link" href="http://www.oschina.net/question/1030451_105857" title="如何获取git打好的tag所对应的代码"
 target="_blank" rel="noopener"
 &gt;如何获取git打好的tag所对应的代码&lt;/a&gt;，了解了这几篇文章，我觉得对git的合理利用应该能够可以得到充分的理解了。&lt;/p&gt;</description></item><item><title>Git提交到多个远程仓库</title><link>https://zhangdapeng.dev/p/git-ti-jiao-dao-duo-ge-yuan-cheng-cang-ku/</link><pubDate>Mon, 30 Jun 2025 15:57:23 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-ti-jiao-dao-duo-ge-yuan-cheng-cang-ku/</guid><description>&lt;p&gt;第一步:添加远程仓库&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git remote add origin 第一个仓库地址 //origin只是个别名哦
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git remote add osc 第二个仓库地址 //osc也是个别名哦
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第二步：&lt;/p&gt;
&lt;p&gt;创建分支&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git checkout -b master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git checkout -b osc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第三步：&lt;/p&gt;
&lt;p&gt;提交代码：&lt;/p&gt;
&lt;p&gt;分别切换分支提交&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git chekcout master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git push origin master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;//&lt;span style="color:#f92672"&gt;=========================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git checkout osc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git push osc master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>使用PM2 Deploy部署基于Git版本管理的网站应用 自动部署</title><link>https://zhangdapeng.dev/p/shi-yong-pm2-deploy-bu-shu-ji-yu-git-ban-ben-guan-li-de-wang-zhan-ying-yong-zi-dong-bu-shu/</link><pubDate>Mon, 30 Jun 2025 15:15:39 +0000</pubDate><guid>https://zhangdapeng.dev/p/shi-yong-pm2-deploy-bu-shu-ji-yu-git-ban-ben-guan-li-de-wang-zhan-ying-yong-zi-dong-bu-shu/</guid><description>&lt;p&gt;按照官方介绍，PM2是一款用于生产环境Node.js应用进程管理的工具。按照民间介绍，它主要有这样几个功能：保证Node.js应用永远在线（挂掉自动重启）、自动负载均衡、零中断重启应用等。&lt;/p&gt;
&lt;p&gt;鉴于它是如此优秀，这里还是简要介绍一下前两个功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先，它是一个Node.js写的工具，使用npm即可安装使用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -g pm2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;运行Node.js程序&lt;/p&gt;
&lt;p&gt;如果不使用pm2，运行Node.js程序是这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;node xxx.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用pm2，是这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 start xxx.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;监视模式&lt;/p&gt;
&lt;p&gt;如果你正在开发Node.js应用，需要在代码变更后自动重启应用，只需要在pm2的参数中加上&amp;ndash;watch即可：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 start xxx.js --watch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;cluster模式&lt;/p&gt;
&lt;p&gt;默认情况下pm2是以fork模式启动应用的，如果以cluster模式启动的话，则可以使用pm2自带的负载均衡、零间断重启等功能。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 start xxx.js -i &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面的命令会以cluster模式启动4个应用进程，并自动为它们提供负载均衡，并且可以使用gracefulReload达到更新应用时不中断服务的效果。&lt;/p&gt;
&lt;p&gt;关于cluster模式，可参见朴灵《深入浅出Node.js》一书。&lt;/p&gt;
&lt;p&gt;pm2低版本默认是以cluster模式启动的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部署应用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;官方文档:https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#deployment&lt;/p&gt;
&lt;p&gt;这才是本文的重点。PM2的部署功能可以实现网站应用的半自动部署功能。注意本文标题没有加“Node.js”，意味着这个功能并不只适用于Node.js网站应用，事实上它部署功能是用shell写的，跟网站使用什么语言没什么关系。&lt;/p&gt;
&lt;p&gt;PM2的部署功能与版本管理工具（Git，不确定是否支持SVN，下文以Git为例）结合比较紧，因此需要保证网站项目使用版本管理工具管理代码，并且服务器可以访问到版本管理服务器。&lt;/p&gt;
&lt;p&gt;部署功能是在新版本（0.12）中才添加进来的。如果你使用的是旧版本的，需要先升级：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -g pm2@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 updatePM2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来需要建立一个部署的配置文件，这个文件在本机（操作发布的机器）和服务器上都需要有，因此最好放入Git版本管理中，并且推送到远程代码库（Git服务器）。&lt;/p&gt;
&lt;p&gt;切换到项目目录下，然后执行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 ecosystem
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;即可得到一个示例json文件（例如我得到的是ecosystem.json5），将它做对应的修改，大致如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;apps&amp;#34;&lt;/span&gt; : [{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;API&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;script&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;app.js&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;env&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;COMMON_VARIABLE&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;env_production&amp;#34;&lt;/span&gt; : {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;NODE_ENV&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;production&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;WEB&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;script&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;web.js&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;deploy&amp;#34;&lt;/span&gt; : {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;production&amp;#34;&lt;/span&gt; : {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;user&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;node&amp;#34;&lt;/span&gt;,&lt;span style="color:#75715e"&gt;//登录账号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;host&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;212.83.163.1&amp;#34;&lt;/span&gt;,&lt;span style="color:#75715e"&gt;//服务器地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;ref&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;origin/master&amp;#34;&lt;/span&gt;,&lt;span style="color:#75715e"&gt;//git 分支
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;repo&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;xx@xx:repo.git&amp;#34;&lt;/span&gt;,&lt;span style="color:#75715e"&gt;//git地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;path&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;/var/www/production&amp;#34;&lt;/span&gt;,&lt;span style="color:#75715e"&gt;//服务器项目目录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;post-deploy&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;pm2 startOrRestart ecosystem.json5 --env production&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;dev&amp;#34;&lt;/span&gt; : {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;user&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;node&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;host&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;212.83.163.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;ref&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;origin/master&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;repo&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;xx@xx:repo.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;path&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;/var/www/development&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;post-deploy&amp;#34;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#34;pm2 startOrRestart ecosystem.json5 --env dev&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;env&amp;#34;&lt;/span&gt; : {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;NODE_ENV&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;需要注意：&lt;/p&gt;
&lt;p&gt;apps.name和apps.script应该与PM2识别应用有关，后续执行&lt;code&gt;pm2 restart&lt;/code&gt;的时候可以对应到进程（未证实）&lt;/p&gt;
&lt;p&gt;deploy中可以含有多个环境，需要能够通过SSH（公钥认证）登录服务器&lt;/p&gt;
&lt;p&gt;web目录并不是真正的放版本库文件的目录，PM2会再建立一个source子目录，这个才是真正放代码的目录&lt;/p&gt;
&lt;p&gt;post-deploy是指代码部署完之后执行的命令，这里以Node.js为例子，执行依赖安装，然后重启PM2中的进程&lt;/p&gt;
&lt;p&gt;然后就可以使用&lt;/p&gt;
&lt;p&gt;首先需要安装一下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 deploy ecosystem.json5 production setup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个过程中可能会涉及到权限的问题，不过都是一些小的问题&lt;/p&gt;
&lt;p&gt;如果已经安装可以运行下面这个命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pm2 deploy ecosystem.json5 production
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;自动发布网站项目了，非常方便。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xx@xx:~/nodejs/node-react$ pm2 deploy ecosystem.json5 production
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--&amp;gt; Deploying to production environment
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--&amp;gt; on host 205.209.156.140
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ○ deploying
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ○ hook pre-deploy
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ○ fetching updates
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xx@xx&lt;span style="color:#e6db74"&gt;&amp;#39;s password: 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Fetching origin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;From https://git.oschina.net/zhangdapeng89/node-react
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; 4456ce1..c45f87c master -&amp;gt; origin/master
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; ○ resetting HEAD to origin/master
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;xx@xx&amp;#39;&lt;/span&gt;s password: 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HEAD is now at c45f87c 添加eco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xx@xx&lt;span style="color:#e6db74"&gt;&amp;#39;s password: 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;xx@xx&amp;#39;&lt;/span&gt;s password: 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ○ executing post-deploy &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;pm2 startOrRestart ecosystem.json5 --env production&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xx@xx&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;s password: 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬──────────────┬──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼──────────────┼──────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ app │ &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; │ fork │ &lt;span style="color:#ae81ff"&gt;5843&lt;/span&gt; │ online │ &lt;span style="color:#ae81ff"&gt;958&lt;/span&gt; │ 11D │ 133.094 MB │ disabled │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ API │ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; │ fork │ &lt;span style="color:#ae81ff"&gt;22700&lt;/span&gt; │ online │ &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; │ 0s │ 12.219 MB │ disabled │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ WEB │ &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; │ fork │ &lt;span style="color:#ae81ff"&gt;22705&lt;/span&gt; │ online │ &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; │ 0s │ 11.746 MB │ disabled │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴──────────────┴──────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Use &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;pm2 show &amp;lt;id|name&amp;gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; to get more details about an app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ○ hook test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ○ successfully deployed origin/master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--&amp;gt; Success
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git 修改 remote的url</title><link>https://zhangdapeng.dev/p/git-xiu-gai-remote-de-url/</link><pubDate>Mon, 30 Jun 2025 14:31:29 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-xiu-gai-remote-de-url/</guid><description>&lt;p&gt;其实很简单的事情，你就是没有记住，但是有句古话说的好啊，什么什么烂笔头的&lt;/p&gt;
&lt;p&gt;记录这句命令，你将飞跃在各个github平台中&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git remote set-url origin git://new.url.here
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git 操作 pull 强制重写本地文件</title><link>https://zhangdapeng.dev/p/git-cao-zuo-pull-qiang-zhi-zhong-xie-ben-di-wen-jian/</link><pubDate>Mon, 30 Jun 2025 14:31:21 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-cao-zuo-pull-qiang-zhi-zhong-xie-ben-di-wen-jian/</guid><description>&lt;p&gt;最近很烦恼一个问题，在不同设备上进行操作的时候，会出现两台设备都存在一个修改文件，问题是如果一台机器上代码提交了，想在另外一台机器上进行pull来更新代码，会提示你先要commit本地的修改代码，问题是如果这样的话会出现冲突，但是我又想重写，不管现在的代码更改的如何，于是想要重写本地的文件。对于不是很懂git的我，找到了一个解决的方案：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git fetch origin master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git reset --hard FETCH_HEAD
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clean -df
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;经过这样的操作，结果很令我满意。提示，如果不是很想覆盖本地的代码的话，可以思考另外一个办法。不要强制使用此方案&lt;/p&gt;</description></item><item><title>Windows下git bash乱码问题</title><link>https://zhangdapeng.dev/p/windows-xia-git-bash-luan-ma-wen-ti/</link><pubDate>Fri, 27 Jun 2025 10:59:57 +0000</pubDate><guid>https://zhangdapeng.dev/p/windows-xia-git-bash-luan-ma-wen-ti/</guid><description>&lt;p&gt;转载某个牛逼的人物，做个记录，&lt;/p&gt;
&lt;p&gt;如果找不到就到git的安装目录下面去看看。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1,/etc/gitconfig：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;gui&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; encoding &lt;span style="color:#f92672"&gt;=&lt;/span&gt; utf-8 &lt;span style="color:#75715e"&gt;#代码库统一用urf-8,在git gui中可以正常显示中文&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;i18n&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; commitencoding &lt;span style="color:#f92672"&gt;=&lt;/span&gt; GB2312 &lt;span style="color:#75715e"&gt;#log编码，window下默认gb2312,声明后发到服务器才不会乱码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;svn&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pathnameencoding &lt;span style="color:#f92672"&gt;=&lt;/span&gt; GB2312 &lt;span style="color:#75715e"&gt;#支持中文路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2,/etc/git-completion.bash:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alias ls&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;ls --show-control-chars --color=auto&amp;#39;&lt;/span&gt; &lt;span style="color:#75715e"&gt;#ls能够正常显示中文&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;3,/etc/inputrc:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set output-meta on &lt;span style="color:#75715e"&gt;#bash中可以正常输入中文&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set convert-meta off
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;4,/etc/profile:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export LESSHARSET&lt;span style="color:#f92672"&gt;=&lt;/span&gt;utf-8 &lt;span style="color:#75715e"&gt;#$ git log 命令不像其它 vcs 一样，n 条 log 从头滚到底，它会恰当地停在第一页，按 space 键再往后翻页。这是通过将 log 送给 less 处理实现的。以上即是设置 less 的字符编码，使得 $ git log 可以正常显示中文。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果没有就加上吧，有了的话就改下，如果是一样的话就不用修改了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文章：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="http://www.cnblogs.com/Gukw/archive/2012/01/16/2323417.html" target="_blank" rel="noopener"
 &gt;http://www.cnblogs.com/Gukw/archive/2012/01/16/2323417.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>在CentOS上安装Git</title><link>https://zhangdapeng.dev/p/zai-centos-shang-an-zhuang-git/</link><pubDate>Fri, 27 Jun 2025 10:25:52 +0000</pubDate><guid>https://zhangdapeng.dev/p/zai-centos-shang-an-zhuang-git/</guid><description>&lt;p&gt;刚学了一下git在CentOS的安装方式，其实是这样子的，CentOS的yum源中没有git，只能自己编译安装，现在记录下编译安装的内容，留给自己备忘。&lt;/p&gt;
&lt;p&gt;确保已安装了依赖的包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install curl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install curl-devel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install zlib-devel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install openssl-devel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install perl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install cpio
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install expat-devel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum install gettext-devel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下载最新的git包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar xzvf git-latest.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd git-2011-11-30 ＃你的目录可能不是这个
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;autoconf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./configure
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;检查下安装的版本，大功告成&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;参考文章：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="http://www.ccvita.com/370.html" target="_blank" rel="noopener"
 &gt;http://www.ccvita.com/370.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Git常用指令</title><link>https://zhangdapeng.dev/p/git-chang-yong-zhi-ling/</link><pubDate>Fri, 13 Jun 2025 11:27:40 +0000</pubDate><guid>https://zhangdapeng.dev/p/git-chang-yong-zhi-ling/</guid><description>&lt;h3 id="创建一个新的repository"&gt;&lt;a class="link" href="#1" &gt;创建一个新的repository：&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;先在github上创建并写好相关名字，描述。(github的创建，可以参考这里https://help.github.com/articles/create-a-repo)&lt;/p&gt;
&lt;p&gt;如果我们创建了hello-world，那么下面的操作如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$cd ~/hello-world //到hello-world目录
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git init 	//初始化
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git add .//把所有文件加入到索引（不想把所有文件加入，可以用gitignore或add 具体文件&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git commit //提交到本地仓库，然后会填写更新日志&lt;span style="color:#f92672"&gt;(&lt;/span&gt; -m “更新日志”也可&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git remote add origin xx@xx:zhangda89/hello-world.git //增加到remote
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git push origin master //push到github上
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="更新项目新加了文件"&gt;&lt;a class="link" href="#2" &gt;更新项目（新加了文件）：&lt;/a&gt;
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$cd ~/hello-world
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git add . //这样可以自动判断新加了哪些文件，或者手动加入文件名字
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git commit //提交到本地仓库
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git push origin master //不是新创建的，不用再add 到remote上了
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="更新项目没新加文件只有删除或者修改文件"&gt;&lt;a class="link" href="#3" &gt;更新项目（没新加文件，只有删除或者修改文件）：&lt;/a&gt;
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$cd ~/hello-world
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git commit -a //记录删除或修改了哪些文件
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git push origin master //提交到github
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="忽略一些文件比如"&gt;&lt;a class="link" href="#4" &gt;忽略一些文件，比如*.o等:&lt;/a&gt;
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$cd ~/hello-world
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$vim .gitignore //把文件类型加入到.gitignore中，保存
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后就可以git add . 能自动过滤这种文件&lt;/p&gt;
&lt;h3 id="clone代码到本地"&gt;&lt;a class="link" href="#5" &gt;clone代码到本地：&lt;/a&gt;
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git clone xx@xx:zhangda89/hello-world.git //假如本地已经存在了代码，而仓库里有更新，把更改的合并到本地的项目：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git fetch origin //获取远程更新
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git merge origin/master //把更新的内容合并到本地分支
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="撤销"&gt;&lt;a class="link" href="#6" &gt;撤销&lt;/a&gt;
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git reset
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="删除"&gt;&lt;a class="link" href="#7" &gt;删除&lt;/a&gt;
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$git rm * // 不是用rm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="常见错误"&gt;&lt;a class="link" href="#8" &gt;常见错误&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git remote add origin git@github.com:zhangda89/hello-world.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;错误提示：&lt;code&gt;fatal: remote origin already exists. &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;解决办法： &lt;code&gt;$git remote rm origin &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;然后在执行：&lt;code&gt;$git remote add origin git@github.com:zhangda89/hello-world.git&lt;/code&gt; 就不会报错误了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git push origin master &lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;错误提示：&lt;code&gt;error:failed to push som refs to &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;解决办法： &lt;code&gt;$git pull origin master&lt;/code&gt; //先把远程服务器github上面的文件拉先来，再push 上去。&lt;/p&gt;</description></item></channel></rss>