9 Git 与 GitHub 入门
本章旨在帮助读者循序渐进地掌握 Git 及 GitHub 的基本使用方法。从环境搭建、基本操作到进阶功能,本章均提供详细的命令示例和实际操作流程,适合初学者和希望提升实战能力的开发者。
9.1 环境搭建与基础配置
9.1.1 Git 与 GitHub 简介
Git 是一种分布式版本控制系统,能够高效地记录项目的历史变更;而 GitHub 则是一个支持 Git 的公共代码托管平台,特别适合存放文本文件,如代码、Markdown 文档等。通过 GitHub,开发者不仅可以管理自己的项目,还能与他人协作、提交 Pull Request 贡献代码。
9.1.2 安装 Git 与注册 GitHub 账号
完成以下两步,即可开始使用 Git 与 GitHub:
安装 Git 客户端
访问 Git 官网 下载并安装适合自己操作系统的版本。注册 GitHub 账号
前往 GitHub 注册页面 完成账号注册。
提示: 在 Windows 系统中安装 Git 后,右键菜单中会出现“Git GUI here”与“Git Bash here”。其中,“Git Bash”是一个命令行工具,建议初学者使用该终端进行 Git 操作。
9.1.3 配置 Git 终端的中文显示
为避免中文显示乱码,可执行以下命令进行配置:
git config --global core.quotepath false # status 输出中文不再转码
git config --global gui.encoding utf-8 # 图形界面编码设置
git config --global i18n.commit.encoding utf-8 # 提交信息编码设置
git config --global i18n.logoutputencoding utf-8 # 日志输出编码设置
export LESSCHARSET=utf-8 # 为 less 分页器设置编码
9.1.4 配置用户名与邮箱
在 Git 上提交代码时,需要配置用户名与邮箱:
git config --global user.name "your_name"
git config --global user.email "your_email"
9.2 Git 基础操作
9.2.1 初始化与克隆仓库
初始化本地仓库
在当前目录下创建一个新目录并启用 Git:git init sample
克隆远程仓库
将 GitHub 上的项目克隆到本地(示例仓库为course_bioinfo_training
):git clone https://github.com/GuangchuangYu/course_bioinfo_training.git
9.2.2 常用命令
查看仓库状态
git status
添加文件到暂存区
git add newfile.R
提交更改
git commit -m "添加新功能代码"
查看提交历史
git log # 显示所有提交记录 git log -- [file] # 查看某个文件的提交历史 git log -p [file] # 显示文件内容的变动详情
管理远程仓库
git remote -v # 查看所有上游仓库地址
9.3 分支管理
分支使我们能够在同一项目中独立开发新功能或修复错误,避免直接修改主分支(master)。
9.3.1 创建、切换与删除分支
创建新分支
git branch <branch_name>
从特定提交创建分支(回溯操作)
git checkout <commit_id> -b new_branch
切换分支
git checkout <branch_name>
合并分支到主分支
git checkout master git merge <branch_name> # 出现冲突时,解决后再 commit
删除本地分支
git branch -d <branch_name> # 安全删除 git branch -D <branch_name> # 强制删除
9.3.2 从远程分支检出
当远程仓库存在分支时,可按以下步骤操作:
仅有一个 Remote 时
git fetch git checkout test
有多个 Remote 时
git fetch git checkout -b test <remote_name>/test # 或使用跟踪模式 git checkout -t <remote_name>/test
9.4 标签(Tag)管理
标签常用于标记版本发布点,便于后续查找和回滚。
9.4.1 打标签与删除标签
打标签
git tag -a v1.01 -m "Release version 1.01"
删除本地标签
git tag -d v1.01
删除远程标签
git push origin :refs/tags/v1.01
9.4.2 推送标签到远程仓库
推送单个标签
git push origin v1.0
推送所有标签
git push --tags
注意: 如果需要在 tag 基础上进行修改,请先创建一个分支:
git checkout -b new_branch tag_name
9.5 与远程仓库同步
9.5.1 基本的 Push 与 Pull 操作
从远程仓库拉取最新更改
git pull
将本地提交推送到远程仓库
git push
9.5.2 更新 Fork 的仓库
当 fork 的项目有了更新,可以按以下步骤同步:
# 添加上游仓库
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
# 同步上游更新到本地
git fetch upstream
git checkout master
git merge upstream/master
如果本地 master 有修改,合并可能会冲突。建议在开发时在其他分支上操作,保持 master 的干净。
9.6 GitHub 的高级使用
9.6.1 配置 SSH 密钥
为避免每次推送代码时输入用户名和密码,可配置 SSH 密钥:
生成 SSH 密钥
ssh-keygen
默认情况下,私钥存放在
~/.ssh/id_rsa
,公钥存放在~/.ssh/id_rsa.pub
。查看公钥并复制内容
cat ~/.ssh/id_rsa.pub
添加公钥到 GitHub
登录 GitHub,进入 Settings → SSH and GPG keys,点击“New SSH key”,粘贴公钥后保存。
9.6.2 在 GitHub 上创建和配置 Repository
9.6.2.1 方法一:直接克隆已有仓库
git clone https://github.com/your_username/your_repo.git
9.6.2.2 方法二:从零开始新建仓库
在 GitHub 上点击右上角的 “+” 按钮,选择 “Create a new repository”,并设置仓库名称、描述、公开或私有等信息。
在本地新建仓库并关联远程仓库:
mkdir myfirstrepo cd myfirstrepo git init # 添加远程仓库地址(可使用 HTTPS 或 SSH 协议) git remote add origin https://github.com/your_username/myfirstrepo.git # 或更改为 SSH 地址 git remote set-url origin git@github.com:your_username/myfirstrepo.git # 添加文件并提交 echo "# myfirstrepo" > README.md git add README.md git commit -m "first commit" # 推送到远程仓库 git push -u origin master
查看和管理远程仓库链接:
git remote -v # 查看所有远程仓库信息 git remote show origin # 查看 origin 详细信息
9.6.3 Pull Request 流程
当发现他人项目中的问题并希望贡献代码时,可通过 Pull Request 提交改动。流程如下:
- 在 GitHub 上 Fork 目标仓库。
- 在自己的 Fork 上创建新分支,进行修改、提交并推送。
- 在 GitHub 网站上进入目标仓库的 “Pull requests” 页面,点击 “compare across forks”。
- 选择正确的 base repository 与 head repository,填写描述后提交 Pull Request。
- 作为项目维护者,可对提交的改动进行审核、讨论,确认无误后合并代码。
9.7 Git 子模块管理
子模块允许一个 Git 仓库中嵌入另一个独立的 Git 仓库,适用于引入第三方库或依赖项目。
9.7.1 克隆包含子模块的仓库
在克隆仓库时,使用 --recursive
参数以同时获取子模块:
git clone --recursive https://github.com/username/parent_repo.git
若已经克隆仓库但未包含子模块,可执行:
git submodule update --init
# 若存在嵌套子模块:
git submodule update --init --recursive --jobs 2
9.7.2 子模块日常操作
拉取主仓库及子模块的更新
git pull --recurse-submodules
更新子模块至最新提交
git submodule update --remote
添加子模块
git submodule add https://github.com/your_username/child_repo.git path/to/submodule git submodule init
9.8 GitHub 替代方案与高级话题
9.8.1 代码托管平台替代方案
除了 GitHub,还可以使用腾讯云开发平台等国内服务。以腾讯云为例,操作步骤如下:
在腾讯云开发平台上创建一个同名项目。
将远程仓库地址修改为腾讯云提供的地址:
git remote rm origin git remote add origin https://git.dev.tencent.com/your_username/your_project.git git push --set-upstream origin master
注意: 部分平台的 URL 可能较长,需注意在远程链接配置时的准确性。
9.8.2 自建 Git 服务器
只要服务器支持 SSH,均可搭建自己的 Git 服务器。具体操作可参阅相关教程,如《设置私有 Git 服务器》。
9.8.3 清理 Git 历史
在项目开发过程中,可能需要删除大文件或敏感信息。推荐使用 BFG Repo-Cleaner 工具进行清理:
java -jar bfg-1.13.0.jar --delete-files M.RDS
9.9 实战案例:实现一个小目标
下面展示一个实际的 Git 使用流程,记录完成一个小目标的全过程:
初始化仓库
mkdir myfirstrepo cd myfirstrepo git init
编辑代码
在本地仓库中新建或修改文件(如
xiaomubiao.R
),实现一个小功能或目标。查看状态
git status
添加文件
git add xiaomubiao.R
提交更改
git commit -m "完成了一个小目标"
设置远程仓库
在 GitHub 上创建一个新仓库,并获取远程仓库地址。将远程仓库地址添加为本地仓库的 origin 远程仓库:
git remote add origin https://github.com/your_username/myfirstrepo.git
推送至远程仓库
git push
查看提交历史
git log
通过不断记录并提交每个小目标,逐步构建出完整的项目版本历史。
9.10 总结
本章内容涵盖了 Git 与 GitHub 的基本操作与常见进阶功能,希望读者通过反复练习,能够在实际开发中灵活运用这些命令,构建高效的版本控制与协作流程。