当前位置: 首页 > news >正文

Git 和 GitHub 学习指南本地 Git 配置、基础命令、GitHub 上传流程、企业开发中 Git 的使用流程、以及如何将代码部署到生产服务器

Windows 上 Git 安装与配置

  • 下载安装:访问 Git 官方网站下载适用于 Windows 的安装程序。运行安装包时会出现许可协议、安装目录、组件选择等界面(如下图)。在“Select Components”页面建议勾选 Git Bash Here 等选项,以便在资源管理器中右键快速启动 Git Bash【69†】。
    安装完成后,可在「开始菜单」或桌面(如果勾选)找到 Git Bash。打开 Git Bash 后,输入 git --version 可验证安装是否成功。

  • 配置全局用户名和邮箱:安装完成后,首先配置 Git 的身份信息,这些信息会记录在每次提交中。在 Git Bash 中运行:

    git config --global user.name "你的名字"
    git config --global user.email yourEmail@example.com
    

    此命令会将用户名和邮箱写入 ~/.gitconfig(Windows 通常为 C:\Users\用户名\.gitconfig)。以后新建的仓库默认都会使用这个身份信息,除非为某个项目单独重写。

  • 生成并配置 SSH 密钥:为了安全地连接远程仓库(如 GitHub),推荐使用 SSH 认证。启动 Git Bash,运行:

    ssh-keygen -t rsa -b 4096 -C "你的邮箱"
    

    按提示一路回车,新生成的密钥文件默认位于 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。然后运行 ssh-agent 并添加私钥:

    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
    

    将公钥内容复制到你的 GitHub 账户(GitHub 网站 → Settings → SSH keys)中,这样就可以通过 SSH 方式访问 GitHub 了。SSH 密钥用于安全认证,使得 Git 可以在推送或拉取代码时使用密钥而非传统密码。

  • 测试 SSH 连接:在 Git Bash 中运行:

    ssh -T git@github.com
    

    如果提示 Hi username! You've successfully authenticated... 表示已成功连接 GitHub。若出现错误,检查密钥是否正确添加,或是否通过 ssh-add 加载了私钥。

Git 基础命令教程

Git 提供了一系列命令用于仓库管理与日常开发。下面列出常用命令及其作用和示例:

  • git init:在当前目录初始化一个新的 Git 仓库。如果想把一个已有项目纳入版本控制,就在该项目根目录下运行:

    git init
    

    这会创建一个隐藏的 .git 文件夹,表示此目录已被 Git 管理。

  • git clone <仓库地址>:从远程仓库复制(克隆)到本地新目录。比如要获取 GitHub 上的项目:

    git clone git@github.com:用户名/仓库名.git
    

    克隆操作会在本地创建一个与远程仓库相同的副本,通常这是开发者获取项目代码的最常用方式。

  • git add <文件>:将工作目录中的修改添加到暂存区。比如添加当前目录下所有文件:

    git add .
    

    该命令会把指定文件的当前版本记录到暂存区,等待提交到仓库中。常用 . 表示所有文件,也可以指定具体文件或目录。

  • git status:查看工作目录状态,包括已修改、已暂存但未提交的文件等:

    git status
    

    运行后会显示哪些文件已被修改但未加入暂存区、哪些文件已暂存待提交等信息。通过 git status 可以确认当前仓库状态。

  • git commit -m "提交信息":将暂存区的内容作为一个新快照提交到仓库历史。

    git commit -m "实现了用户登录功能"
    

    每次提交都会生成一个唯一的提交记录,包含开发者信息、时间和提交说明。git addgit commit 构成了 Git 最基本的工作流。

  • git log:查看提交历史:

    git log
    

    它列出仓库中所有提交的历史记录,包括提交 ID、作者、日期和提交信息。可以加 --oneline--graph 等选项查看更简洁或图形化的日志。

  • git branch <分支名>:创建新分支。

    git branch feature-x
    

    该命令会创建一个名为 feature-x 的新分支,其实是开发一条并行的提交历史线。然后可以运行 git checkout feature-x 切换到该分支进行开发。使用分支可以实现并行开发,各分支之间相互隔离,不会干扰主干。

  • git merge <分支>:将指定分支的修改合并到当前分支。假设在 main 分支上执行:

    git merge feature-x
    

    Git 会把 feature-x 分支的改动合并到 main 分支中。合并是 Git 中的一个强大功能,用于将不同分支的开发成果整合在一起。合并后可能会出现冲突,需要手工解决(参见下文)。

  • git pull:自动化地从远程获取并合并代码。执行:

    git pull origin main
    

    该命令会先从远程仓库(如 origin)拉取指定分支(如 main)的更新,然后立即合并到当前分支,就像 git fetchgit merge 的简写。通常在开始工作前运行 git pull,确保本地与远程同步。

  • git push:将本地分支的提交推送到远程仓库。一般格式为:

    git push origin main
    

    其中 origin 是远程仓库别名,main 是分支名。此操作会把本地 main 分支的最新提交上传到 GitHub 等远程仓库。通常首次推送还需要加上 -u 参数,如 git push -u origin main,以将远程分支设置为上游分支。

  • git stash:暂存当前工作目录未提交的修改,以便切换分支或临时处理其他事务。使用方法:

    git stash
    

    该命令会把所有未提交的改动(包括已暂存和未暂存的)都保存到一个栈中,并恢复工作目录到干净状态。之后可以使用 git stash pop 恢复这些改动。这对中断当前工作去处理其他紧急任务非常有用。

将本地项目上传到 GitHub

  1. 在本地项目根目录执行:

    git init
    git add .
    git commit -m "首次提交"
    

    这会把当前项目初始化成 Git 仓库,并将所有文件提交为第一个版本。

  2. 在 GitHub 网站上新建一个空的仓库(Repository),记录下仓库的 SSH 地址(如 git@github.com:用户名/仓库名.git)。

  3. 本地添加远程仓库地址并推送:

    git remote add origin git@github.com:用户名/仓库名.git
    git branch -M main    # 将本地默认分支名改为 main(可选)
    git push -u origin main
    
    • git remote add origin <URL> 用于添加远程仓库别名 origin
    • git branch -M main 将当前分支重命名为 main(如果默认是 master)以与 GitHub 上的默认分支名一致。
    • git push -u origin main 将本地的 main 分支推送到远程的 main 分支。执行后,GitHub 上就会出现项目的文件列表。
  4. 此后每次更新代码后,使用 git addgit commit 提交,再运行 git push origin main 将改动同步到 GitHub。第一次 push 后已经指定了上游分支,可以直接使用 git push

企业级开发中的 Git 协作流程

  • 功能分支工作流:团队通常采用 Feature Branch(功能分支)工作流,即新功能在单独的分支(如 feature/login)上开发,完成后通过 Pull Request 合并到主干(main)。这样可以确保主干始终保持可运行状态,同时多个开发者可以并行工作而互不干扰。下图示意了一个典型的功能分支流程:开发者从主干或开发分支切出新分支,完成后合并回主干。

  • Gitflow 工作流:对于发布周期较长或版本管理严格的项目,可采用 Gitflow 分支模型。Gitflow 在 main(发布)和 develop(开发)两个长期分支基础上,创建更多短期分支:每个功能新建 feature/* 分支从 develop 分出来,开发完成后合并回 develop;发布时从 develop 分出 release/* 分支进行最终测试,再合并到 main 并打标签;生产环境发现问题时从 main 分出 hotfix/* 分支修复后再合并回 maindevelop。Gitflow 明确了各类分支的职责,适合需要严格版本控制的大型项目。

  • 多人协作与分支管理:在团队协作时,应统一分支命名规范(如 feature/功能名bugfix/编号 等),并定期同步主干变更。每位开发者都从远程仓库克隆项目后创建本地分支进行开发。使用 git pull 保持与主干一致,避免分支差异过大导致冲突。

  • 代码评审(Pull Request):大多数团队通过 GitHub、GitLab 或 Bitbucket 等平台发起 Pull Request(拉取请求) 来审查代码。在 Pull Request 中,开发者可以邀请同事对自己的改动进行 review,讨论并提出改进意见,再合并到主干。审核时可以查看改动的 diff、运行自动化测试状态等,确保代码质量。正如知名经验所述,“Pull requests 提供了一种从同事那里请求代码审查的方法,并检查最近一次提交的构建状态”。

  • 冲突解决:合并分支时可能遇到 冲突,即不同分支在同一文件同一位置做了不同修改。Git 无法自动合并此类冲突,需要人工介入。通常的做法是打开冲突文件,手动编辑保留正确的代码,删除冲突标记,然后使用 git add 标记冲突已解决,再执行 git commit 完成合并。在解决冲突前,也可以通过 git merge --abort 放弃此次合并,或用 git checkout --ours/--theirs <file> 临时选择某一方版本。及时与团队成员沟通,避免频繁冲突,尽量在合并前拉取最新代码减少冲突发生几率。

从 Windows 部署代码到 Linux 服务器

在企业环境下,常需将代码从开发机部署到远程 Linux 服务器。常见方式包括使用 SSH 进行文件传输或直接在服务器上拉取代码:

  • 使用 SCP 复制文件scp 命令利用 SSH 协议安全地复制文件。例如在 Git Bash 或 PowerShell 中运行:

    scp -r C:\path\to\project user@server.example.com:/var/www/project
    

    其中 -r 表示递归复制整个目录。该命令会要求输入服务器密码,或使用已有的 SSH 密钥免密码登录。SCP 适用于一次性快速复制整个项目目录。

  • 使用 Rsync 同步文件rsync 是一个高效的远程同步工具,只传输改变的文件部分,适合频繁更新时使用。例如:

    rsync -avz -e "ssh -p 22" /c/path/to/project/ user@server.example.com:/var/www/project/
    

    选项中 -a 表示归档模式保留权限等,-v 显示详细过程,-z 启用压缩传输。-e 指定使用 ssh。rsync 仅传输修改过的内容,效率更高。在 Windows 上可以通过 Git Bash 或 WSL 安装并使用 rsync

  • 在服务器上直接克隆/更新仓库:如果服务器可以访问 Git 代码托管平台,也可以在服务器上执行 git clonegit pull。例如:

    ssh user@server.example.com
    cd /var/www
    git clone git@github.com:用户名/仓库名.git
    # 之后如果需要更新,进入项目目录运行:
    git pull origin main
    

    这种方式需要服务器安装好 Git,并确保服务器的 SSH 公钥已被 GitHub 授权。优点是只传输代码改动,不需要每次手工复制整个项目。

注意事项与提示

  • 在 Windows 上使用 scprsync 时,需要在系统中安装 OpenSSH(Windows 10/11 通常已内置),或使用 Git Bash 等工具。
  • 传输前最好先确认服务器目标目录存在并有正确权限。
  • 在首次使用 Git 方式部署时,可能需要先配置服务器端的 SSH key 或运行 ssh-keygen
  • 无论哪种方式,保持文件权限和依赖安装一致很重要,可在服务器上用脚本处理部署后的编译、重启等操作。

参考资料:Git 官方文档、Atlassian 和 GitHub 教程提供了丰富示例和说明。

相关文章:

  • Linux 的 TCP 网络编程 -- 回显服务器,翻译服务器
  • C#处理印尼地区的数字分隔符方法
  • leetcode 162. Find Peak Element
  • 人工智能的“歧视”:“她数据”在算法运行中隐形
  • 《Effective Python》第三章 循环和迭代器——永远不要在迭代容器的同时修改它们
  • 基于Gitee 的开发分支版本管理规范
  • 字符串(二)
  • leetcode 153. Find Minimum in Rotated Sorted Array
  • RabbitMQ的基本使用
  • 力扣-盛最多水的容器
  • 文件包含靶场实现
  • RK3576 Android 14.0 SDK开发指南(第一集)
  • vivado fpga程序固化
  • FPGA:基于Vivado的仿真流程与波形调试实践
  • 企业级网络安全护盾:剖析高防IP原理与防护策略
  • C# 语法篇:字段的定义和运算
  • 基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析技术
  • Python实现VTK - 自学笔记(4):用Widgets实现三维交互控制
  • 已解决:Git冲突完全解决指南(附最佳实践)
  • 第三个小程序动工:一款结合ai的菜谱小程序
  • 《远山淡影》改编电影入围戛纳关注单元,张怡微谈石黑一雄
  • 《让世界爱中国》新书发布,探讨大变局下对外讲好中国故事
  • 国家统计局:1-4月份,全国固定资产投资同比增长4.0%
  • 芬兰直升机相撞坠毁事故中五名人员全部遇难
  • 江西4人拟任县(市、区)委书记,其中一人为“80后”
  • 李成钢出席中国与《数字经济伙伴关系协定》成员部级会议