首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Git 与 GitHub 协同工作流:从0到1搭建版本控制体系

Git 与 GitHub 协同工作流:从0到1搭建版本控制体系

原创
作者头像
stark张宇
发布2025-10-10 12:43:17
发布2025-10-10 12:43:17
310
举报
文章被收录于专栏:GitGit

🎯 学习目标

完成本课程后,学习者将能够:

  • 从0到1创建裸仓库、理解本地仓库、工作目录、暂存区、远程仓库的核心概念
  • 对本地仓库、工作目录、暂存区、远程仓库全流程操作的最佳实践
  • 设置远程仓库( GitHub ),Git与GitHub的简单同步

一、创建裸仓库和初始化

1、创建裸仓库,本地仓库诞生

所有的最简单的Git操作都是从一个裸仓库的方式演变过来的,所以学习Git的第一步要创建本地仓库 ( Local Repository ),使用git init project 命令创建的就是你的本地仓库了,位于你的电脑上,存储所有版本历史记录。

代码语言:bash
复制
[git@bogon project]$ ll -a
total 0
drwxrwxr-x. 3 git git  18 Oct 10 08:58 .
drwx------. 8 git git 207 Oct 10 08:58 ..
drwxrwxr-x. 7 git git 119 Oct 10 08:58 .git

2、Git初始化

要对裸仓库进行初始化,Git 提交(commit)时必须关联用户信息,用于标识提交者,是团队协作和代码追溯的基础。安装完成后,需要配置用户名和邮箱(用于提交代码时标识身份),在终端 / 命令行中运行:

代码语言:bash
复制
git config --global user.name "stark"  # 例如:"stark"
git config --global user.email "stark@126.com"  # 例如:"stark@126.com"

跨平台协作关键,不同系统换行符差异(Windows 用 CRLF,Linux/macOS 用 LF)会导致代码冲突,需统一配置换行符处理规则。

代码语言:bash
复制
# 提交时自动将换行符转为 LF,拉取时自动转为系统默认换行符
git config --global core.autocrlf true

# (仅 Windows 可选)禁止 Git 自动转换换行符(适合纯 Windows 团队)
# git config --global core.autocrlf false

# (仅 Linux/macOS 可选)提交时强制检查换行符是否为 LF,否则报错
# git config --global core.autocrlf input

额外配置:通过 .gitattributes 文件(仓库级)强制团队换行符规则(推荐团队项目使用),在仓库根目录创建 .gitattributes 并添加:

代码语言:bash
复制
# 所有文件统一用 LF 换行符
* text=auto eol=lf

# 二进制文件(如图片、压缩包)不转换换行符
*.png binary
*.jpg binary
*.zip binary

启用 Git 命令行颜色高亮,便于区分分支、提交状态、文件类型等信息。

代码语言:bash
复制
# 全局启用所有 Git 命令的颜色高亮
git config --global color.ui auto

# (可选)精细化配置各命令的颜色(如自定义分支名颜色为绿色)
git config --global color.branch.current "green bold"
git config --global color.diff.old "red"
git config --global color.diff.new "green"

忽略文件全局配置(避免重复创建 .gitignore)

代码语言:bash
复制
# .gitignore 隐藏文件
# 配置缓存文件
cache/

# 1. 创建全局忽略文件(路径可自定义,示例为 ~/.gitignore_global)
touch ~/.gitignore_global

# 2. 配置 Git 识别该全局忽略文件
git config --global core.excludesfile ~/.gitignore_global

验证配置项是否成功,使用git config --list

代码语言:bash
复制
color.ui=auto
user.name=stark
user.email=stark@126.com
core.autocrlf=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

3、第一次Commit

初始化的时候需要commit一次,不然克隆clone 分支的时候,会产生错误信息warning: You appear to have cloned an empty repository.,意思是还是一个空仓库,不允许拉取,commit后就有master分支了。

代码语言:bash
复制
[git@bogon project]$ git add .gitattributes .gitignore
[git@bogon project]$ git commit -m "Add gitignore gitattributes"
[git@bogon project]$ git branch
* master

这一步后,本地仓库(Local Repository) 就是这里了,你可以使用自己的电脑,也可以使用虚拟机、或者云服务都可以,比如我本地的虚拟机ip 192.168.31.145,我本地仓库的地址就是/home/git/project

需要有一个文件,不然在克隆的时候,会产生错误信息 fatal: destination path 'project' already exists and is not an empty directory.

二、克隆Git仓库、工作目录到暂存区流程

第一步我们已经成功创建本地仓库,对仓库进行初始化,并且提交了第一次的Commit,我们当前的分支是Master,接下来我们要创建工作目录(Working Directory) ,就是你在电脑里能看到的项目文件夹,存放着实际的文件。

1、克隆到开发机

推荐使用Git用户来管理Git服务,创建Git用户的步骤。

代码语言:bash
复制
# 创建git用户组和用户
sudo groupadd git
sudo useradd -m -c "Git Version Control" -d /home/git -s /bin/bash -g git git

# 设置git用户密码
sudo passwd git

克隆到开发机,或许是自己的电脑,这里就是所谓的 工作目录(Working Directory) 了。

代码语言:bash
复制
# 192.168.31.145 虚拟机Ip
# 本地仓库目录 /home/git/project
# git 是用户名

$ git clone git@192.168.31.145:/home/git/project/ project 
Cloning into 'project'...
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 10 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (10/10), done.
Resolving deltas: 100% (2/2), done.

使用git add命令,将工作目录的修改添加到 暂存区(Staging Area/Index) :用于临时存放你的改动,是工作目录和本地仓库之间的缓冲。

代码语言:bash
复制
$ git add login.html
$ git commit -m "Add login"

# 添加指定文件到暂存区
git add <文件名>

# 添加当前目录所有修改到暂存区
git add .

# 添加所有修改(包括删除的文件)到暂存区
git add -A

如果要放弃工作目录的修改,使用git checkout 命令实现:

代码语言:bash
复制
# 放弃工作目录中指定文件的修改
git checkout -- <文件名>

# 放弃工作目录中所有未提交的修改
git checkout .

使用git reset命令,有时我们有这种场景,需要暂存区撤销到工作目录:

代码语言:bash
复制
# 取消暂存区的指定文件(保留工作目录修改)
git reset HEAD <文件名>

# 取消暂存区的所有文件(保留工作目录修改)
git reset HEAD .

# 取消暂存区 index.html
git reset HEAD index.html

#清除指定的commit
git reset --hard 7a7a25472a8b9dc9193 

三、从暂存区与本地仓库之间的操作流程

使用git commit 命令,将暂存区的内容提交到本地仓库,commit可以提交也可以撤回,撤回的时候涉及到 HEAD 指针,要主要涉及指针丢失的问题。

代码语言:bash
复制
# 提交暂存区内容到本地仓库,需要填写提交信息
git commit

# 提交并直接添加提交信息
git commit -m "你的提交信息"

# 跳过暂存区,直接提交工作目录中已跟踪文件的修改
git commit -am "你的提交信息"

git commit --amend #修改最后一次提交

使用git log 命令,可以查看提交历史:

代码语言:bash
复制
# 查看完整提交历史
git log

# 简洁显示提交历史
git log --oneline

# 图形化显示提交历史
git log --graph --oneline

使用git reset命令,也可以对撤销最近的提交(保留修改),--soft放回暂存区,--hard 撤回的是工作目录,这两个是需要非常注意的地方。

代码语言:bash
复制
# 撤销最近一次提交,将修改放回暂存区
git reset --soft HEAD~1

# 撤销最近一次提交,将修改放回工作目录
git reset --mixed HEAD~1  # 默认选项

# 彻底撤销最近一次提交,丢弃所有修改(危险操作)
git reset --hard HEAD~1

四、Git与Github简单通信

远程仓库我们使用Github作为实践目标,实现Git与GitHub的简单同步来理解本地仓库与远程仓库的关系,id_rsa.pub就是本地生成的公钥,注册一个GitHub账号,把本地生成的公钥配置在Github,点击头像找到 SSH and GPG keys

1、创建Git用户、注册GitHub账户、配置ssh秘钥

代码语言:bash
复制
# 创建SSH目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 创建authorized_keys文件(用于仓库访问权限)
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 生成SSH密钥(在git用户下执行)
ssh-keygen -t rsa -b 4096 -C "15117995393@126.com" -f ~/.ssh/id_rsa

[git@bogon .ssh]$ ll
-rw-------. 1 git git  746 Oct  9 09:04 authorized_keys
-rw-------. 1 git git 3243 Oct  9 08:58 id_rsa
-rw-r--r--. 1 git git  745 Oct  9 08:58 id_rsa.pub

2、设置远程仓库( GitHub ),Git与Github的简单同步

在本地仓库目录设置远程仓库,也就是GitHub的仓库地址,git@github.com:stark0824/test.git,已经设置成功了。

代码语言:bash
复制
# github 是别名
[git@bogon project]$ git remote add github git@github.com:stark0824/test.git
[git@bogon project]$ git push github --all

工作目录上就有两个分支,一个是本地仓库的地址,一个是GitHub远程的地址。

代码语言:bash
复制
$ git remote -v
github  git@github.com:stark0824/test.git (fetch)
github  git@github.com:stark0824/test.git (push)
origin  git@192.168.31.145:/home/git/project/.git (fetch)
origin  git@192.168.31.145:/home/git/project/.git (push)

设置git push github --all,这个同步代码的时候直接使用git pull 和 git push 同步和更新代码了。

五、谢谢你这么好看,还能坚持看完,送你一个Git大彩蛋

我把Git本地仓库、工作目录、暂存区、远程仓库画了一张Mermaid 语法图送给你,我想把幸运送给你~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🎯 学习目标
    • 一、创建裸仓库和初始化
    • 二、克隆Git仓库、工作目录到暂存区流程
    • 三、从暂存区与本地仓库之间的操作流程
    • 四、Git与Github简单通信
    • 五、谢谢你这么好看,还能坚持看完,送你一个Git大彩蛋
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档