GitHub搜索技能
- 通过in关键词限制搜索范围
xxx in:name 项目名包含xxx的
xxx in:description 项目描述包含xxx的
xxx in:readme 项目readme文件中包含xxx的 - 通过xxx in:name,desciption来组合使用
搜索项目名或者描述中包含「demo」的项目:demo in:name,decription - 通过 Star 或者Fork数 查找项目
通过通配符 > < = 即可,区间范围内可通过 num1…num2
如:
要查找stars数不小于666的springboot项目:springboot stars:>=666
查找fork在100到200之间 且stars数在80到100之间的springboot项目:springboot forks:100..200 stars:80..100
- awesome + 关键字
搜索和关键字匹配的优秀项目
awesome springboot 搜索优秀的springboot相关的项目,包括框架、教程等 - 搜索某个地区内的大佬
可以通过location:地区 进行检索,在具体可以通过language:语言 缩小检索范围
如搜索地区在北京的Java方向的用户
location:beijing language:java
浏览文件历史修改记录
方法有很多,借助插件等;但是实际上仔细研究就不难得出一个结论:插件实际上也是利用GitHub暴露的API。GitHub提供的API可谓是RESTful API的业界标杆和良心集大成者。研究GitHub的API对于设计REST API益处良多。
查看某个文件的历史修改记录的几种方法:
页面history功能
这个是最容易想到也是最简单的方法,在页面即可看到。
命令行
使用 git bash 命令行:``
第三方
以文件 https://github.com/johnnywong233/test/blob/master/demo/pom.xml 为例,将URL前面的域名部分替换为 https://github-history.netlify.com/,即得到 https://github-history.netlify.com/johnnywong233/test/blob/master/demo/pom.xml,在页面顶部即可看到一次次提交记录,点击头像,即跳转到对应版本。
下载单个文件或者文件夹
前言
是不是感觉很奇怪?但是我的确遇到这样的需求,找了找网络资料分享出来。
需求来源:
- 不太在意文件夹/文件的历史版本,即不需要了解更改信息;
- 在国内 git clone 或者 download zip 的速度太慢;
- 一个庞大的 git repository 仓库,我只对其中的一部分功能感兴趣;
比如大名鼎鼎的SpringFramework,我只对其中的spring-messaging感兴趣;实际上这个举例并不好,得益于spring-framework良好的组织机构,知道每个包的功能;得益于规范化的提交记录 git commit(有空写写提交的规范),1.6 W+ 次的提交,并没有让仓库变得臃肿(GitHub只应该用于提交代码文件)……
解决方案1
基于 SVN 命令行,真的是汗颜啊;刚才 SVN 转到 Git 的阵营。
首先去下载一个SVN的命令行,这里是下载连接。
打开cmd,键入svn help
,如果有内容,说明安装成功。
在 github 上定位到所需下载的文件夹,例如:
https://github.com/zxing/zxing/tree/master/core
。
使用svn checkout https://github.com/zxing/zxing/tree/master/core
来查看一下文件夹内容。
将https://github.com/zxing/zxing/tree/master/core
中的tree/master/
替换为trunk/
即https://github.com/zxing/zxing/trunk/core
。
键入命令svn export https://github.com/zxing/zxing/trunk/core C:/Downloads/zxing_core
。
C:/Downloads/zxing_core
为需要保存到的本地目录,注意空格。
解决方案2
基于chrome extension(插件)-octotree。这是一款在页面左侧以类似于Windows 下 树形图形式展示GitHub代码,方便浏览的插件。安装需代理。
缺憾是只能下载单个文件。
第一家公司外企,有钱任性,先是使用 atlassian 软件公司的付费仓库 git stash,然后直接使用GitHub私有付费仓库;但是跳槽之后的私企都是使用GitLab,公司内部搭建的 git 服务器,此时octotree就派不上用场;继续找插件呗,发现 gitlab tree 这款插件。插件安装需要翻,配置可能有点麻烦。有时候可能配置token之后还是不能使用,很有可能是内网的每个组件把这个功能给禁掉了;待验证。
在线编辑代码
如图,在线编辑,编辑完成之后点击 Propose file change 按钮 GitHub 将会自动帮你 fork 该项目并且创建一个 pull request。非常适合修复编写代码中出现的拼写错误和修正一个不太理想的想法。
快捷键
- T
打开想要搜索的项目,按T键,会跳转至一个新的网页,URL形式如:https://github.com/<user>/<repo_name>/find/master
,然后即可搜索想要查看的文件。 - L
在GitHub页面输入L,弹窗输入数字,即可实现跳转到多少行,效果等同于直接在URL后面添加:#L44
、#L44-L50
。
类似的页面内快捷键还有很多,更多快捷键查看https://help.github.com/en/articles/using-keyboard-shortcuts
trending
trending排行榜:
https://github.com/trending/java?since=daily 语言可选其他如ruby,更新间隔可选:monthly,yearily等;
gitattributes设置项目语言
比如我的一个代码库 https://github.com/johnnywong233/test
居然被识别成JavaScript项目,github 会根据相关文件代码的数量来自动识别这个项目是什么语言的项目,肯定是Java啊,为什么识别为 JS 也是莫名。google 一下,发现 GitHub 是使用 Linguist 来检测所使用的语言。
那么如何修改呢?
解决方法1:在项目的根目录的文件 .gitattribute 文件里面添加配置:
# resolve repo detect error
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java
GitHub pull request
后文简记为pr,GitHub 提 PR的步骤:
- Fork repository. After this done, you will get a new repository like
<your_name>/<repo_name>
; - Git clone it;
- Make change in a forked repo, git add, git commit -m, git push as usual;
- On GitHub page, click new pull request.
但是稍加思考就知道,如果被fork的repo有更新,我得在提交pr之前先和远程repo保持同步。同步之后,才能提交pr,否则有冲突不说,还会有其他团队协作的问题。
Fork过来的代码如何与源代码保持同步更新?
- 先将原来的仓库指定为upstream
git remote add upstream [email protected]:johnnywong233/test.git
git remote -v
查看远程分支。 - fetch源分支的新版本到本地
git fetch upstream
- 合并两个版本的代码
git merge upstream/master
或者使用GitHub页面的鼠标点击操作:
GitHub 插件
严格来说,是Chrome插件,用于GitHub页面的。
octotree
平常情况下,在线查看GitHub代码,需要进入一层层目录然后才能查看,效率非常低下。借助于这个插件,可以像本地浏览目录一下在线查看GitHub代码。
Sourcegraph
在GitHub上浏览和搜索代码的工具,安装好插件之后会出现一个view Repository的按钮。可以随意在项目中搜索,可以查看变量和方法,以及进行跳转等。
OctoLinker
对于习惯于使用IDE的我们,使用鼠标可以链接跳转进而查看方法定义;此插件即可实现这个功能,和IDE里面一样,Ctrl+点击变量名即可。不过,试用下来效果不好。
GitHub小技巧
在评论中输入“:”(冒号)便会开启表情自动补全功能,只要输入几个与该表情相关的字母,系统就会为你筛选自动补全的对象。
R键引用评论
在Conversation中人们通过添加评论进行对话,这里有一个简单的方法可以帮助你引用一个人的评论。选中想引用的评论文字后按R键,杯选择的部分就会自动以评论语法写入评论文本框。该技巧在Issue中同样适用。
GitHub 提交PR的流程
在web端fork项目,git clone到本地,添加原来的源:
git remote add url https://github.com/Microsoft/vscode.git
web端,刷新页面,点击新增PR,即New pull request 按钮,一个PR可以有多个commit,可以把他们合并成一个commit,具体做法如下,找到最新的那个commit 的id:git rebase -i [your-id]
会打开编辑器,出现很多 pick 开头的行,将第一行后面的pick 都改成squash,保存退出,就会将squash 开头的commit 都合并到第一个commit上,这样可以减少你的commit数量。
删除GitHub上面的文件
问题来源:添加编辑项目的readme.md文件并提交,错误地写成如前所述小写,现要重命名改成大写的README.MD,提交代码,发现服务端也就是Github上面并没有把readme.md替换为README.MD,而是保留两份文件。同时,在只存在readme.md时,进入项目主页,可以看到项目的描述信息即为readme.md所述,加入README.MD之后,变为README.MD的内容。即后者为默认的展示文件。
那么,如何从github上面删除不要的readme.md文件?
可以使用下面的命令,先将stage中的文件删除,然后提交,再push到远程,这时github上的文件就不存在。
进入到对应目录,在终端中执行以下操作:
-
git rm --cached readme.md
-
git commit -m "delete readme.md"
-
git push origin
GitHub下载单个文件夹
需求:GitHub/项目过于庞大的情况下,如何下载单个文件夹?
网上诸多google、百度之后的解决方案,大体有以下三类:
- 安装svn 客户端,配置成功之后即可使用svn 的checkout功能.
把路径URLhttps://github.**.com/**/**/blob/master/postgres/9.5.5/
改为trunk:
svn checkout https://github.**.com/**/**/trunk/postgres/9.5.5
- 借助于chrome 插件(extension),如GitHub Mate. Octotree(可以在页面左侧显示整个GitHub repository的文件夹浏览形式)
- 在线工具DownGit
- 安装客户端,作用类似于svn的客户端。
参考链接
BTW,下载单个文件的话,svn checkout 不行;此时可以使用Octotree。
参考
stackoverflow一个浏览 GitHub 文件的神操作!