【开源计划】GitGitHub的学习笔记
1. Git工作流程——Git工作流示意图来自《Git工作流和核心原理 | GitHub基本操作 | VS Code里使用Git和关联GitHub》——Git命令数据流详细示意图2. 代理设置2.1 Ubuntu【复制环境变量】功能2.2 Windows: Git Bash2.2.1 使用Clash提供的【复制环境变量】功能2.1.2 推荐使用gh下载速度更快3. Ubuntu更新git可以参考博文《Ubuntu下git版本升级》by -CapricornusW更新git的bash命令sudoaptupdate# 更新源sudoaptinstallsoftware-properties-common# 安装 PPA 需要的依赖sudoadd-apt-repository ppa:git-core/ppa# 向 PPA 中添加 git 的软件源sudoapt-getupdatesudoapt-getinstallgit4. 常见符号说明*表示当前检出点有其他链接的工作区worktree正在使用这个分支5. 常见命令说明git branch -M main将当前分支强制重命名为main这里-M代表--move --force表示如果main分支已经存在则会覆盖掉原有的main分支相当于删除了old-main分支。git add -u将已跟踪文件的更新添加到暂存区这包括已修改和已删除的文件但不包括新文件未被跟踪的文件。git commit -a add commit也就是git add与git commit的组合。git commit -am comments_for_new_version-a和-m可以合在一起写。git push -u origin main这里“push -u”的意思是将本地分支合并到远程源origin-main分支并将其记录为push远程分支的默认值下次推送时命令可以简写成git push。git log用于显示日志中commits的历史信息。git log --oneline这个命令会简化log的输出仅仅输出commit hash 前7个字符串和commit message图片引用自《git常用命令二查看历史记录 git log [–prettyoneline] [ --oneline] / reflog》git log --prettyoneline每条日志只显示一行图片引用自《git常用命令二查看历史记录 git log [–prettyoneline] [ --oneline] / reflog》5. Git常见界面示例5.1 Git-log的输出界面最后一行的“(END)”是分页工具Less的提示信息表示已经到达输出内容的末尾没有更多内容可以滚动查看。6. Git邮件列表目前不支持提交我们尝试了多次向Git邮件列表发送邮件不过都没有成功如图所示6.1 取消订阅进入vger.kernel.org查找用于unsub的邮件地址7. 常用工具7.1 GitHub CLIGitHub CLI 相对于git命令的优点GitHub CLI 提供了更便捷和高级的功能可以简化一些在 Git 中较为复杂的操作GitHub CLI 集成了许多 GitHub 特有的操作使得一些复杂操作变得简单。例如创建拉取请求、管理 issues、查看仓库详情等操作使用 GitHub CLI 可以在命令行中轻松完成而不需要打开浏览器。6.2 PyGithub6.2.1 需要token才能使用【access-tokens】6.2 查看repo工程大小如何在GitHub上下载单个文件代码请使用浏览器插件GitZip for github9. 基本工作流9.1 以本地代码建立仓库1以当前文件夹建立本地repogitinit2添加所有文件到暂存区gitadd.3进行首次提交gitcommit-mInitial commit查看当前所在分支gitbranch --show-current从远程仓库中同步代码gitpull查看当前所在分支gitbranch --show-current提交当前repo目前下的所有文件和文件夹不包括空文件夹gitadd.提交指定文件gitaddfile1file2...# 使用空格分隔多个文件。Commit暂存区中的修改并添加注释gitcommit-mmessage_for_new_commitmessage注释使用双引号包括用单引号容易出错Note使用git commit -m的优点是不用进入editor默认是vim输入信息会方便一些。列出存储库中的所有文件包括仅暂存但尚未提交的文件gitls-files将工作区文件提交到远程主分支main分支gitpush origin main从远程仓库中获取更新gitfetch比较本地版本库与远程仓库的区别gitdifforigin/main4“等待 git push 上传的最大容忍时间15分钟”9.2 提交所有修改gitadd.9.3 拉取远程仓库更新1拉取远程仓库的最新更改gitfetch origin2查看当前所在分支gitbranch --show-current10. 查看当前状态10.1 查看本地工作空间的状态gitstatus10.2 查看关联的远程仓库信息gitremote-v10.3 查看所有分支信息包括远程gitbranch-a10.4 文件状态示例“sample.txt”未被索引“lao.md”位于暂存区这里使用git status可以看到lao.md文件的状态为“to be committed”所以目前是位于暂存区11. Clone仓库git clone下载前查看clone项目repo的大小可以安装Github-Repo-Size插件来进行查看下载仓库并重命名项目gitclone https_git new_folder_name从指定分支clone代码gitclone-bbranch-name https://github.com/repo.git下载指定tag的代码库gh repo clone Farama-Foundation/Gymnasium ----branchv0.29.1\--single-branch--depth19. 账户设置用户名称和邮箱设置本地仓库用户名称gitconfig--globaluser.nameuser_eric设置联系邮箱gitconfig--globaluser.emailuser_ericemail.com查看本地用户信息gitconfig--global--list终端认证GitHub CLI10. 设置远程仓库添加远程仓库gitremoteaddorigin https_github_com_remote_repo_git例如git remote add origin https://github.com/songyuc/mmdetv2-comments.git删除远程仓库链接gitremote remove upstream_name11..gitignore指定不需要提交的文件终端创建.gitignore文件touch.gitignore关于.gitignore的具体写作方法请参考博文《为什么往 github 上上传文件缺失?》12. 储藏当前修改stashstash是Git中用来临时存储未完成工作的功能。git stash save命令会将当前的工作现场未提交的更改保存到一个新的stash中以便之后可以通过git stash apply或git stash pop来恢复这些未提交的更改。储藏目前修改gitstash save恢复工作现场gitstash pop13. Git SubmoduleGit子模块Git子模块用来管理作为多个项目依赖的代码库添加子模块gitsubmoduleaddhttps://github.com/songyuc/simcv.git tools/simcv14. 多分支管理显示所有分支gitbranch创建并切换新分支gitswitch-cnew_branch在切换分支时使用新命令git switch替代git checkout。创建新分支gitbranch branch_name切换到已有的分支gitswitch existed_branch拉取远程分支合并到本地分支gitpull origin branch_dev:local_dev删除分支gitbranch-dbranch_nameNote如果位于当前分支删除自身分支失败可以切换到其它分支后再进行删除。15. 删除repo这是我们的repositories的界面在这个界面中没有可以直接删除repo的选项需要点击进入repo进行删除点击进入repo然后点击Settings按钮16. 使用PyGithub获取信息16.1 查询开源项目release版本号根据 GitHub REST API 文档最新版本Release的URL格式为:/repos/{owner}/{repo}/releases/latestJSON信息说明tag_nameRelease的版本信息。16.1 使用python连接 Github API这里我们需要使用PyGithub库关于PyGithub的说明文档请参考[Introduction — PyGithub documentation]NotePyGithub不并不是Github官方开发的所以连接时需要 access token。使用PyGithub连接Github需要使用 access token 作为密钥我们需要到Github官网[Github | Personal access tokens]上申请密钥NoteAccess token 也可以作为使用命令行连接GitHub的账户密钥。对于获得公开仓库的内容在申请时选择public_repo就可以获得足够权限16.2 获得release版本号下面以获得YOLOv5项目为例查询最新release的版本号fromgithubimportGithub# using an access tokengGithub(access_token)repog.get_repo(ultralytics/yolov5)repo.nameyolov5releaserepo.get_latest_release()release.titlev6.1 - TensorRT, TensorFlow Edge TPU and OpenVINO Export and Inference16.3 获得 release assetsGitReleaseAsset:PyGithub中asset对象nbsp。releaserepo.get_latest_release()release.titlev6.1 - TensorRT, TensorFlow Edge TPU and OpenVINO Export and Inference# 遍历release的asset数组forassetinrelease.get_assets():print(asset.name)Troubleshooting1连接时出现错误“github.GithubException.BadCredentialsException: 401 {“message”: “Bad credentials”, “documentation_url”: “https://docs.github.com/rest”, “status”: “401”}”Note状态码401表示未授权。这里实际上是因为代码中使用了无效的 acess-token17. Git add 提交更改仅提交已经之前已被追踪文件即 tracked file的修改gitadd-u-u指令不会处理未跟踪文件untracked file的修改。5.11 设置GitHub访问密钥在终端连接Github需要使用 access token 作为密钥我们需要到Github官网[Github | Personal access tokens]上申请密钥5.12 GitHub编辑器引用大段文字blockquoteblockquote第一行文字 第二行文字 ... 多行文字。/blockquote5.14 检查哪一次代码提交引入了错误git bisect关于使用git bisect定位出现错误的代码提交请参考博文《git bisect 命令教程》使用git bisect start命令启动查错其格式如下gitbisect start 终点 起点14. PR请参考博文《【GitHub】PR的学习笔记》15. Troubleshooting1Gh clone 下载十分缓慢需要使用国区之外的代理使用非公共节点例如住宅节点2Git-pull失败“From https://github.com/user/remote_repo; ! [rejected] remote_branch - local_branch (non-fast-forward)”出现这个问题的原因是本地分支和远程分支的代码出现了冲突不一致3Git-commit失败“x 个文件已提交n 个文件提交失败: Try commit detected dubious ownership in repository at ‘D:/local/my_repo’ To add an exception for this directory, …”具体的报错信息如下0 个文件已提交2 个文件提交失败: Try commit detected dubious ownership in repository at ‘D:/local/my_repo’ To add an exception for this directory, call: git config --global --add safe.directory D:/local/my_repo Set the environment variable GIT_TEST_DEBUG_UNSAFE_DIRECTORIEStrue and run again for more information.这可能是由于Windows的安全策略导致的按照信息提示操作即可将本地repo目录添加到信任列表git config --global --add safe.directory D:/local/my_repo启用 git_test_debug 模式setGIT_TEST_DEBUG_UNSAFE_DIRECTORIEStrue两个设置都是必需进行设置的。3向GitHub上共享项目后有文件夹没有上传今天在上传 Cuda_notes检测GPU参数信息的项目时遇到的这个问题在这个项目中我们引用了 cuda-samples 的代码然后我想通过GitHub把 Cuda_notes 移植到Win11系统上测试在上传到GitHub时出现了这个问题在使用PyCharm的在 GitHub 上共享项目后进入repo页面发现 cuda-samples 文件夹没有上传推测可能是由于 cuda-samples 之前是一个Git项目于是标记为了git根目录需要在IDE中去掉相关的标记信息相关的操作请参考博文《用ide去掉git信息 - git 无法add文件夹》16. 常用浏览器插件GitZip for github下载特定文件夹Note由于 Microsoft Edge 商店中的GitZip是2022年的1.0.1版本测试了一下在新版的GitHub上无法使用所以需要在Chrome应用商店中下载最新的版本。17. GitHub Support on PyCharmGitHub账号验证ghGitHub-Troubleshooting在GitHub上已经删除repo不过重新创建repo时提示“Repository with selected name already exists”出现这个问题的原因是准备设置的远程仓库昵称new_name与已关联远程仓库的昵称重名于是提示“already exists”解决方法可以参考博文《fatal: remote origin already exists. (远程来源已经存在 解决办法)》首先确认目前存在的仓库昵称gitremote-v看看目前已经使用的昵称有哪些一个可行的方法是删除本地项目中的.git文件夹。18. 使用python自动化进行git操作17.1 下载submodule代码repo.submodule_update(initTrue)等价于操作gitsubmodule initgitsubmodule update19. 使用Sourcegraph在线浏览代码Sourcegraph | 查询语句说明Sourcegraph有三种搜索方式literal (文本), regular expression, and structural.6.1 代码搜索基本查询的语句结构如图所示指定代码语言lang:python关于可以选择的语言可以查看左侧工具栏DYNAMIC FILTERS 4.2 使用 structural search 搜索函数调用Sourcegraph提供了一个很棒的功能—— structural search可以使用func(...)/obj.method(...)语句来匹配函数或方法的调用