<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on 代码学习站</title>
    <link>https://a6233.com/posts/</link>
    <description>Recent content in Posts on 代码学习站</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 20 Jun 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://a6233.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>CLion 运行报错解决</title>
      <link>https://a6233.com/posts/clion-%E8%BF%90%E8%A1%8C%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/clion-%E8%BF%90%E8%A1%8C%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3/</guid>
      <description>&lt;p&gt;代码正确，但是一直提示错误&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;undefined reference to `PrintHandler::PrintHandler(Looper*)&amp;#39;
collect2.exe: error: ld returned 1 exit status
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;无意中发现自己运行的是 main.cpp 而不是整个项目，运行整个项目就会正常了。&lt;/p&gt;
&lt;p&gt;具体原因见 AI&lt;/p&gt;
&lt;p&gt;这是一个 &lt;strong&gt;CLion 或 CMake 配置相关的问题&lt;/strong&gt;，不是代码逻辑问题，而是&lt;strong&gt;你在运行 &lt;code&gt;main.cpp&lt;/code&gt; 文件单独作为“单文件运行”时，编译器没有正确链接整个项目的所有 &lt;code&gt;.cpp&lt;/code&gt; 文件&lt;/strong&gt;（例如 &lt;code&gt;Looper.cpp&lt;/code&gt;、&lt;code&gt;PrintHandler.cpp&lt;/code&gt; 等），从而导致：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;undefined reference to `Looper::postMessage(...)`
undefined reference to `vtable for PrintHandler`
...
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;-原因详解&#34;&gt;✅ 原因详解&lt;/h2&gt;
&lt;p&gt;在 &lt;strong&gt;CLion 中点击右键运行 &lt;code&gt;main.cpp&lt;/code&gt; 文件&lt;/strong&gt; 时：&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;它会临时生成一个只编译 &lt;code&gt;main.cpp&lt;/code&gt; 的目标，没有链接你项目中定义的其他源文件（&lt;code&gt;.cpp&lt;/code&gt;），所以报链接错误。&lt;/p&gt;
&lt;p&gt;而你点击的是：&lt;/p&gt;
&lt;h3 id=&#34;-右键-maincpp--run-maincpp&#34;&gt;❌ &lt;code&gt;右键 main.cpp → Run main.cpp&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;只运行单文件，不会编译整个项目。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-正确做法&#34;&gt;✅ 正确做法&lt;/h2&gt;
&lt;p&gt;请始终使用：&lt;/p&gt;
&lt;h3 id=&#34;-run-employeesystem-或-run-your_target_name&#34;&gt;✅ &lt;code&gt;Run &#39;EmployeeSystem&#39;&lt;/code&gt; 或 &lt;code&gt;Run &#39;&amp;lt;your_target_name&amp;gt;&#39;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;也就是你在 &lt;code&gt;CMakeLists.txt&lt;/code&gt; 中通过 &lt;code&gt;add_executable()&lt;/code&gt; 定义的那个目标，例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Window11 桌面图标变白处理</title>
      <link>https://a6233.com/posts/window11-%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87%E5%8F%98%E7%99%BD%E5%A4%84%E7%90%86/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/window11-%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87%E5%8F%98%E7%99%BD%E5%A4%84%E7%90%86/</guid>
      <description>&lt;h3 id=&#34;解决方法&#34;&gt;解决方法&lt;/h3&gt;
&lt;p&gt;1、删除 icon 的缓存文件即可。
【Win】+【R】两个按键，打开【运行】输入%localappdata%
2、删除 Iconcache.db 文件
3、在系统管理器里重新启动 Window 资源管理器&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 开发环境配置</title>
      <link>https://a6233.com/posts/ubuntu-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/ubuntu-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</guid>
      <description>&lt;h3 id=&#34;1常用软件安装&#34;&gt;1、常用软件安装&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;obsidian&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vscode&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;typora&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;chrome&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等等&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2java-安装和配置&#34;&gt;2、Java 安装和配置&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt update
sudo apt install openjdk-8-jdk
sudo apt install openjdk-11-jdk

java -version

sudo update-alternatives --config java

# 环境变量设置
sudo nano /etc/environment
JAVA_HOME=&amp;#34;/usr/lib/jvm/java-11-openjdk-amd64&amp;#34;
source /etc/environment
echo $JAVA_HOME
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Ubuntu 手动添加应用快捷方式</title>
      <link>https://a6233.com/posts/ubuntu-%E6%89%8B%E5%8A%A8%E6%B7%BB%E5%8A%A0%E5%BA%94%E7%94%A8%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F/</link>
      <pubDate>Thu, 10 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/ubuntu-%E6%89%8B%E5%8A%A8%E6%B7%BB%E5%8A%A0%E5%BA%94%E7%94%A8%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F/</guid>
      <description>&lt;p&gt;Ubuntu 手动添加应用快捷方式&lt;/p&gt;
&lt;p&gt;在 Ubuntu 20.04（或 20 系列）里创建桌面快捷方式，可以按照以下步骤操作：&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;1-创建-desktop-文件&#34;&gt;1. 创建 &lt;code&gt;.desktop&lt;/code&gt; 文件&lt;/h3&gt;
&lt;p&gt;可以在桌面或者 &lt;code&gt;~/.local/share/applications/&lt;/code&gt; 目录下新建一个 &lt;code&gt;.desktop&lt;/code&gt; 文件，比如：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gedit ~/Desktop/myapp.desktop
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果没有 &lt;code&gt;gedit&lt;/code&gt;，你可以用 &lt;code&gt;nano&lt;/code&gt;、&lt;code&gt;vim&lt;/code&gt;，或者在文件管理器右键 -&amp;gt; 新建文档也可以。&lt;/p&gt;
&lt;h3 id=&#34;2-填写内容模板&#34;&gt;2. 填写内容模板&lt;/h3&gt;
&lt;p&gt;一般一个 &lt;code&gt;.desktop&lt;/code&gt; 文件的内容是这样的：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Desktop Entry]
Version=1.0
Name=应用名称
Comment=应用描述
Exec=命令或程序路径
Icon=图标路径
Terminal=false
Type=Application
Categories=Utility;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Name&lt;/code&gt;：显示在图标下的名字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Comment&lt;/code&gt;：悬停时显示的提示文字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Exec&lt;/code&gt;：启动程序的命令或脚本路径&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Icon&lt;/code&gt;：图标路径（可以用 &lt;code&gt;.png&lt;/code&gt; 或 &lt;code&gt;.svg&lt;/code&gt; 图片）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Terminal&lt;/code&gt;：是否需要终端窗口运行，通常设为 &lt;code&gt;false&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Type&lt;/code&gt;：通常是 &lt;code&gt;Application&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Categories&lt;/code&gt;：可以简单填个 &lt;code&gt;Utility;&lt;/code&gt;，不影响桌面启动&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;举个例子，比如你要给 Chrome 浏览器创建快捷方式：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Desktop Entry]
Version=1.0
Name=Google Chrome
Comment=浏览器
Exec=/usr/bin/google-chrome-stable
Icon=/usr/share/icons/hicolor/128x128/apps/google-chrome.png
Terminal=false
Type=Application
Categories=Network;
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h3 id=&#34;3-给文件加执行权限&#34;&gt;3. 给文件加执行权限&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chmod +x ~/Desktop/myapp.desktop
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;不加权限的话，桌面图标点了会没反应或者提示“不受信任的应用程序”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>requestLayout() 和 invalidate() 作用</title>
      <link>https://a6233.com/posts/requestlayout-%E5%92%8C-invalidate-%E4%BD%9C%E7%94%A8/</link>
      <pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/requestlayout-%E5%92%8C-invalidate-%E4%BD%9C%E7%94%A8/</guid>
      <description>&lt;p&gt;&lt;code&gt;requestLayout()&lt;/code&gt; 和 &lt;code&gt;invalidate()&lt;/code&gt; 是 Android 中 View 类的两个重要方法，用于不同的视图更新场景。让我解释它们的作用和区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;requestLayout() 方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;请求重新测量和布局整个视图树。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;触发视图的 onMeasure() 和 onLayout() 方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用于视图的大小或位置发生变化时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;调用时机：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当视图的尺寸需要改变时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当视图的位置需要改变时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当视图的子视图发生增删或其布局参数变化时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;button.setVisibility(View.GONE);
parentLayout.requestLayout();
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;invalidate() 方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;请求重绘视图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;触发视图的 onDraw() 方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用于视图的内容或外观需要更新，但尺寸和位置不变时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;调用时机：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当视图的颜色、文本内容等发生变化时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当需要重新绘制自定义视图的内容时。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;动画更新时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;textView.setTextColor(Color.RED);
textView.invalidate();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;主要区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;影响范围：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 可能影响整个视图层次结构的布局。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 通常只影响调用它的视图及其子视图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;性能影响：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 开销较大，因为它可能导致整个视图树的重新测量和布局。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 开销相对较小，通常只涉及重绘。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;触发的回调：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 触发 onMeasure() 和 onLayout()，可能还会触发 onDraw()。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 主要触发 onDraw()。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用场景：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 用于影响视图结构或尺寸的变化。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;invalidate(): 用于视图内容或外观的更新。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;线程安全：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requestLayout(): 可以在非 UI 线程调用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>编译 android 源码找不到 python 方法解决记录</title>
      <link>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E6%89%BE%E4%B8%8D%E5%88%B0-python-%E6%96%B9%E6%B3%95%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E6%89%BE%E4%B8%8D%E5%88%B0-python-%E6%96%B9%E6%B3%95%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;p&gt;配置 python&lt;/p&gt;
&lt;p&gt;安装了 python2 后默认可以使用命令&lt;code&gt;python2&lt;/code&gt; 来执行操作，但是一些脚本使用的是&lt;code&gt;python&lt;/code&gt;，所以这样会导致脚本执行错误：&lt;code&gt;python: command not found&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这样就需要我们&lt;code&gt;python&lt;/code&gt;关联到&lt;code&gt;python2&lt;/code&gt;上面。我们可以借助&lt;code&gt;update-alternatives&lt;/code&gt;来实现。&lt;/p&gt;
&lt;p&gt;比如上面的情况，我们可以设置命令如下。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里面的 python3 看情况而定，这里只是演示。&lt;/p&gt;
&lt;p&gt;接着我们就可以使用命令切换我们需要使用的版本了。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo update-alternatives --config python
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;配置-java&#34;&gt;配置 Java&lt;/h3&gt;
&lt;p&gt;同样我们也可以如法炮制来配置&lt;code&gt;jdk&lt;/code&gt;的版本。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 2
​
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接着选择我们使用的版本即可。&lt;/p&gt;
&lt;p&gt;sudo update-alternatives &amp;ndash;config java&lt;/p&gt;</description>
    </item>
    <item>
      <title>编译 android 源码错误解决记录</title>
      <link>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/%E7%BC%96%E8%AF%91-android-%E6%BA%90%E7%A0%81%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;p&gt;1、提示 BaseTools C Tool binary was not found&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BaseTools C Tool binary was not found (GenFw)
You may need to run:
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以到提示的目录下，执行 make 编译即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>&lt;uses-library&gt; &lt;/uses-library&gt;uses-library &lt;uses-library&gt;标签&lt;/uses-library&gt;作用</title>
      <link>https://a6233.com/posts/uses-library-%E6%A0%87%E7%AD%BE%E4%BD%9C%E7%94%A8/</link>
      <pubDate>Mon, 14 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/uses-library-%E6%A0%87%E7%AD%BE%E4%BD%9C%E7%94%A8/</guid>
      <description>&lt;p&gt;在 &lt;code&gt;AndroidManifest.xml&lt;/code&gt; 文件中，&lt;code&gt;&amp;lt;uses-library&amp;gt;&lt;/code&gt; 标签用于声明应用程序依赖于某个外部库。这些库通常是Android系统提供的可选库，而不是应用自身打包的库。通过声明 &lt;code&gt;&amp;lt;uses-library&amp;gt;&lt;/code&gt;，你可以确保系统在应用安装时检查该库是否可用，并在缺少该库时阻止应用安装或运行。&lt;/p&gt;
&lt;p&gt;常见的用途有依赖某些系统扩展库或平台库，例如 &lt;code&gt;org.apache.http.legacy&lt;/code&gt;，可以通过 &lt;code&gt;&amp;lt;uses-library&amp;gt;&lt;/code&gt; 声明这个依赖关系：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;uses-library
    android:name=&amp;#34;org.apache.http.legacy&amp;#34;
    android:required=&amp;#34;false&amp;#34; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;属性解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;android:name&lt;/code&gt;: 指定依赖库的名称。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;android:required&lt;/code&gt;: 可选属性，默认为 &lt;code&gt;true&lt;/code&gt;，表示该库是必需的。如果设置为 &lt;code&gt;false&lt;/code&gt;，即使设备上没有该库，应用仍然可以运行，只不过相关功能可能无法使用。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个声明在处理不同版本的系统或与系统扩展库集成时非常有用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git 取消跟踪文件</title>
      <link>https://a6233.com/posts/git-%E5%8F%96%E6%B6%88%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6/</link>
      <pubDate>Mon, 14 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://a6233.com/posts/git-%E5%8F%96%E6%B6%88%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6/</guid>
      <description>&lt;p&gt;要从 Git 中移除已跟踪的文件，同时保持这些文件在本地存在（不删除本地文件），你可以按照以下步骤操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新 &lt;code&gt;.gitignore&lt;/code&gt; 文件&lt;/strong&gt;：确保你已经正确配置了你想忽略的文件或目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;移除文件的追踪&lt;/strong&gt;：使用 &lt;code&gt;git rm --cached&lt;/code&gt; 来移除已追踪的文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git rm -r --cached &amp;lt;file_or_directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;例如，如果你想移除 &lt;code&gt;.log&lt;/code&gt; 文件的追踪：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git rm -r --cached *.log
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;提交更改&lt;/strong&gt;：移除追踪后需要提交这些更改。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git commit -m &amp;#34;移除已追踪的文件，更新 .gitignore&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;推送更改&lt;/strong&gt;（如果有远程仓库）：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git push origin &amp;lt;branch_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;执行以上步骤后，Git 将停止追踪 &lt;code&gt;.gitignore&lt;/code&gt; 中定义的文件或目录，但这些文件仍然会保留在你的本地文件系统中。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
