文章大纲
Git 是什么?-- 分布式版本控制系统
Git 是一种开源的分布式版本控制系统,广泛应用于软件开发领域,尤其是在协同工作环境中。
它为程序员提供了一套必备的工具,使得团队成员能够有效地管理和跟踪代码的历史变更。下面是 Git 的主要功能和作用的规范描述:
官方文档:Git - Book
Git 基础:Git 基础知识
版本控制系统简介
使用版本控制的优点
实现跨区域多人协同开发
追踪和记载一个或者多个文件的历史记录
组织和保护你的源代码和文档
统计工作量
并行开发、提高开发效率
跟踪记录整个软件的开发过程
减轻开发人员的负担,节省时间,同时降低人为错误
Git 基本概念
工作区、暂存区和 Git 仓库区
工作区(Working Directory):
当我们在本地创建一个 Git 项目,或者从 GitHub 上 clone 代码到本地后,项目所在的这个目录就是“工作区”。这里是我们对项目文件进行编辑和使用的地方。暂存区(Staging Area):
暂存区是 Git 中独有的一个概念,位于 .git 目录中的一个索引文件,记录了下一次提交时将要存入仓库区的文件列表信息。使用 git add 指令可以将工作区的改动放入暂存区。仓库区 / 本地仓库(Repository):
在项目目录中,.git 隐藏目录不属于工作区,而是 Git 的版本仓库。这个仓库区包含了所有历史版本的完整信息,是 Git 项目的“本体”。
文件状态
文件在 Git 工作区中的状态可以是:
- 已跟踪:文件已被纳入版本控制,根据其是否被修改,可以进一步分为未修改(Unmodified)、已修改(Modified)或已暂存(Staged)。
- 未跟踪:文件存在于工作目录中,但还没被纳入版本控制,也未处于暂存状态。
分支
分支是 Git 的一大特性,支持轻量级的分支创建和切换。Git 鼓励频繁使用分支和合并,使得并行开发和错误修正更为高效。
主要功能
代码历史记录跟踪
Git 记录每一次代码提交,允许用户查看项目的历史版本和变更记录,从而理解每个阶段的开发细节。
团队协作
支持多人同时对同一项目工作,提供了合并、分支和版本控制的功能,以确保多人协作的效率和代码的整合性。
变更审查
允许开发者查看代码变更的具体内容,了解谁在何时做了哪些修改,这对于代码审查和质量控制至关重要。
实现机制
特性 | 描述 |
---|---|
分布式架构 | 与集中式版本控制系统不同,Git 在每个开发者的机器上都存有完整的代码库副本,包括完整的历史记录。这种分布式的特性增强了数据的安全性和获取效率。 |
分支管理 | Git 的分支管理功能非常灵活,支持无缝切换到不同的开发线路(分支),并允许独立开发、测试新功能,最终通过合并操作将这些功能稳定地集成到主项目中。 |
快照系统 | Git 通过快照而非差异比较来管理数据。每次提交更新时,Git 实际上是在存储一个项目所有文件的快照。如果文件没有变化,Git 只是简单地链接到之前存储的文件快照。 |
1. 安装 Git
1.1 Windows 系统
- 下载并安装适合您 Windows 版本的安装程序:下载地址
- 按照安装向导完成安装。
- 打开终端(win+r→cmd),输入指令
git --version
检查是否安装成功。
1.2 Linux 系统
- 通过包管理器安装 Git:
sudo apt update sudo apt install git
- 输入指令
git --version
检查安装版本。
2. Git 托管平台
- 是全球最大的代码托管平台之一,拥有丰富的开源项目和活跃的开发者社区。它提供了版本控制、项目管理、协作开发等功能,并支持多种编程语言。
- 一个自托管或基于云的平台,提供了完整的 DevOps 工具链,包括代码托管、持续集成/持续部署(CI/CD)、问题跟踪等。
- 国内的代码托管平台,提供了代码托管、项目管理、协作开发等功能,对国内开发者来说,访问速度可能更快,也更符合国内的使用习惯。
Github 需要魔法,可以选择自行选择使用。
3. 常用 Git 操作
基础指令
指令 | 描述 |
---|---|
git config |
配置用户信息和偏好设置 |
git init |
初始化一个新的 Git 仓库 |
git clone |
克隆一个远程仓库到本地 |
git status |
查看仓库当前的状态,显示有变更的文件 |
git add |
将文件更改添加到暂存区 |
git commit |
提交暂存区到仓库区 |
git branch |
列出、创建或删除分支 |
git checkout |
切换分支或恢复工作树文件 |
git merge |
合并两个或更多的开发历史 |
git pull |
从另一仓库获取并合并本地的版本 |
git push |
更新远程引用和相关的对象 |
git remote |
管理跟踪远程仓库的命令 |
git fetch |
从远程仓库获取数据到本地仓库,但不自动合并 |
进阶指令
指令 | 描述 |
---|---|
git stash |
暂存当前工作目录的修改,以便可以切换分支 |
git cherry-pick |
选择一个提交,将其作为新的提交引入 |
git rebase |
将提交从一个分支移动到另一个分支 |
git reset |
重设当前 HEAD 到指定状态,可选修改工作区和暂存区 |
git revert |
通过创建一个新的提交来撤销之前的提交 |
git mv |
移动或重命名一个文件、目录或符号链接,并自动更新索引 |
git rm |
从工作区和索引中删除文件 |
每个指令都有其特定的用途和场景,详细的使用方法和参数可以通过命令行的帮助文档(git command -h
,例如 git pull -h
)来获取更多信息。
4. tips
4.1 全局设置 vs. 本地设置
- 全局设置:这些设置影响你在该系统上所有没有明确指定其他用户名和电子邮件的 Git 仓库。这是设置默认用户名和电子邮件的好方法。
- 本地设置:这些设置仅适用于特定的 Git 仓库。这对于你需要在不同项目中使用不同身份时很有用,例如区分个人和工作项目。
4.2 如何配置
全局设置用户信息
打开终端或命令提示符,并输入以下命令来设置全局用户名和电子邮件地址:git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
这里的
"Your Name"
和"your.email@example.com"
应替换为你自己的姓名和电子邮件。本地设置用户信息
首先,确保你当前处于你想要配置的 Git 仓库的目录中。然后,输入以下命令来仅为该仓库设置用户名和电子邮件地址:git config --local user.name "Your Name" git config --local user.email "your.email@example.com"
同样,替换
"Your Name"
和"your.email@example.com"
为该特定项目中使用的姓名和电子邮件。
4.3 验证设置
在设置完用户信息后,你可能想要验证这些设置以确保它们被正确应用。
查看全局配置:
git config --global --list
查看仓库配置:
git config --local --list
查看特定配置项:
git config user.name git config user.email
4.4 Git 四步曲
在Git的日常使用中,下面四步曲是常用的流程,尤其是在团队协作环境中。
添(Add)
- 命令:
git add <文件名>
或git add .
- 作用:将修改过的文件添加到本地暂存区(Staging Area)。这一步是准备阶段,你可以选择性地添加文件,决定哪些修改应该被包括在即将进行的提交中。
提(Commit)
- 命令:
git commit -m '描述信息'
- 作用:将暂存区中的更改提交到本地仓库。这一步是将你的更改正式记录下来,每次提交都应附带一个清晰的描述信息,说明这次提交的目的或所解决的问题。
拉(Pull)
- 命令:
git pull
- 作用:从远程仓库拉取最新的内容到本地仓库,并自动尝试合并到当前分支。这一步是同步的重要环节,确保你的工作基于最新的项目状态进行。在多人协作中,定期拉取可以避免将来的合并冲突。
推(Push)
- 命令:
git push
- 作用:将本地仓库的更改推送到远程仓库。这一步是共享你的工作成果,让团队成员看到你的贡献。
帮助团队成员有效地管理和同步代码,避免工作冲突,确保项目的顺利进行。正确地使用这些命令可以极大地提高开发效率和协作质量。
5. 常用插件
- GitLens: 在代码行上显示 Git 提交信息。
- Git Graph: 类似于 SourceTree 的可视化版本控制插件。
- Git History: Git 日志查看器。
仅演示常规使用,其他优点,大家可以自行挖掘。
GitLens:
Git Graph:
Git History:
6. 常规开发流程
- Fork 目标项目
- 获取仓库链接
git clone https://github.com/MrCatAI/Tutorial.git # 修改为自己frok的仓库
cd Tutorial/
git branch -a
git checkout -b camp3 origin/camp3
查看分支
切换到第三期的分支
查看分支内容
git checkout -b camp3_577 # 自定义一个新的分支
示例:
示例文件路径
./data/Git/task/camp3_id.md
- 创建自己的破冰文件
touch ./data/Git/task/camp3_557.md # 修改为自己的问卷ID
- 提交更改到分支
git add .
git commit -m "add git_557_introduction" # 提交信息记录
git push origin camp3_577
(大家提交使用英文,避免仓库同步错误)
注:初始化时可能需要创建对应的 token:(示例,可根据实际提示完成)
查看提交
在 github 页面将修改的内容 PR 到 Tutorial
按要求编写 title
git_557_introduction # 请统一 git_<id>_introduction 格式,方便审核
下面可以查看修改的内容
PR 示例链接:https://github.com/InternLM/Tutorial/pull/790
也可以合并到自己的仓库
自己的仓库,可以自行 merge,作业提交到 Tutorial 需要维护者审核。
作业
- https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Git/task.md
咱们国家的实战营,就不要用外国的扯犊子服务了,完了阿美莉卡把这扯犊子网站一关,还学个p 啊。
解决方案:
- https://stackoverflow.com/questions/23885449/unable-to-resolve-unable-to-get-local-issuer-certificate-using-git-on-windows
git config --global http.sslbackend schannel
【大家可以叫我】:shiter
【坐标】:陕西
【专业/职业】:大数据AI工程师
【兴趣爱好】: 游泳
【项目技能】cv
【组队情况】无
【本课程学习基础】:不太会
【本期活动目标】:做个领域问答机器人
由于我家网络,系统,git 还开了两阶段认证,所以用gui 登录 提交一下
之前公司当项目经理时候也这么操作过,有点忘了。
提交的PR
我创建的仓库:
其他学习内容
什么是 Git 版本控制工程化 最佳实践
参考文献
大模型实战营 地址
- https://openxlab.org.cn/models/InternLM/subject
本人学习系列笔记
第二期
- 《书生·浦语大模型实战营》第1课 学习笔记:书生·浦语大模型全链路开源体系
- 《书生·浦语大模型实战营》第2课 学习笔记:轻松玩转书生·浦语大模型趣味 Demo
- 《书生·浦语大模型实战营》第3课 学习笔记:搭建你的 RAG 智能助理(茴香豆)
- 《书生·浦语大模型实战营》第4课 学习笔记:XTuner 微调 LLM:1.8B、多模态、Agent
- 《书生·浦语大模型实战营》第5课 学习笔记:LMDeploy 量化部署 LLM 实践
- 《书生·浦语大模型实战营》第6课 学习笔记:Lagent & AgentLego 智能体应用搭建
- 《书生·浦语大模型实战营》第7课 学习笔记:OpenCompass 大模型评测实战
第三期
入门岛
课程资源
第三期 学院闯关手册
- https://aicarrier.feishu.cn/wiki/XBO6wpQcSibO1okrChhcBkQjnsf
第三期 作业提交
- https://aicarrier.feishu.cn/share/base/form/shrcnZ4bQ4YmhEtMtnKxZUcf1vd
第二期 学员手册
- https://aicarrier.feishu.cn/wiki/KamPwGy0SiArQbklScZcSpVNnTb
算力平台
- https://studio.intern-ai.org.cn/console/dashboard
- https://studio.intern-ai.org.cn/
课程文档
- https://github.com/InternLM/Tutorial/tree/camp2
课程视频
- https://www.bilibili.com/video/BV15m421j78d
代码仓库
- https://github.com/InternLM/Tutorial/tree/camp2
优秀项目展示与学习
- https://aicarrier.feishu.cn/wiki/DoKWwqslwiyjjKkHhqJcvXAZnwd?table=tblyxy5MZV7gJ7yS&view=vew0rj0WuN
论文
其他参考
原始文档
https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Linux/readme.md
本人博客: