From 5c1aaf6e4fdefb8426eb53b0684385c483be70a6 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sun, 16 Jul 2023 18:07:33 +0800 Subject: [PATCH] docs: git --- 3.编程思维体系构建/3.5git与github.md | 244 +++++++++++++----- 1 file changed, 179 insertions(+), 65 deletions(-) diff --git a/3.编程思维体系构建/3.5git与github.md b/3.编程思维体系构建/3.5git与github.md index e30ec5e..8c51999 100644 --- a/3.编程思维体系构建/3.5git与github.md +++ b/3.编程思维体系构建/3.5git与github.md @@ -22,7 +22,7 @@ - Linux 下 -``` +```bash # Debian , Ubuntu sudo apt install git ``` @@ -35,7 +35,7 @@ sudo apt install git 安装好之后,你需要先进行一些配置工作。在终端里输入以下命令: -``` +```bash git config --global user.name "Zhang San" # your name git config --global user.email "zhangsan@foo.com" # your email ``` @@ -44,7 +44,7 @@ git config --global user.email "zhangsan@foo.com" # your email 你会通过 `git clone` 命令来拉取远程仓库的代码,里面已经包含一些 `git` 记录,因此不需要额外进行初始化。如果你想在别的实验、项目中使用 `git` ,你首先需要切换到实验、项目的目录中,然后输入 -``` +```bash git init ``` @@ -54,7 +54,7 @@ git init 使用 -``` +```bash git log ``` @@ -64,7 +64,7 @@ git log 使用 -``` +```bash git status ``` @@ -76,23 +76,23 @@ git status 首先你需要使用 `git status` 查看是否有新的文件或已修改的文件未被跟踪;若有,则使用 `git add` 将文件加入跟踪列表,例如 -``` +```bash git add file.c ``` -会将 `file.c` 加入跟踪列表。如果需要一次添加所有未被跟踪的文件,你可以使用 +会将 `file.c` 加入**跟踪列表**。如果需要一次添加所有未被跟踪的文件,你可以使用 -``` +```bash git add -A -# or +# 或者 git add . ``` 但这样可能会跟踪了一些不必要的文件(二进制文件),例如编译产生的 `.o` 文件,和最后产生的可执行文件。事实上,我们只需要跟踪代码源文件即可。为了让 `git` 在添加跟踪文件之前作筛选,你可以编辑 `.gitignore` 文件( 没有的话手动创建 文件名就叫这个 ),在里面给出需要被 `git` 忽略的文件和文件类型。 -这个网页可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件 +[这个网页](https://www.toptal.com/developers/gitignore) 可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件 -``` +```bash # .gitignore文件示例 .idea # 编辑器配置 __pycache__ # 缓存文件夹 @@ -107,13 +107,13 @@ file.o # 一个编译后的文件 把新文件加入跟踪列表后, 使用 `git status` 再次确认. 确认无误后就可以存档了, 使用 -``` +```bash git commit -m "...comment..." ``` 提交工程当前的状态(注释)。其中 `...comment...` 是你本次提交的注释( 一般在注释中简略写出本次提交干了什么)以下为注释规范,养成良好习惯请遵守: -``` +```bash 模板: type(scope): subject @@ -149,7 +149,7 @@ subject为commit概述 如果你遇到了上文提到的让你悲痛欲绝的情况,现在你可以使用光玉来救你一命了。首先使用 `git log` 来查看已有的存档,并决定你需要回到哪个过去。每一份存档都有一个 `hash code`,例如 `b87c512d10348fd8f1e32ddea8ec95f87215aaa5` , 你需要通过 `hash code` 来告诉 `git` 你希望读哪一个档。使用以下命令进行读档: -``` +```bash git reset --hard b87c ``` @@ -161,7 +161,7 @@ git reset --hard b87c 当然还是有办法来避免上文提到的副作用的,这就是 `git` 的分支功能。使用命令: -``` +```bash git branch ``` @@ -169,7 +169,7 @@ git branch 读档的时候使用以下命令: -``` +```bash git checkout b87c ``` @@ -178,13 +178,13 @@ git checkout b87c - 查看 `b87c` 存档的内容 - 使用以下命令切换到其它分支 -``` +```bash git checkout 分支名 ``` - 对代码的内容进行修改,但你不能使用 `git commit` 进行存档,你需要使用 -``` +```bash git checkout -B 分支名 ``` @@ -200,23 +200,50 @@ git checkout -B 分支名 ## 全球最大男性交友网站 —— Github +::: tip 🤡 +想象一下你正在进行人生中第一次软件开发的小组合作。 + +你把任务分配好让组员去写代码中的某一个模块。组员写好之后发给你。 + +你一看,通过QQ发过来的是一个文件啊文件 比如说 `学生管理模块.c` 你打开一看,我去是**乱码**。 + +你废了九牛二虎之力把他的 GBK 编码改成 UTF8 之后,细细地品鉴这段代码,发现我去有严重逻辑错误,而且代码很不规范。 + +你通过QQ告诉他,这一行有问题,能不能改一下。他说,好的我改一下。 + +然后又发了文件啊文件给你,如此反复循环,你俩已经互相传了好几百个源代码文件,很没效率! +::: + + +> 通过Git版本控制管理自己的代码 ,再通过Github来发布、同步互联,是一个很好的解决方案! + 简介 作为开源代码库以及版本控制系统,Github 拥有超过 900 万开发者用户。随着越来越多的应用程序转移到了云上,Github 已经成为了管理软件开发以及发现已有代码的首选方法。 -页面大概是这样: +页面大概是这样(老图): ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHemi9HkeAG1fgoznHbHLrc.png) ### Git 和 Github -[GitHub](https://github.com/)[ ](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 +[GitHub](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 ### Git 绑定 Github +::: tip 🤗 +下面将教学如何注册这个网站,并给[本项目](https://github.com/camera-2018/hdu-cs-wiki)点一个小小的 kita kita 的 star🎇 +::: + #### 第一步:注册账号 -([GitHub 官网](https://github.com/))右上角 sign up 会有一个非常酷炫的界面指引你注册 🥳 +([GitHub 官网](https://github.com/))右上角点击 sign up 会有一个非常酷炫的界面指引你注册 🥳 + +他会用一个像是命令行交互的方式引导注册,你需要依次填写 `邮箱` 、`密码` 、 `用户名(此为 ID 非昵称)` 、`是否同意邮箱广告推送` 、`机器验证码` 之后创建账户,随后会给你填写的邮箱发送验证码,填写注册。 + +随后是一个欢迎问卷😋随便填写、如果他问你什么PRO Plan 选择 free 不付费就好。 + +最后你访问[GitHub 官网](https://github.com)应该会显示你的 dashboard 管理台界面 #### 第二步:创建 SSH Key 并获取公钥 @@ -226,7 +253,7 @@ git checkout -B 分支名 如果没有,打开 Shell( Windows 下打开 Git Bash 前提是你已经安装好了 git 在桌面右键应该会有 Git bash here 选项 ),创建 SSH Key: -```powershell +```bash ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电子邮件地址 ``` @@ -234,9 +261,9 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 #### 第三步:绑定 Github -登陆 `GitHub`,打开 `settings` +登陆 `GitHub`,点击右上角自己的头像,打开 `settings` -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9VFPUYHl8ghJ3C78RsXjtf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-12-32.png) 然后打开左侧栏 `SSH and GPG`` keys` 页面 @@ -246,8 +273,9 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 #### 第四步:创建仓库并和本地绑定 -绑定完 GitHub 然后你可以创建仓库了 -首先在 GitHub 主页,找到 “New” 按钮,创建一个新的仓库 +绑定完 GitHub 然后你可以创建仓库了 + +首先在 GitHub 主页,找到 `New` 或者 `Create repository` 一个绿色的按钮,创建一个新的仓库 ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png) @@ -259,7 +287,7 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 在 git bash 中输入: -```powershell +```bash git remote add origin git@github.com:yourname/gitexample.git # 请将yourname换成自己的id ``` @@ -268,16 +296,24 @@ git remote add origin git@github.com:yourname/gitexample.git 或者是直接 git clone 下来 -```powershell +```bash git clone git@github.com:yourname/gitexample.git ``` +> 以上方法是基于 ssh 方式的,下面方法是基于 HTTPS 方式的 + +或者你可以跟随新创建之后的指引,`…or create a new repository on the command line` 内他描述了如何创建一个文件夹、创建一个README.md的文件,然后和github仓库绑定。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-19-18.png) + + + ### 下载代码——clone 拷贝他人存档也未尝不可,而我们如果用他人存档时,次次都需要一样一样的拷贝文件和代码未免太过折磨,下面简单介绍如何使用 -```powershell -git clone [url] +```bash +git clone ``` 接下去对着下面这个 GitHub 的代码使用一下 @@ -289,18 +325,26 @@ git clone [url] 然后复制完代码后切换回我们的命令行 ```bash -e: #powershell or cmd -# 进入到想要存储该代码的地方 +# powershell or cmd +# 进入(cd)到想要存储该代码的地方(父文件夹目录) git clone https://github.com/camera-2018/git-example.git ``` +> 这里使用的[例子](https://github.com/camera-2018/git-example)是我的仓库,当然你也可以用你自己的仓库。 +> +> 如果你使用我的仓库的话,你 clone 过后在你自己电脑更改的文件等东西,是没法直接提交回来的(因为你没有我仓库管理权限) +> +> 如果你非要给我的仓库添加东西呢 也是可以,参照下面的 PR (Pull Request)教程 + 一阵抽搐过后就下载好了 ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png) -注意:用完之后别忘记给 camera-2018 点个 follow 呃呃 follow 没用 star 有用 +::: tip +用完之后别忘记给 camera-2018 点个 follow 😋 `呃呃 follow 没用 star 有用` +::: -注意:失败就重试吧 还失败建议使用魔法 +注意:失败就重试吧 还失败建议使用魔法(非国内网你懂得) ### 提交和合并分支 @@ -332,61 +376,131 @@ git add . #将没有提交的所有文件加入暂存区 git commit -m "feat(helloworld): add helloworld file" ``` -将刚才加入暂区的文件发起了一个提交 注释是 `feat(helloworld): add helloworld file` +将刚才加入暂区的文件发起了一个提交,提交注释(commit message)是 `feat(helloworld): add helloworld file` ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni2dupDzNO8qTWPAxS5c67b.png) -1. 如果这是你自己的仓库有权限 你就可以直接使用 +1. 如果这是你自己的仓库有权限(本人仓库或 Collaborators 有权限的情况下)你就可以直接使用 -```bash -git push origin main # origin是第四步里remote add起的远程名字 - # main是分支名 -``` + ```bash + git push origin main # origin是第四步里remote add起的远程名字 + # main是分支名 + ``` -上传本次提交 + 上传本次提交 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) -1. 如果你没有本仓库的主分支提交权限 可以提交 pr(pull requests) +2. 如果你没有本仓库的主分支提交权限 可以提交 PR(Pull Requests) -这里假设我是协作者 无主分支权限 + **第一种情况:这里假设我是协作者 无主分支权限,但有创建分支权限** -首先创建一个新分支 命名为 `yourname-dev` + 首先创建一个新分支 命名为 `yourname-dev` -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) -然后按照上面的方法 `git clone` 并切换到你刚创建的分支 + 然后按照上面的方法 `git clone` 并切换到你刚创建的分支 -```bash -git switch camera-2018-dev -``` + ```bash + git switch camera-2018-dev + ``` -然后提交一个文件 这里使用 vscode 自带的 git 工具试试 + 然后提交一个文件,这里直接使用 vscode 自带的 git 工具试试 (很方便、不用敲命令行) -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) -点暂存所有更改 写好 comment 之后点提交 + 点暂存所有更改 写好 comment 之后点提交 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) -最后点同步更改上传 + 最后点同步更改上传 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) -如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 + 如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) -点它创建 pr + 点它创建 PR -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) -这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 + 这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) -实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 + 实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 + + **第二种情况:我不是协作者、我什么权限也没有,我看了这个 public 项目后觉得很好但是有一些问题,我要给他贡献一些代码** + + 可以点击仓库右上角的 fork + + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-34-21.png) + + 这样会在你的名下多出来一份这个同名仓库,而这个仓库你是拥有所有权限的,你可以 clone 你这个同名仓库,更改代码,提交代码之后 + + 回到源仓库点击 Pull Request 然后创建 PR `New pull request` + + 最上面会提示你说 + + Comparing changes + Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also **compare across forks** . + + 点击小蓝字 `compare across forks` 这会让你对比你fork仓库和源代码仓库的提交记录,之后就可以创建 PR 了,原作者看到了会合并。 + + +### 其他功能 + +问题跟踪:GitHub的问题跟踪功能可用于报告软件中的问题、错误和功能请求,并进行讨论、分配和解决。 + +Wiki页面:用户可以创建和编辑与存储库相关的Wiki页面,用于提供项目的文档、指南、示例代码等。 + +Pull请求(Pull Requests):使用者可以将自己的代码变更提交给其他项目的所有者,并请求合并到主干代码中。 + +项目管理:GitHub提供项目管理功能,包括任务管理、里程碑(milestones)、项目板(project boards)等工具,可用于组织和跟踪项目的进展。 + +部署功能:GitHub可以与各种持续集成和部署(CI/CD)工具集成,帮助开发人员自动化构建、测试和部署他们的应用程序。 + +统计信息:GitHub提供有关存储库活动和贡献者的统计信息,例如提交图表、活动日历等,有助于跟踪和分析项目的发展。 + +社交功能:用户可以关注其他用户、存储库和组织,接收他们的更新和活动通知,并与他们进行交流和讨论。 + +代码审核(Code Review):GitHub的Pull请求功能允许团队成员对代码进行审查和讨论,以确保代码质量和最佳实践。 + +集成和扩展:GitHub支持与其他工具和服务的集成,例如持续集成(CI)工具、代码质量检查工具、项目管理工具等。 + +页面托管:GitHub Pages功能使您可以托管静态网站和文档,这在展示和共享项目文档、演示和博客等方面非常有用。 + +然后还有一些比如说 Copilot 之类的有用的功能。 + +[Copilot](https://github.com/features/copilot) 是 GitHub 推出的一款基于人工智能技术的代码辅助工具。它使用了机器学习模型 codex,并针对编写代码的场景进行了训练。 + +Copilot 可以根据上下文和输入的提示,为开发人员生成代码建议和自动完成。它可以通过分析现有代码库、注释和上下文来生成代码片段,提高编码效率并减少重复劳动。 + +## [Copilot](https://github.com/features/copilot) 白嫖教程 + +你需要学生认证你的 Github 账号。 + +地址在 https://education.github.com/students 点击 `Sign up for Global Campus` 来开始认证,下面会让你输入学校,绑定学校邮箱(杭电为 @hdu.edu.cn 结尾的邮箱)(如果你是杭电新生的话,可能要等到智慧杭电账号发放时才能注册杭电邮箱)并上传**学生证明**(从21年开始这个验证越来越严,如果不过的话你可以尝试 `学生证第一页`、`学生证第一页英文翻译(像有道翻译那样 P 图上去)`、`学信网学籍证明英文翻译(英文也是 P 上去)`) + +通过了的话你的账户会有 Pro 标识 然后你可以享受的 Github 学生包里包含[这些东西](https://education.github.com/pack) + +里面比较有用的有 +- JETBRAINS 全家桶的免费用(我没用,我用的是jb自己家的验证方式,不是github) +- name.com 家的一个一年期的免费域名(大概价值吧 六七十块钱?) +- github 的容量扩容和 actions 时间扩容、Codespaces 时间延长、Pages 扩容(没啥用倒是) +- Termius 学生包,这是我很喜欢用的终端软件,有学生包可以多端同步ssh的账号密码啥的,很方便。 +- Sentry 容量扩容 +- Copilot 免费用 + +你可以在 `settings` 里看到你的copilot ,配置如下 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-59-49.png) + +然后就可以在你喜欢的 IDE 或编辑器上下载 Copilot 插件,来启用他。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_18-02-19.png)