Git¶
Note
对原先的内容比较不满意,打算根据实际开发过程重写。
What is Git¶
如果你已经接触了全世界最大的交友平台github,那你应该会见到许多代码仓库(repo
PS:上述项目变动过程也是 commit 的 messaage type,我们会在后面在讲 git commit 的时候详述。
对于一个项目,我们应该期望能保留版本变迁的历史。你可能会想,项目只要一直保持最新的即可,就像游戏一样,总是新的版本优于旧的版本(对 ... 对吗
git 正是一个分布式版本控制系统(DVCS)的典范。
Version control with Git¶
- 分布式版本控制系统 (DVCS)
- 存储库中存储对软件的所有更改
- 每个开发人员的存储库都是完整的,工作不受 central server 的可用性和性能的限制
- 中断或离线区间仍可以查阅完整的项目历史记录
Git workflow¶
- Git 如何记录代码库的版本演变
- 版本以提交 (commit) 的形式存在。每次提交都代表了代码库在某个特定时间点的状态,包括了代码的修改、添加和删除等操作。
- Git 支持标签 (tag) 来标记特定的版本。标签可以帮助开发者快速定位和回溯到特定的版本,方便版本管理和发布。
- 如何理解文件系统的快照
- 快照记录了项目在某个时间点的完整状态,而不仅仅是保存了文件的更改。
- 对于未修改的文件,Git 只保存一个指向原文件的指针
- 分支只是指向不同快照的引用,而不是创建了多个副本。
- 什么是 Git 的三棵树
- 工作目录树:即工作目录或工作区
- 暂存区域树:即暂存区、索引或缓存
- 版本库树:即版本库、仓库或对象数据库
- 开发过程中,在工作区中编辑文件,使用 git add 将修改文件添加到暂存区,用 git commi t 将文件快照提交到版本库中,形成新的提交历史
Install Git(on Linux)¶
- 安装
$ sudo apt-get update $ sudo apt-get install git - 验证
$ git --version git version 2.9.2 - 配置
$ git config --global user.name "your_name" $ git config --global user.email "your_email"
Setting up a repository¶
Git 存储库是项目的虚拟存储,允许保存代码版本
git init¶
创建新的存储库 (create a new repo)
- 在当前目录下创建一个新的.git子目录
- 创建一个新的主分支(create a new main branch)
git init
git clone¶
克隆现有存储库
git clone <repo> <directory> #克隆到特定文件夹
git clone --branch <tag> <repo> #克隆特定标签
git clone -depth=1 <repo> #克隆一个repo,仅包含最近的提交
git clone --branch #克隆指定分支
git config¶
用于在全局或本地项目级别设置 Git 配置,执行命令将修改gitconfig配置文件
Usage Git config levels and files - --local - 默认情况 - 应用于git config被调用的上下文存储库 - 位于.git/config - --global - 特定于用户 - 位于用户主目录中的文件夹 - --system - 应用于整台计算机 - 位于系统根目录路径之外
git alias¶
- 创建映射到较长命令的较短命令
- 无直接命令,通过 git config 和 git 配置文件创建
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
git commit¶
- Git add 将挂起的更改从工作目录提升到暂存区域(stage changes)
git add <directory>/<filename> #添加指定文件
git add . #添加所有已修改文件
Git SSH¶
SSH key 是 SSH 网络协议的访问凭据 . SSH 用于不安全的开放网络的计算机之间的远程通信
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
1. 开始密钥创建 ¶
Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
2. 设定保存密钥文件的位置 ,Enter 接受默认位置 ¶
Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again]
3. 输入安全密码 ¶
ssh-add -K /Users/you/.ssh/id_rsa
4. 将 SSH key 添加到本地 SSH 代理 ¶
Inspecting a repository
git status
列出文件已暂存、未暂存、未跟踪
git status
git log
显示已提交的快照,仅对提交的历史记录进行操作
git log #Space滚动,q退出
git log -n
git revert
撤销对存储库提交历史记录的更改
git revert
Using branches
分支是一个代码库中中的一个独立的开发路径。理解 Git 分支的概念是理解 Git 工作流的关键之一。
branch
- 一个repo会有一个主分支,通常为master或main
- master是项目的主要开发线,用于存放稳定的代码,通常是发布版本的基础
- 开发线针对特定功能或需求所进行的一系列代码修改和开发工作的连续路径,有主要开发线、功能开发线、修复开发线
- 在Git中,每个branch可以视为一个独立的开发线
git branch #列出存储库所有分支
git branch <branch> #创建一个名为<branch>的新分支
git branch -d <branch> #删除指定分支
git branch -D <branch> #强制删除
git branch -m <branch> #将当前分支重命名为<branch>
git branch -a #列出所有远程分支
git checkout
git checkout <branchname>
Merge conflicts
多个分布式作者同时编辑相同的内容导致冲突
1. Git fails to start the merge
error: Entry '
评论区