当前位置: 首页 > news >正文

Git分布式版本控制系统:从核心概念到团队协作实战指南

1. 从“版本管理”到“协作基石”:为什么你需要Git?

如果你曾经因为误删了某个文件而抓狂,或者在一个项目文件夹里看到“最终版”、“最终版2”、“最终版真的不改了”这样的文件名而感到头疼,那么恭喜你,你已经遇到了版本管理的痛点。Git,本质上就是一个帮你解决这些问题的超级工具。它不是什么高深莫测的黑科技,而是一个记录你工作每一步变化的“时光机”和“后悔药”。

简单来说,Git是一个分布式版本控制系统。别被“分布式”吓到,你可以把它理解成:你和你的每个队友,电脑里都有一份完整的项目历史记录。这就像每个人手里都有一本完整的项目日记,而不是只有项目经理手里有一本。这样做的好处是,即使网络断了,或者中央服务器挂了,你依然可以继续工作、查看历史、创建分支,完全不受影响。这和我们过去用的SVN那种“中央集权”式的版本控制有本质区别,也是Git如今能成为事实标准的核心原因。

它能帮你做什么?最核心的三件事:记录变化协同工作安全实验。你写的每一行代码、增加的每一个文件、删除的每一段注释,Git都能帮你精确地记录下来,并且你可以随时回到任何一个历史时刻。当多人一起开发时,Git能清晰地合并每个人的工作成果,避免覆盖和混乱。而它的“分支”功能,更是让你可以放心大胆地尝试新功能或修复Bug,而不用担心搞砸了主线的稳定版本。

无论你是独立开发者、学生,还是团队中的一员,无论你写的是代码、文档、配置文件还是设计稿,只要你的工作内容会不断迭代,Git就是你必备的技能。接下来的内容,我会带你从零开始,用最快的方式上手Git,并深入到那些真正实用的细节和技巧里,避开我当年踩过的那些坑。

2. Git核心概念与工作流全解析

在动手敲命令之前,花几分钟理解Git的核心模型至关重要。这能让你在后续操作中知其然,更知其所以然,遇到问题时不至于盲目乱试。

2.1 三个工作区与四种状态

这是理解Git工作流的基石。你的文件在Git管理下,会存在于三个主要区域,并在这三个区域间流动,对应四种状态。

  1. 工作区 (Working Directory):就是你电脑上能直接看到、编辑的目录。你在这里新增、修改、删除文件。此时文件的状态是未跟踪 (Untracked)已修改 (Modified)
  2. 暂存区 (Staging Area / Index):这是一个非常关键的概念,你可以把它想象成一个“准备台”或“购物车”。工作区里你满意的改动,通过git add命令被放到这里。这里的文件状态是已暂存 (Staged)。暂存区让你可以精心挑选本次要提交的改动,而不是一股脑把所有修改都提交上去。
  3. 本地仓库 (Local Repository):位于你项目根目录下的.git隐藏文件夹,这就是Git的数据库。通过git commit命令,暂存区的内容会被打包成一个永久的快照,存入本地仓库。这里的文件状态是已提交 (Committed)

一个完整的、最基本的Git工作流就是:在工作区修改文件 -> 将满意的改动添加到暂存区 -> 将暂存区的内容提交到本地仓库。这个修改 (modified) -> 暂存 (staged) -> 提交 (committed)的循环,是你最常打交道的流程。

2.2 提交、分支与远程仓库

  • 提交 (Commit):每次提交都是项目在某个时间点的完整快照,而不是文件差异的集合(虽然Git内部用差异存储来节省空间)。每个提交都有一个全球唯一的SHA-1哈希值(如a1b2c3d...)作为ID,同时包含作者、时间、提交说明等信息。提交说明写清楚非常重要,这是你未来查阅历史的依据。
  • 分支 (Branch):Git的分支极其轻量,它本质上只是一个指向某个提交的移动指针。默认创建仓库时会有一个mainmaster分支(主分支)。当你创建一个新分支(例如feature/login)时,只是新建了一个指针。你在新分支上的提交,只会移动这个新分支的指针,主分支的指针原地不动。这使得创建和切换分支几乎瞬间完成,鼓励了“基于分支开发”的最佳实践。
  • 远程仓库 (Remote Repository):通常指的是托管在GitHub、Gitee、GitLab等平台上的仓库,代号默认为origin。你的本地仓库可以通过git push将提交推送到远程仓库,也可以通过git pullgit fetch从远程仓库拉取更新。这是团队协作的基础。

注意:很多人一开始会混淆git pullgit fetchgit fetch只会将远程仓库的最新数据下载到本地,但不会自动合并到你的工作分支。而git pull = git fetch + git merge,是一个更“激进”的快捷操作。在团队协作中,我建议先git fetch查看一下别人做了什么,再决定如何合并,这比直接git pull更安全。

2.3 分布式 vs 集中式:Git的核心理念

理解Git的分布式特性,能让你更好地利用它的优势。在SVN这样的集中式系统里,中央服务器是唯一的权威。你要提交,必须联网;你要看历史,也要问服务器。而在Git中,每个开发者的本地仓库都是完整的克隆,拥有全部历史。这意味着:

  • 离线工作:你可以在飞机上、地铁里愉快地提交代码,等有网了再一次性推送。
  • 速度极快:几乎所有操作(查看历史、比较差异、切换分支)都在本地完成,瞬间响应。
  • 多重备份:每个成员的本地都是一个完整备份,极大地降低了数据丢失风险。
  • 灵活的工作流:你可以有多个远程仓库,采用诸如“主干开发”、“Git Flow”、“Forking工作流”等不同协作模型。

3. 从零开始:Git安装、配置与第一个仓库

理论说再多不如动手一试。这部分我们一步步完成Git的安装、基础配置,并创建你的第一个Git仓库。

3.1 安装Git:全平台指南

  • Windows:前往 Git 官网 下载安装程序。安装过程中有几个关键选项:
    • 选择组件:默认全选即可,特别是“Git Bash Here”和“Git GUI Here”在资源管理器右键菜单中非常方便。
    • 选择默认编辑器:推荐选择你熟悉的编辑器,如VSCode、Notepad++。如果不知道选什么,就用Vim(但需要学习基本操作)。
    • 调整PATH环境:选择“Git from the command line and also from 3rd-party software”。这会将Git工具添加到系统PATH,让你能在任意命令行窗口(如CMD、PowerShell)中使用Git。
    • 配置行尾转换:选择“Checkout Windows-style, commit Unix-style line endings”。这是为了跨平台协作时,自动处理Windows(CRLF)和Linux/macOS(LF)行尾符的差异,避免大量无意义的改动。
  • macOS
    • 最简单方法:打开终端(Terminal),输入xcode-select --install安装命令行工具,其中包含了Git。
    • 通过Homebrew:如果你安装了Homebrew,在终端输入brew install git可以安装最新版。
  • Linux:使用系统包管理器安装。例如在Ubuntu/Debian上:sudo apt update && sudo apt install git;在CentOS/Fedora上:sudo yum install gitsudo dnf install git

安装完成后,打开终端(Windows用户可以使用安装好的“Git Bash”或系统自带的终端),输入git --version,如果显示版本号(如git version 2.40.1),则说明安装成功。

3.2 首次使用前的必要配置

安装后第一件事是配置你的用户信息,这信息会记录在你的每一次提交中,是身份的标识。

git config --global user.name "你的姓名" git config --global user.email "你的邮箱"

这里的邮箱最好使用你在GitHub/GitLab等平台注册的邮箱,这样你的提交才能和平台账号关联起来,显示正确的头像和贡献图。

几个有用的全局配置:

# 让命令行输出带颜色,更易读 git config --global color.ui auto # 设置默认分支名为 main(当前社区更推荐使用 main 而非 master) git config --global init.defaultBranch main # 为常用命令设置别名,提升效率 git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit

配置完成后,可以用git config --list查看所有配置。

3.3 创建你的第一个仓库并完成首次提交

现在,让我们实际创建一个仓库。有两种常见场景:

场景一:初始化本地新项目

  1. 在你电脑上新建一个文件夹,例如my-first-project
  2. 进入该文件夹,在终端中执行:
    cd /path/to/my-first-project git init
    这个命令会在当前目录创建一个隐藏的.git文件夹,这就是Git仓库的所有数据所在。此时,这个目录就处于Git的管理之下了。
  3. 创建一个文件,比如README.md,并写入一些内容。
  4. 按照工作流操作:
    # 查看状态:会显示有一个未跟踪的文件 README.md git status # 将文件添加到暂存区 git add README.md # 或者添加所有当前目录下的新文件/修改 # git add . # 再次查看状态:会显示 README.md 已暂存,等待提交 git status # 提交到本地仓库,-m 后面是本次提交的说明,务必写清楚 git commit -m "feat: add project README file"
    恭喜!你完成了第一次本地提交。使用git log可以查看提交历史。

场景二:克隆现有的远程仓库(更常见)如果你想参与一个已有项目(比如从GitHub上),你会使用git clone

# 克隆远程仓库到本地,会在当前目录下创建一个与仓库同名的文件夹 git clone https://github.com/username/repository.git # 克隆到指定目录名 git clone https://github.com/username/repository.git my-project

克隆操作会自动将远程仓库(默认名为origin)的完整历史、所有分支下载到本地,并为你创建好跟踪关系。之后你就可以在这个本地副本上开始工作了。

实操心得:在团队项目中,我强烈建议永远在自己的分支上进行开发,而不是直接在main分支上修改。这能有效隔离你的工作,避免污染主线。具体操作我们会在分支部分详细说明。

4. 日常开发核心命令实战指南

掌握了基本流程后,我们来深入日常开发中最常用、也最容易出问题的命令和场景。

4.1 状态查看、差异比较与提交优化

  • git status:你的“导航仪”。任何时候不确定当前状态,先敲这个命令。它会清晰告诉你:哪些文件被修改了但未暂存,哪些已暂存等待提交,哪些是未跟踪的新文件。
  • git diff:你的“显微镜”。用于查看具体的改动内容。
    • git diff:比较工作区暂存区的差异。即,你做了哪些修改,但还没git add
    • git diff --staged(或git diff --cached):比较暂存区最后一次提交的差异。即,你git add了哪些改动,准备提交。
    • git diff HEAD:比较工作区最后一次提交的差异。即,你自上次提交以来所有的改动(包括已暂存和未暂存的)。

提交的艺术git commit -m “消息”是最简单的提交方式。但对于复杂的修改,一行消息说不清。这时可以使用git commit不加-m参数,它会打开配置的文本编辑器,让你编写多行的提交说明。一个良好的提交说明通常包括一个简短的标题(少于50字),空一行,然后是详细的正文,说明为什么修改,以及如何修改。

更高级的是git commit --amend,它有两个常用用途:

  1. 修改上一次提交的说明:如果你刚提交完发现提交信息写错了,可以git commit --amend,然后修改提交信息。
  2. 将漏掉的文件加入上一次提交:提交后才发现漏了某个文件?先git add 漏掉的文件,然后执行git commit --amend。这样不会产生一个新的提交,而是将漏掉的文件合并到上一次提交中。

    警告--amend会改变提交历史,只适用于尚未推送到远程仓库的本地提交。如果已经推送,强行修改历史会给协作者带来麻烦。

4.2 分支的创建、切换与合并

分支是Git的“杀手级”功能,让你能并行开展多条线的工作。

  • 查看与创建
    # 查看所有本地分支,当前分支前会标有 * git branch # 查看所有分支(包括远程分支) git branch -a # 创建新分支 feature-xxx git branch feature-xxx # 创建并切换到新分支(更常用) git checkout -b feature-xxx # 或者使用 switch 命令(Git 2.23+ 引入,语义更清晰) git switch -c feature-xxx
  • 切换与删除
    # 切换到已有分支 git checkout main git switch main # 删除已合并的分支 git branch -d feature-xxx # 强制删除未合并的分支(慎用!) git branch -D feature-xxx
  • 合并分支:当你完成一个功能分支的开发,需要将其成果合并回主分支。
    # 首先,切换到要合并到的目标分支(如 main) git switch main # 然后,合并来源分支(如 feature-xxx) git merge feature-xxx
    Git会尝试自动合并。如果修改没有冲突(例如,你们修改了不同的文件,或者同一文件的不同部分),它会创建一个新的“合并提交”。如果存在冲突(你和别人修改了同一文件的同一区域),Git会暂停,并在冲突文件中用<<<<<<<=======>>>>>>>标记出冲突内容。你需要手动编辑文件,解决冲突,删除这些标记,然后git add已解决的文件,最后git commit来完成合并。

4.3 远程协作:推送、拉取与跟踪

本地开发完成后,需要与团队同步。

  • git remote -v:查看已配置的远程仓库地址。
  • git push:将本地分支的提交推送到远程仓库。
    # 将当前分支推送到远程的同名分支,并建立跟踪关系(首次推送时) git push -u origin feature-xxx # 之后再次推送,只需 git push
  • git fetch:从远程仓库获取所有分支的最新信息,但不会自动合并到你的工作分支。这让你可以安全地查看别人的工作进展。
  • git pull:相当于git fetch+git merge。它会获取远程更新并立即合并到当前分支。如果远程分支有新的提交,而你的本地也有新的提交,可能会产生冲突需要解决。

    最佳实践:在git pullgit merge之前,先确保你的工作区是干净的(没有未提交的修改)。如果有,可以先git stash暂存起来。

4.4 后悔药:撤销与重置操作

操作失误了怎么办?Git提供了多种“后悔药”,但用法需谨慎。

  • 撤销工作区的修改:当你改了一个文件,但还没git add,想放弃所有修改,回到最后一次提交的状态。
    # 撤销指定文件的修改 git checkout -- filename.txt # 使用 restore 命令(Git 2.23+,更推荐) git restore filename.txt # 撤销所有未暂存的修改(危险!确认你真的不需要这些改动了) git restore .
  • 撤销暂存区的修改:文件已经git add到了暂存区,但你想把它挪回工作区。
    # 将指定文件从暂存区撤出,但保留工作区的修改 git reset HEAD filename.txt # 使用 restore 命令 git restore --staged filename.txt
  • 重置提交历史git reset是一个强大的命令,用于移动当前分支的指针。它有三种模式,区别在于对工作区暂存区的影响:
    • git reset --soft [commit]:移动分支指针到指定提交,但保留工作区和暂存区的内容。相当于撤销了提交,但改动还留在暂存区。常用于合并多个提交为一个。
    • git reset --mixed [commit]默认模式。移动分支指针,并且重置暂存区到指定提交的状态,但保留工作区的修改。相当于撤销了提交和git add操作,改动还在工作区。
    • git reset --hard [commit]最危险!移动分支指针,并且将工作区和暂存区都重置到指定提交的状态。所有未提交的修改都将永久丢失!仅在确定要抛弃所有本地改动时使用。

    黄金法则git reset --hard只对本地未推送的提交使用。一旦提交已推送到远程共享仓库,尽量避免使用会重写历史的resetamend,改用git revert(创建一个新的提交来撤销之前的提交),这样不会破坏他人的工作历史。

5. 高级技巧与高效工作流

当你熟悉基础操作后,这些技巧能极大提升你的效率和代码管理质量。

5.1 储藏(Stash):临时切换上下文的利器

你正在feature-A分支上热火朝天地 coding,突然需要紧急修复main分支的一个Bug。但当前的工作只做了一半,还没到可以提交的程度。这时git stash就是救星。

# 将当前工作区和暂存区的修改储藏起来,让工作区变干净 git stash # 储藏时添加说明 git stash push -m "正在开发用户登录功能" # 查看储藏列表 git stash list # 切换到其他分支(如 main)去修复Bug... git switch main # ... 修复完成并提交 # 切换回 feature-A 分支 git switch feature-A # 恢复最近一次的储藏,并从储藏列表中删除它 git stash pop # 或者只恢复但不删除储藏记录 # git stash apply stash@{0} # 删除某个储藏 git stash drop stash@{1}

stash为你创建了一个临时的、独立于分支的存储空间,让你可以放心地切换工作上下文。

5.2 变基(Rebase):整理清晰的提交历史

git merge会产生一个合并提交,有时会让历史线图变得复杂(多条线交织)。git rebase则提供了一种“变基”操作,可以将一个分支上的所有修改“移植”到另一个分支的最新提交之后,使得历史成为一条直线,更清晰。

# 假设你在 feature 分支上,想基于 main 分支的最新提交进行变基 git switch feature git rebase main

这个过程相当于:Git 会先保存feature分支上的所有新提交(记为A, B, C),然后将feature分支的基点移动到main分支的最新提交上,最后把保存的提交A, B, C依次重新应用到新的基点上。如果遇到冲突,需要解决并git rebase --continue

Merge vs. Rebase 的选择

  • 使用 Merge:当你需要保留完整的合并历史,特别是功能分支的独立性时。公共分支(如main,develop)的合并通常用merge
  • 使用 Rebase:当你想要一个更干净、线性的提交历史时。黄金法则:只对你本地尚未推送的提交进行变基。不要对已经推送到远程仓库的提交进行变基,因为这会重写历史,给其他协作者带来灾难。

5.3 .gitignore 文件:忽略不必要的文件

项目里总有些文件不需要纳入版本控制,比如编译产物(.class,.o,.exe)、IDE配置文件(.idea/,.vscode/)、依赖库(node_modules/,vendor/)、系统文件(.DS_Store)等。.gitignore文件就是用来定义这些忽略规则的。

在项目根目录创建.gitignore文件,每一行写一个匹配模式。例如:

# 忽略所有 .log 文件 *.log # 忽略 node_modules 目录及其下所有内容 node_modules/ # 忽略 build 目录 build/ # 但不要忽略 lib/build/important.txt !lib/build/important.txt # 忽略当前目录的 .env 文件,但不忽略子目录的 /.env

GitHub 提供了各种语言和项目的.gitignore模板,创建新项目时可以直接参考使用。

5.4 图形化工具与IDE集成

虽然命令行是掌握Git的根本,但图形化工具能提供更直观的视图。gitk(Git自带)和git gui是简单的内置工具。更强大的有SourcetreeForkGitKraken等。它们能可视化分支树、提交历史、解决冲突,对新手非常友好。

此外,现代代码编辑器如VSCodeIntelliJ IDEA都内置了优秀的Git支持。以VSCode为例,侧边栏的源代码管理视图可以清晰地显示文件状态、进行diff对比、暂存、提交、推送、拉取等操作,解决冲突也有直观的界面,大大降低了使用门槛。

我个人习惯是:日常的status,add,commit,push,pull在IDE内完成,高效直观;复杂的分支操作、历史查看、变基、重置等,则回到命令行,更精准可控。

6. 团队协作规范与常见问题排雷

在团队中使用Git,除了个人技能,遵守一些约定俗成的规范同样重要,这能避免大量协作冲突。

6.1 提交信息规范

好的提交信息是项目的历史书。推荐使用类似Conventional Commits的规范:

<类型>[可选 范围]: <描述> [可选 正文] [可选 脚注]

常见类型:

  • feat: 新功能
  • fix: 修复Bug
  • docs: 文档更新
  • style: 代码格式调整(不影响逻辑)
  • refactor: 代码重构
  • test: 测试相关
  • chore: 构建过程或辅助工具的变动

例如:feat(auth): add user login with OAuth 2.0。这能让历史一目了然,也便于自动生成更新日志。

6.2 分支管理策略

一个清晰的策略能让团队协作顺畅。Git Flow是一个经典模型,它定义了主要分支:

  • main: 存放稳定、可发布的代码。
  • develop: 日常开发集成分支。
  • feature/*: 功能分支,从develop拉出,合并回develop
  • release/*: 发布分支,用于测试和修复。
  • hotfix/*: 紧急修复分支,从main拉出,合并回maindevelop

对于中小型项目或持续交付团队,更简单的GitHub FlowTrunk-Based Development(主干开发)可能更合适:只有一个长期分支main,任何新功能都通过短生命周期的特性分支开发,通过Pull Request(PR)或Merge Request(MR)进行代码评审后合并。

6.3 常见疑难杂症与解决方案

  1. fatal: not a git repository:你当前所在的目录不是一个Git仓库。用git init初始化,或者cd到正确的仓库目录。
  2. 提交了错误文件或敏感信息
    • 如果尚未推送:使用git reset回退到之前的提交。
    • 如果已经推送:使用git revert创建一个新的提交来撤销之前的更改。如果提交了密码、密钥等敏感信息,情况更复杂,需要强制推送 (git push -f) 来重写远程历史,并立即在服务端重置所有相关凭证。这需要团队协调,并通知所有协作者
  3. 合并冲突:不要慌张。仔细阅读冲突标记,与相关同事沟通,手动编辑文件解决冲突。解决后git add冲突文件,然后完成合并 (git commitgit merge --continue)。
  4. git pull时出现 “refusing to merge unrelated histories”:当两个没有共同祖先的分支(比如新建的本地仓库和远程仓库)尝试合并时会出现。如果确定要合并,可以加上--allow-unrelated-histories参数。但通常这意味着你可能克隆或初始化错了,需要检查。
  5. 文件大小写问题:Git默认是大小写不敏感的。如果你将readme.md重命名为README.md,Git可能认为文件没变。使用git mv命令来重命名,或者配置git config core.ignorecase false(但可能引起其他问题)。

6.4 提升效率的Alias配置

将常用命令组合成别名,可以节省大量时间。把下面这些配置加入你的~/.gitconfig文件(或通过git config --global alias.xx设置):

[alias] st = status co = checkout br = branch ci = commit ca = commit -a cam = commit -am lg = log --oneline --graph --decorate --all last = log -1 HEAD unstage = reset HEAD -- undo = checkout -- # 查看简洁优美的提交图 graph = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

设置后,输入git st就等于git statusgit lg就能看到漂亮的提交树状图。

Git的学习曲线前期可能有些陡峭,但一旦掌握,它将成为你开发工作中不可或缺的得力助手。记住,最好的学习方式就是动手实践。找一个项目,从初始化仓库、创建分支、提交代码、合并冲突开始,一步步走一遍。遇到问题,善用git --helpgit [command] --help查看官方文档,或者搜索具体的错误信息。随着使用的深入,你会越来越体会到它带来的秩序和效率之美。

http://www.jsqmd.com/news/1398798/

相关文章:

  • Obfusk8:轻量级C++17二进制混淆库如何彻底防住逆向工程?
  • 百度网盘直链解析怎么用?手把手教你用开源工具3分钟跑通高速下载
  • AI 智能代理 OpenClaw:Windows v2.9.3 一键部署完整流程
  • GTA4图形修复终极指南:GTAIV.EFLC.FusionFix让2008年的自由城在现代PC上重获新生
  • 招聘时间一眼看清:Boss Show Time让每个职位的发布时间无处藏身
  • 爱马仕回收避雷指南,从询价到成交每一步都别踩坑 - 日常前沿快讯
  • res-downloader完整上手攻略:3步搞定视频号、抖音、QQ音乐等全网资源下载
  • dddlib代码生成器使用教程:自动生成领域模型的3个实用技巧
  • 我把关注三年的博主作品全存进了本地硬盘:douyin-downloader 抖音批量下载实测
  • 3个场景实测res-downloader下载神器:视频号、抖音、QQ音乐等资源一键拿下
  • overlay-kit高级技巧:如何在React组件外打开弹窗
  • 电脑内存总是不够用?这款免费内存清理工具 Mem Reduct 让老电脑3分钟满血复活
  • 用文字就能“画“出专业图表:GraphvizOnline 浏览器版 GraphViz 保姆级体验
  • Winlator-Frost 游戏崩溃怎么办?5 步排查 + 性能优化实用指南
  • 天道观后感24
  • BT下载连不上几个节点?这份每日自动更新的公共Tracker清单值得一试
  • 爱马仕包包深圳出手前养护指南,简单打理小幅提升回收报价 - 拾闻观天地
  • mathlib数学库快速上手全攻略:用代码证明数学定理的免费神器
  • Tea Sepolia Testnet必备工具:Tea Auto Bot安装与配置教程
  • NLP 多任务评测巡检:按任务拆指标,别用一个均值
  • 生命涌现的小龙虾技能之【Livestock Counting | 养殖场盘点计数】简介
  • 3步完成百度网盘免登录高速下载:pdown这个5MB小工具的完整用法
  • 修改pip与conda配置
  • OpenCore Legacy Patcher 完整教程:让 2007 年老旧 Mac 轻松运行最新 macOS
  • HoneySelect2 汉化去和谐加 MOD 一次到位:HS2-HF Patch 安装与进阶全攻略
  • 被苹果判了“退役“的老Mac,OpenCore Legacy Patcher免费续命最新macOS的完整指南
  • IP-Adapter 新手教程:10 分钟给 Stable Diffusion 加上图像提示,让 AI 照着参考图出图
  • 从零玩转 N_m3u8DL-RE:m3u8 视频下载与直播录制的完整实战笔记
  • 答非所问的 RAG,问题不在大模型:用 WeKnora 从零搭建企业知识库实战
  • Android 液态玻璃效果实战指南:三小时从零做出会“呼吸“的玻璃态控件