前言:Git和GitHub的区别

在上一篇文章中我们学习了Git的基础知识,这次让我们更进一步,了解如何使用GitHub进行协作。首先,让我们弄清楚很多人容易混淆的Git和GitHub的区别。

Git是一个版本控制系统。它在你的电脑上本地运行,跟踪和管理文件的变更历史。即使没有网络连接也能完美工作。

GitHub是一个托管Git仓库的网络服务。简单来说,它是一个可以将你的Git仓库上传到互联网上,与他人共享和协作的平台。除了GitHub之外,还有GitLab、Bitbucket等类似服务,但GitHub使用最为广泛。

打个比方,Git就像是日记本,而GitHub就是一个可以保存日记本并与朋友分享的云服务。

GitHub不仅仅是一个存储代码的地方,它已经成为全球开发者协作的最大社区。大多数开源项目都在GitHub上管理,很多公司在招聘时也会参考应聘者的GitHub主页。可见GitHub对现代开发者来说是多么重要的工具和作品集平台。

1. GitHub账户创建与初始设置

1.1 创建账户

创建GitHub账户的过程很简单。

  1. 访问github.com
  2. 点击"Sign up"按钮。
  3. 输入邮箱地址、密码和用户名。
  4. 完成邮箱验证。

用户名(Username)选择技巧:

  • 只能使用英文小写字母、数字和连字符(-)。
  • 选择一个看起来专业的名字。这个名字会成为你的GitHub URL(github.com/用户名)。
  • 避免太复杂或太长的名字。以后别人很难提到。
  • 如果可能,保持与其他平台使用的名字一致,有助于个人品牌建设。

1.2 设置个人资料

创建账户后,让我们设置个人资料。点击右上角的头像图标,进入"Settings"。

  • Profile picture:设置代表自己的照片或图标。
  • Bio:写一个简单的自我介绍。
  • Location:可以输入位置信息。
  • Website:添加个人博客或作品集链接。

2. 设置SSH密钥

要向GitHub上传代码需要进行身份验证。每次输入密码很麻烦,而且从安全角度来看也不好。设置SSH密钥可以安全地自动进行身份验证。

2.1 什么是SSH密钥?

SSH(Secure Shell)密钥是一种使用公钥加密方式的身份验证方法。会成对生成两个密钥。

  • 私钥(Private Key):只存储在你电脑上的秘密密钥。绝对不能与他人共享。
  • 公钥(Public Key):注册到GitHub的密钥。即使公开给他人也是安全的。

2.2 生成SSH密钥

打开终端,执行以下命令。

# 生成SSH密钥(邮箱改为你的GitHub账户邮箱)
ssh-keygen -t ed25519 -C "your_email@example.com"

执行命令后会出现几个问题。

# 密钥保存位置(建议使用默认值,按Enter)
Enter file in which to save the key (/Users/you/.ssh/id_ed25519):

# 设置密码短语(可选,建议设置以增加安全性)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

2.3 将密钥添加到SSH代理

将生成的SSH密钥注册到SSH代理。

# 启动SSH代理
eval "$(ssh-agent -s)"

# 添加私钥
ssh-add ~/.ssh/id_ed25519

2.4 在GitHub上注册公钥

首先复制公钥的内容。

# macOS
pbcopy < ~/.ssh/id_ed25519.pub

# Windows (Git Bash)
clip < ~/.ssh/id_ed25519.pub

# Linux
cat ~/.ssh/id_ed25519.pub
# 手动复制输出的内容

然后在GitHub上:

  1. 进入Settings > SSH and GPG keys。
  2. 点击"New SSH key"按钮。
  3. 在Title中输入可以识别这个密钥的名称(例如:"MacBook Pro"、"Office Desktop")。
  4. 在Key字段中粘贴复制的公钥。
  5. 点击"Add SSH key"按钮。

2.5 测试连接

确认SSH设置是否正确。

ssh -T git@github.com

首次连接时会询问是否信任该主机。输入"yes"。成功后会显示以下信息。

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

3. 创建和连接远程仓库

3.1 在GitHub上创建新仓库

让我们在GitHub网站上创建一个新仓库。

  1. 点击GitHub主页右上角的"+"按钮。
  2. 选择"New repository"。
  3. 输入仓库名称(Repository name)。
  4. 输入描述(Description)(可选但推荐)。
  5. 选择公开(Public)或私有(Private)。
  6. 点击"Create repository"。

仓库命名规则:

  • 使用英文小写字母、数字、连字符(-)、下划线(_)。
  • 选择一个能表明项目内容的明确名称。
  • 例如:my-portfolioreact-todo-apppython-data-analysis

3.2 连接本地仓库和远程仓库

如果你已经在本地有正在开发的项目,可以将其连接到GitHub仓库。

# 进入本地项目文件夹
cd my-project

# 初始化Git仓库(如果还没有的话)
git init

# 添加远程仓库
git remote add origin git@github.com:用户名/仓库名.git

# 确认远程仓库
git remote -v

origin是远程仓库的别名。按照惯例,主远程仓库称为origin。

3.3 git clone - 克隆远程仓库

将别人的项目或GitHub上已有的项目下载到本机时使用。

# SSH方式(推荐)
git clone git@github.com:用户名/仓库名.git

# HTTPS方式
git clone https://github.com/用户名/仓库名.git

# 以其他文件夹名称克隆
git clone git@github.com:用户名/仓库名.git my-folder-name

3.4 git push - 上传本地更改

将本地提交的内容上传到远程仓库。

# 基本push
git push origin main

# 首次push时(使用-u选项设置默认分支)
git push -u origin main

# 之后可以简化为
git push

使用-u选项后,本地的main分支和远程的origin/main分支会建立关联,之后只需输入git push即可。

3.5 git pull - 拉取远程更改

将其他人上传到远程仓库的更改拉取到本地。

# 拉取远程仓库的更改并合并
git pull origin main

# 如果已设置默认分支
git pull

git pull实际上一次执行两个操作:git fetch(下载远程更改)+ git merge(合并到本地分支)。

3.6 git fetch - 查看远程更改

获取远程仓库的更改,但不合并到本地分支。可以在查看更改后再决定是否合并。

# 获取远程的所有更改
git fetch origin

# 查看远程和本地的差异
git log origin/main..main  # 只在本地存在的提交
git log main..origin/main  # 只在远程存在的提交

# 确认后合并
git merge origin/main

4. 使用GitHub网页界面

GitHub无需终端也可以在网页上进行各种操作。

4.1 查看和编辑文件

  • 在仓库中点击文件可以查看内容。
  • 点击铅笔图标可以在网页上直接修改文件。
  • 修改后在下方输入提交信息,点击"Commit changes"即可。

4.2 查看提交历史

  • 在仓库主页点击"commits"链接。
  • 点击每个提交可以查看更改的内容。
  • 添加的行用绿色显示,删除的行用红色显示。

4.3 分支管理

  • 在分支下拉菜单中可以查看当前分支并切换到其他分支。
  • 也可以创建新分支。
  • 在Settings > Branches中可以更改默认分支。

4.4 Fork和Star

  • Star:给喜欢的项目加星收藏的功能。方便以后再找,也是表达对项目关注的方式。
  • Fork:将别人的仓库复制到自己的账户。可以在不影响原始仓库的情况下自由修改。主要用于为开源项目做贡献。

5. 编写README.md

README文件是项目的门面。访问GitHub仓库时首先看到的就是README文件。好的README可以提升项目价值,帮助他人理解和使用项目。

5.1 README应包含的内容

  • 项目标题和描述:简要说明这是什么项目
  • 安装方法:如何在本地运行项目
  • 使用方法:基本用法或示例
  • 功能:主要功能列表
  • 技术栈:使用的技术或库
  • 贡献方法:给想要贡献的人的指南
  • 许可证:项目的使用条件

5.2 README编写示例

# 项目名称

在此处编写项目的简要描述。

## 功能

- 功能1:描述
- 功能2:描述
- 功能3:描述

## 安装方法

```bash
# 克隆仓库
git clone https://github.com/username/project.git

# 进入目录
cd project

# 安装依赖
npm install
```

## 使用方法

```bash
# 运行开发服务器
npm run dev
```

## 技术栈

- Frontend: React, TypeScript
- Backend: Node.js, Express
- Database: PostgreSQL

## 贡献

1. Fork这个仓库。
2. 创建新分支(`git checkout -b feature/amazing-feature`)。
3. 提交更改(`git commit -m 'Add amazing feature'`)。
4. Push到分支(`git push origin feature/amazing-feature`)。
5. 创建Pull Request。

## 许可证

MIT License

5.3 Markdown语法技巧

  • # 标题:H1标题(用#的数量调节H1~H6)
  • **粗体**:粗体文字
  • *斜体*:斜体文字
  • `代码`:行内代码
  • ```语言名 代码 ```:代码块
  • - 项目:无序列表
  • 1. 项目:有序列表
  • [文本](URL):链接
  • ![替代文本](图片URL):图片

6. 使用Issues和Projects管理项目

6.1 使用Issues

Issues是管理项目待办事项、bug、功能请求等的工具。

编写Issue的技巧:

  • 编写清晰的标题。
  • 具体描述问题情况或需求。
  • 如果是bug报告,包含复现方法。
  • 附上相关截图或日志。

使用Labels:

可以给Issues添加标签进行分类。

  • bug:bug修复
  • enhancement:功能改进
  • documentation:文档相关
  • good first issue:适合首次贡献的问题
  • help wanted:需要帮助的问题

创建Issue模板:

在仓库中创建.github/ISSUE_TEMPLATE/文件夹并添加markdown文件,就可以使用Issue模板了。

6.2 使用Projects

GitHub Projects是看板风格的项目管理工具。

基本使用方法:

  1. 在仓库的"Projects"标签页创建新项目。
  2. 创建列(例如:To Do、In Progress、Done)。
  3. 将Issues或Pull Requests作为卡片添加。
  4. 随着工作进展将卡片移动到其他列。

自动化功能:

Projects中可以设置自动化规则。

  • 新Issue创建时自动添加到"To Do"列
  • Pull Request合并时自动移动到"Done"

7. 美化GitHub个人主页

GitHub个人主页是开发者的第一印象。精心设计的主页对求职或合作机会会产生积极影响。

7.1 创建个人主页README

GitHub有一个隐藏功能。如果创建一个与用户名同名的仓库,该仓库的README会显示在个人主页上。

  1. 创建与用户名同名的仓库(例如:username/username)。
  2. 编写README.md文件。
  3. 在个人主页查看效果。

7.2 个人主页README示例

# 你好!我是[姓名]

我是一名立志成为Web开发者的初级开发者。

## 技术栈

### Languages
![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)
![Python](https://img.shields.io/badge/-Python-3776AB?style=flat&logo=python&logoColor=white)

### Frameworks
![React](https://img.shields.io/badge/-React-61DAFB?style=flat&logo=react&logoColor=black)
![Node.js](https://img.shields.io/badge/-Node.js-339933?style=flat&logo=node.js&logoColor=white)

## GitHub统计

![GitHub stats](https://github-readme-stats.vercel.app/api?username=用户名&show_icons=true)

## 联系方式

- Email: email@example.com
- Blog: https://myblog.com

7.3 美化个人主页的工具

  • Shields.io:可以制作各种徽章。
  • GitHub Readme Stats:以图片形式展示GitHub统计信息。
  • GitHub Profile Trophy:以奖杯形式展示成就。
  • GitHub Readme Activity Graph:展示活动图表。

7.4 填充贡献图(绿草地)

个人主页的绿色贡献图是展示持续开发活动的指标。以下活动会被计入贡献。

  • 向默认分支提交
  • 开启Issue
  • 创建Pull Request
  • 审查Pull Request

提示:填充绿草地本身不应该成为目的。坚持编写有意义的代码,它会自然地被填满。单纯为了填充绿草地而进行无意义的提交反而会给人留下不好的印象。

结语

在这篇文章中,我们了解了GitHub的各种功能。从SSH密钥设置到远程仓库管理、README编写、Issues和Projects使用,以及美化个人主页。

GitHub不仅仅是一个简单的代码仓库,更是开发者的社交网络和作品集平台。你可以为开源项目做贡献,分享自己的项目,与其他开发者交流,在这个过程中成长。

一开始可能因为不熟悉而感到困难,但每天使用一点就会很快上手。不要害怕犯错,积极地使用GitHub吧。从上传个人项目、给别人的项目加星、为感兴趣的开源项目做一点小贡献开始。

在下一篇文章中,我们将更详细地了解分支策略和使用Pull Request进行团队协作的方法。祝你与GitHub一起享受愉快的开发之旅!