《熟悉 GitHub/Git(建设中) - OpenMMLab 贡献者成长体系教程》
——Git工作流示意图来自《Git工作流和核心原理 | GitHub基本操作 | VS Code里使用Git和关联GitHub》
——Git命令数据流详细示意图
可以参考博文《Ubuntu下git版本升级》by -CapricornusW;
sudo apt update # 更新源
sudo apt install software-properties-common # 安装 PPA 需要的依赖
sudo add-apt-repository ppa:git-core/ppa # 向 PPA 中添加 git 的软件源
sudo apt-get update
sudo apt-get install git
git init
:在当前目录中初始化一个新的 Git 仓库。git clone
:克隆一个仓库到新的目录。git init
git add .
git commit -m "Initial commit"
查看当前所在分支:
git branch --show-current
从远程仓库中同步代码
git pull
查看当前所在分支:
git branch --show-current
提交当前repo目前下的所有文件和文件夹(不包括空文件夹)
git add .
提交指定文件
git add <file1> <file2> ... # 使用空格分隔多个文件。
Commit暂存区中的修改并添加注释
git commit -m "message_for_new_commit"
"message"
:注释使用"
双引号包括,(用单引号容易出错)
Note
使用git commit -m
的优点是,不用进入editor(默认是vim)输入信息,会方便一些。
列出存储库中的所有文件,包括仅暂存但尚未提交的文件
git ls-files
将工作区文件提交到远程主分支(main分支)
git push origin main
从远程仓库中获取更新
git fetch
比较本地版本库与远程仓库的区别
git diff origin/main
查看本地工作空间的状态
git status
查看关联的远程仓库信息
git remote -v
“lao.md”位于暂存区:
这里使用git status
可以看到lao.md
文件的状态为“to be committed”,所以目前是位于暂存区;
git branch -M main
将当前分支强制重命名为main,这里-M
代表--move --force
,表示如果main分支已经存在,则会覆盖掉原有的main分支(相当于删除了old-main分支)。
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 [–pretty=oneline] [ --oneline] / reflog》)
git log --pretty=oneline
:每条日志只显示一行,
(图片引用自《git常用命令(二)查看历史记录 git log [–pretty=oneline] [ --oneline] / reflog》)
如何在GitHub上下载单个文件代码,请使用浏览器插件 GitZip for github;
打开v软件并连接,在托盘菜单中右键选中控制台代理;
git clone
可以安装Github-Repo-Size插件来进行查看;
git clone https_git new_folder_name
git clone -b branch-name https://github.com/repo.git
设置本地仓库用户名称
git config --global user.name "user_eric"
设置联系邮箱
git config --global user.email "[email protected]"
查看本地用户信息
git config --global --list
git remote add origin https_github_com_remote_repo_git
例如:git remote add origin https://github.com/songyuc/mmdetv2-comments.git
git remote remove upstream_name
.gitignore
:指定不需要提交的文件终端创建.gitignore
文件
touch .gitignore
关于.gitignore
的具体写作方法,请参考博文《为什么往 github 上上传文件缺失?》
stash
stash
是Git中用来临时存储未完成工作的功能。git stash save
命令会将当前的工作现场(未提交的更改)保存到一个新的stash中,以便之后可以通过git stash apply
或git stash pop
来恢复这些未提交的更改。
git stash save
git stash pop
Git子模块用来管理作为多个项目依赖的代码库;
git submodule add https://github.com/songyuc/simcv.git tools/simcv
git switch -c new_branch
在切换分支时使用新命令git switch
,替代git checkout。
git branch branch_name
git switch existed_branch
git pull origin branch_dev:local_dev
删除分支
git branch -d branch_name
Note
如果位于当前分支,删除自身分支失败,可以切换到其它分支后再进行删除。
这是我们的repositories的界面,在这个界面中没有可以直接删除repo的选项,需要点击进入repo进行删除;
点击进入repo,然后点击Settings按钮,
仅提交已经之前已被追踪文件(即 tracked file)的修改
git add -u
-u
指令不会处理未跟踪文件(untracked file)的修改。
在终端连接Github需要使用 access token 作为密钥,我们需要到Github官网[Github | Personal access tokens]上申请密钥;
<blockquote>
第一行文字;
第二行文字;
...
多行文字。
blockquote>
根据 GitHub REST API 文档,最新版本Release的URL格式为:
/repos/{owner}/{repo}/releases/latest
JSON信息说明:
"tag_name"
:Release的版本信息。
这里我们需要使用PyGithub
库,关于PyGithub
的说明文档请参考[Introduction — PyGithub documentation];
使用PyGithub
连接Github需要使用 access token 作为密钥,我们需要到Github官网[Github | Personal access tokens]上申请密钥;
Note
Access token 也可以作为使用命令行连接GitHub的账户密钥。
对于获得公开仓库的内容,在申请时选择public_repo就可以获得足够权限;
下面以获得YOLOv5项目为例,查询最新release的版本号:
from github import Github
# using an access token
g = Github("access_token")
repo = g.get_repo("ultralytics/yolov5")
repo.name
>>>'yolov5'
release = repo.get_latest_release()
release.title
>>>'v6.1 - TensorRT, TensorFlow Edge TPU and OpenVINO Export and Inference'
GitReleaseAsset: PyGithub
中asset对象 。
release = repo.get_latest_release()
release.title
>>>'v6.1 - TensorRT, TensorFlow Edge TPU and OpenVINO Export and Inference'
# 遍历release的asset数组
for asset in release.get_assets():
print(asset.name)
git bisect
关于使用git bisect
定位出现错误的代码提交,请参考博文《git bisect 命令教程》
使用git bisect start
命令启动查错,其格式如下:
git bisect start 终点 起点
出现这个问题的原因是本地分支和远程分支的代码出现了冲突不一致;
具体的报错信息如下:
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_DIRECTORIES=true and run again for more information.
这可能是由于Windows的安全策略导致的,按照信息提示操作即可,
git config --global --add safe.directory D:/local/my_repo
set GIT_TEST_DEBUG_UNSAFE_DIRECTORIES=true
两个设置都是必需进行设置的。
今天在上传 Cuda_notes(检测GPU参数信息的项目)时,遇到的这个问题,在这个项目中,我们引用了 cuda-samples 的代码,然后我想通过GitHub把 Cuda_notes 移植到Win11系统上测试,在上传到GitHub时出现了这个问题:
在使用PyCharm的在 GitHub 上共享项目后,进入repo页面发现 cuda-samples 文件夹没有上传;
推测可能是由于 cuda-samples 之前是一个Git项目,于是标记为了git根目录,需要在IDE中去掉相关的标记信息;
相关的操作请参考博文《用ide去掉git信息 - git 无法add文件夹》
Note:
由于 Microsoft Edge 商店中的GitZip是2022年的1.0.1版本,测试了一下在新版的GitHub上无法使用,所以需要在Chrome应用商店中下载最新的版本。
gh
出现这个问题的原因是,准备设置的远程仓库昵称new_name与已关联远程仓库的昵称重名,于是提示“already exists”;
解决方法可以参考博文《fatal: remote origin already exists. (远程来源已经存在 解决办法)》;
首先确认目前存在的仓库昵称,
git remote -v
看看目前已经使用的昵称有哪些;
一个可行的方法是:删除本地项目中的.git
文件夹。
Sourcegraph | 查询语句说明
Sourcegraph有三种搜索方式:literal (文本), regular expression, and structural.
lang:python
关于可以选择的语言可以查看左侧工具栏 DYNAMIC FILTERS :
Sourcegraph提供了一个很棒的功能—— structural search,可以使用func(...)
/obj.method(...)
语句来匹配函数或方法的调用;