Git&GitHub 学习2:GitHub使用

1、GitHub 使用技巧

1. 突破GitHub单个大文件上传限制

GitHub 上新建的仓库容量大小限制在 1G,单个文件不能超过 100M,有 50M 的文件,就会警告了。 可经过如下命令查找超过 100M 的文件:find ./ -type f -size +102400k。 想要突破 GitHub 的限制,支持单个文件超出 100M,可使用 Git LFSjavascript

参考:突破github的100M单个大文件上传限制 css

2. Git只Clone仓库指定文件或文件夹

步骤总结以下:html

git init <repo> 	#新建仓库并初始化
cd <repo> 	#切换到该仓库目录
git remote add origin <url>		#拉取remote的all objects信息,url为仓库地址
git config core.sparsecheckout true		#设置容许克隆子目录,即开启sparse clone
echo "参考论*" >> .git/info/sparse-checkout	#设置须要pull的目录,*表示全部,!表示匹配相反的
git pull --depth=1 origin master	#将origin端指定目录下的文件pull到本地
复制代码

经过本人亲自实践,有几点说的:java

  1. 像这步命令echo "参考论" >> .git/info/sparse-checkouth会在.git/info/目录下生成sparse-checkout无后缀文件,打开看到内容能够看到设置为了参考论,即会下载匹配参考论的目录下全部文件。也能够修改成别的,好比修改诸如为参考论文/files/101,匹配参考论文/files/101文件或文件夹?。python

  2. 经过实践,发现其实无论如何设置下载指定的文件或文件夹,其实它都是有下载整个仓库容量大小,正如知乎宫玖的回答 - 知乎,@依云指出:git

    你必定没有亲自去尝试这个功能。「checkout」!=「clone/fetch」。实际上整个仓库仍是会所有拖回本地,只是检出的时候不检出别的目录而已。github

  3. git pull --depth=1 origin master :depth 用于指定克隆深度,为 1 即表示只克隆最近一次 commit,能够不加,不然可能出现问题。补充: git clone 时使用了 --depth 后,如何再从新拉取所有的历史web

PS:后来发现,其实直接打开想要下载的文件,在右上角能够直接鼠标右键点击Raw选择连接另存为便可下载。或是使用浏览器插件【GitZip for github 】能够很是方便下载,推荐。chrome

参考:shell

3. 利用GitHub进行多人协做开发

(1) 开发而且提交代码

首先要从 GitHub 上 clone 本身仓库代码到本地,你须要执行以下命令:

# 若是没有配置ssh,能够 git clone https://github.com/strivebo/git-practice.git
git clone git@github.com:strivebo/git-practice.git 
复制代码

而后代码下载到本地了,修改代码,而后能够提交代码,命令以下:

git add .	# 表示提交全部改动,指定提交某个文件的改动,则可 git add hello.txt
git commit  -m '修改缘由,相关说明信息'
复制代码

执行git commit以后,只是提交到了本机的仓库,而不是 GitHub 上你帐号的仓库。你须要执行 push 命令,把 commit 提交到服务器。

# git push #直接到远程默认仓库,或者下面这个:
git push orgin master #push到名为orgin的远程仓库的指定分支master
复制代码

这样就完成了修改远程仓库代码了。

(2) 多人协做开发

Q:假如想要进行多人协做开发。好比要对 xiaoming 的名为 git-test 的仓库贡献本身写的代码,好比说添加新功能,怎么操做呢?

A:首先你须要 fork 一份 xiaoming 的 git-test 仓库到本身 GitHub 仓库,这个时候这个仓库就是你的了,再 clone 到本地磁盘,而后按上小节流程操做就能够完成对本身 fork 来的远程 git-test 仓库的代码修改工做。

而后能够发起 pull request 给 xiaoming 请求合并代码就行,随即 xiaoming 本人就会看到你写的代码,若是他以为不错,没问题,他就能够进行合并了。(关于如何发起 pull request,请点击本小节参考资料查阅,有截图~)

但这里的合做开发会有一个问题,如何与 xiaoming 的仓库代码保持同步?

由于在本身作开发的过程当中,不免会遇到“Fork”的项目已经有了新的更新,这时固然是但愿本身仓库中的代码也能同步进行更新。但是,你本地仓库所链接的远程仓库的是你本身的 GitHub 仓库,而不是原做者的仓库。 解决方法其实很简单,为你的本地仓库再添加一个远程仓库源。 步骤以下:

①先查看当前项目所链接的远程仓库:git remote -v,通常状况能够看到目前链接了本身的远程仓库,截图我就略了;

②而后添加源做者 xiaoming 的远程仓库链接:git remote add upstream git@github.com:xiaoming/git-test.git

这个命令什么意思呢?就是对本地仓库再关联一个远程链接,名称为 upstream,地址为git@github.com:xiaoming/test.git(若是要取消该关联,使用这个命令:git remote rm upstream

(1)从原仓库获取最新版本到本地
git fetch upstream master

(2)保证当前位于 master 分支上
git checkout master

(3)将最新版本整合到本地 master 分支上
git merge upstream/master

(4)将更新发送到本身的 GitHub 仓库里
git push origin master
复制代码

或者①②③步能够用: git pull upstream master 这条命令替代,不过这样不太安全,由于你 fetch(获取)以后能够经过:git log --oneline --graph --decorate --all来查看更新的状况,再决定是否 merge(整合)到一块儿。

如上操做完毕,这样本身 fork 过来的仓库代码就和原做者仓库代码保证一致了。

也可参考该文:github上fork了别人的项目后,再同步更新别人的提交,该文第二种方法即上面讲的方式,命令以下:

git remote -v 
git remote add upstream git@github.com:xxx/xxx.git
git fetch upstream
git merge upstream/master
git push 
复制代码

参考资料:

4. 同一台电脑配置多个Git帐号

在平常使用 GitHub 做为仓库使用的时候,有时可能会遇到这样的一些状况:

1. 有两个 github 帐号,一台电脑怎么同时链接这两个帐号进行维护呢?
2. 本身用一个 github 帐号,平时用来更新本身的一些资料;公司使用的 gitlab(也是 git 的衍生产品)
复制代码

SSH Key 的配置:

  1. Windows 下打开 Git Bash,建立 SSH Key,按提示输入密码,能够不填密码一路回车

    $ ssh-keygen -t rsa -C "注释" 	#如:ssh-keygen -t rsa -C “123456@qq.com”
    复制代码
  2. 生成另一个帐号新的 SSH keys

    ssh-keygen -t rsa -C "注释"	#如:ssh-keygen -t rsa -C "123456@sina.com"
    复制代码

    平时咱们都是直接回车,默认生成 id_rsaid_rsa.pub。这里特别须要注意,出现提示输入文件名的时候(Enter file in which to save the key (\~/.ssh/id_rsa): id_rsa_new)要输入与默认配置不同的文件名,好比:我这里填的是 id_rsa_new

    其实也能够一个命令操做,是使用 -f 参数指定文件名:ssh-keygen -t rsa -C "注释" -f id_rsa_new"

  3. 配置 C:\Users\用户名\.ssh\config 文件。在 .ssh文件夹下新建 config 文件(无后缀名),修改以下:

    #github
    Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    
    #github2
    Host second.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_new
    复制代码

    注:令不一样 Host 实际映射到同一HostName,但密钥文件不一样。Host 前缀可自定义。

    它们具体的含义以下:

    #Host myhost(这里是自定义的host简称,之后链接远程服务器就能够用命令ssh myhost)[注意下面有缩进]
    #User 登陆用户名(如:git)
    #HostName 主机名可用ip也能够是域名(如:github.com或者bitbucket.org)
    #Port 服务器open-ssh端口(默认:22,默认时通常不写此行)
    #IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
    复制代码
  4. 测试:

    $ ssh -T git@github.com
    Hi xiaoming! You've successfully authenticated, but GitHub does not provide shell access.
    
    $ ssh -T git@second.github.com
    Hi zhangsan!  You've successfully authenticated, but GitHub does not provide shell access.
    复制代码

解决方案总结为:

  1. 生成私钥/公钥,密钥文件命名避免重复
  2. 设置不一样 Host 对应同一 HostName 但密钥不一样
  3. 取消 git 全局用户名/邮箱设置,为每一个仓库独立设置用户名/邮箱

如何取消 Git 全局用户名/邮箱设置,以下:

  1. 使用 git config --list 查看当前配置

    若是你以前在设置本地仓库和 github 链接的时候设置过 user.nameuser.email, 那么你必须首先清楚掉该设置,由于不清楚掉该设置,两个帐号在提交资料的时候,验证确定冲突(只能设置一个全局的user.nameuser.email,而你如今有两个帐号就对应两个不一样的)。

  2. 取消 global

    git config --global --unset user.name
    git config --global --unset user.email
    复制代码
  3. 设置每一个项目 repo 的本身的 user.email

    git config  user.email "xxxx@xx.com"
    git config  user.name "suzie"
    复制代码

或者直接直接编辑电脑.gitconfig 文件(Windows 系统在C:\Users\用户名\.gitconfig目录),把 nameemail 都去掉,从而取消全局用户/邮箱设置。

参考资料:

5. Git配置多个SSH-key?为何?

背景:当有多个 git 帐号时,好比:

a. 一个 gitee,用于公司内部的工做开发;
b. 一个 github,用于本身进行一些开发活动;
复制代码

操做步骤:

①生成一个公司用的 SSH-Key

ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/gitee_id_rsa
复制代码

②生成一个 github 用的SSH-Key

ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa
复制代码

③在 ~/.ssh 目录下新建一个config文件,添加以下内容(其中Host和HostName填写git服务器的域名,IdentityFile指定私钥的路径)

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa

#github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
复制代码

④用ssh命令分别测试

ssh -T git@gitee.com
ssh -T git@github.com
复制代码

参考资料:

6. 如何将GitHub已有的项目转移到组织仓库中去

打开仓库,点击 setting,拉到最下面,点击 Transfer,会看到要求输入以下:

在这里分别输入要转移的项目名称,第二行输入组织名。输入完毕以后点击I understand transfer this repository

参考资料:github如何将已有的项目转移到组织仓库中去

7. 如何在GitHub上添加协议?

①进入你的“代码仓库”,点击"Create new file",这时 GitHub 的新页面上,有一个空格让你填入文件名称。

②在输入框输入文件名”LICENSE",这里输入框的右侧会出现包含全部开源协议的列表,选择合适的开源协议,选择你须要的协议;

③点击“Commit new file”,这时你添加的开源协议就在代码仓库的菜单中了。

参考:如何在github上添加协议

8. 保持码云Gitee和GitHub同步更新?

使用 GitHub 时,国内的用户常常遇到的问题是访问速度太慢,有时候还会出现没法链接的状况(缘由你懂的)。若是咱们但愿体验 Git 飞通常的速度,可使用国内的 Git 托管服务——码云gitee.com)。和 GitHub 相比,码云也提供免费的 Git 仓库。此外,还集成了代码质量检测、项目演示等功能。对于团队协做开发,码云还提供了项目管理、代码托管、文档管理的服务,5 人如下小团队免费。

使用码云和使用 GitHub 相似,在此不赘述了。下面主要讲的是从 GitHub 上 clone 下来的仓库如何与 Gitee 保持同步更新,操做以下:

切换到本地仓库目录,先使用命令:git remote -v 查看是否关联了远程仓库。若是显示以下:

git remote -v
origin    git@github.com:michaelliao/learngit.git (fetch)
origin    git@github.com:michaelliao/learngit.git (push)
复制代码

说明本地库已经关联了origin的远程库,而且,该远程库指向 GitHub。咱们能够关联一个远程仓库并指向 Gitee,这样本地库就既关联 GitHub,又关联码云。

PS:使用多个远程库时,咱们要注意,Git 给远程库起的默认名称是origin,若是有多个远程库,咱们须要用不一样的名称来标识不一样的远程库。

接下来,咱们再关联码云远程仓库:

git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
复制代码

注意:远程库的名称叫gitee,不叫origin

如今,咱们用git remote -v查看远程库信息,能够看到两个远程库:

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)
复制代码

若是要推送到 GitHub,使用命令:

git push github master
复制代码

若是要推送到码云,使用命令:

git push gitee master
复制代码

注意:本人用的同一个 ssh-key 的状况下,在提交代码使用简短命令:git push时候貌似只提交到了 GitHub 远程仓库;若要提交到 Gitee,则再需git push gitee master

参考:使用码云 - 廖雪峰的官方网站

9. 如何正确接收 GitHub 的消息邮件

参考:如何正确接收 GitHub 的消息邮件

10. 精准分享关键代码

好比你有一个文件里的某一行代码写得很是酷炫或者关键,想分享一下。能够在 url 后面加上,好比,点击下面这 个 url:github.com/AlloyTeam/A…,你便会跳到 alloy_touch.js 的第 240 行。若是是想分享多行代码,也很简单:url 后面加上 #L 开始行号 -L 结束行号,好比,AlloyTouch 的运动缓动和逆向缓动函数以下面代码段所示:github.com/AlloyTeam/A…,其实也不用记忆你直接在网址后面操做,GitHub 自动会帮你生成 url。好比你点击 39 行,url 变成了:github.com/AlloyTeam/A…,再按住 shift 点击 45 行,url 变成了:github.com/AlloyTeam/A…,而后你这个 url 就能够复制分享出去了,点击这个 url 的人自动会跳到 39 行,而且 39-45 行高亮。

11. 经过提交的msg自动关闭issues

好比有人提交了个 issues github.com/AlloyTeam/A…,而后你去主干上改代码,改完以后提交填 msg 的时候,填入:fix https://github.com/AlloyTeam/AlloyTouch/issues/6,这个 issues 会自动被关闭。固然不只仅是 fix 这个关键字。下面这些关键字也能够:

close
closes
closed
fixes
fixed
resolve
resolves
resolved
复制代码

12. gitattributes设置项目语言

GitHub 会根据相关文件代码的数量来自动识别你这个项目哪一个语言代码项目。这就带来了一个问题,好比 AlloyTouch 最开始被识别成 HTML 项目,由于 HTML 例子比 JS 文件多。怎么办呢?gitattributes 来帮助你搞定。在项目的根目录下添加以下 .gitattributes 文件即可,里面的:

*.html linguist-language=JavaScript
复制代码

主要意思是把全部 html 文件后缀的代码识别成 js 文件。

13. 查看本身项目的访问数据

在本身的项目下,点击 Insights,而后再点击 Traffic,里面有 Referring sites 和 Popular content 的详细数据和排名。如:Referring sites

其中 Referring sites 表明你们都是从什么网站来到你的项目的,Popular content 表明你们常常看你项目的哪些文件。

14. trending排行榜

来看看怎么查看某类型语言的每日排行榜。好比 JavaSrcipt 每日排行榜:

GitHub 推荐:github.com/explore

15. 使用GitHub release发布应用

(1) 建立release

  1. 在 repo 的主页上,点击 release,进入 release 界面

  2. 在 release 界面点选 create a new release

  3. 填写相关信息,上传文件

    1. publish release

    2. 经过 GitHub 官方提供的 api 可访问咱们的 release 信息:

      /repos/:owner/:repo/releases/:id
      复制代码

参考:github release 功能的使用及问题解决

2、GitHub项目美化

1. GitHub项目徽章的添加和设置

GitHub 项目的 README.md 中能够添加徽章(Badge)对项目进行标记和说明,这些好看的小图标不只简洁美观,并且还包含了清晰易读的信息。

徽标主要由图片和对应的连接(固然,你能够不填)组成,徽标图片的话通常由左半部分的名称和右半部分的值组成。

GitHub 徽标的官方网站是:shields.io/,咱们能够在官网预览绝大部分的徽标样式,而后选择本身喜欢的(固然首先须要适用于本身的目标项目)徽标,添加到本身的项目文档中去。

参考资料:

2. 为GitHub项目添加表情

GitHub 支持的表情,官网查询:www.webfx.com/tools/emoji…

格式,如::blush:,显示为:blush:

3、GitHub使用细节

1. 本地查看远程分支

git clone 默认会把远程仓库整个给 clone下来,但只会在本地默认建立一个 master 分支,若是远程还有其余的分支,此时用 git branch -a 查看全部分支。

2. GitHub支持多种协议

GitHub 给出的地址不止一个,除了 git@github.com:xiaoming/test.git 这个地址,还可使用https://github.com/xiaoming/test.git 这样的地址。实际上,Git 支持多种协议,默认的 git:// 使用ssh,但也可使用 https 等其余协议。

使用 https 除了速度慢之外,还有个最大的麻烦是每次推送都必须输入口令,可是在某些只开放 http 端口的公司内部就没法使用 ssh 协议而只能用 https。

3. 设置默认被推送的分支

git push -u origin test #设置默认被推送的分支
git push	#这个时候我推送的远程分支应该是 origin/test
复制代码

查看git push关联的远程分支:git branch -v

4. ssh-keygen命令

ssh-keygen 命令用于为“ssh”生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。语法:ssh-keygen(选项)

参数:

-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,而后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要建立的密钥类型。
复制代码

如:ssh-keygen -t rsa -C "123456@qq.com"

5. Git忽略提交(.gitignore文件)

在使用 Git 的过程当中,咱们喜欢有的文件好比日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来讲一个场景:在你使用git add .的时候,遇到了把你不想提交的文件也添加到了缓存中去的状况,好比项目的本地配置信息,若是你上传到 Git 中去其余人 pull 下来的时候就会和他本地的配置有冲突,因此这样的个性化配置文件咱们通常不把它推送到 GIt 服务器中,可是又为了偷懒每次添加缓存的时候都想用git add .而不是手动一个一个文件添加,该怎么办呢?很简单,Git 为咱们提供了一个.gitignore文件只要在这个文件中申明那些文件你不但愿添加到 Git 中去,这样当你使用git add .的时候这些文件就会被自动忽略掉。

对于常用 Git 的朋友来讲,.gitignore配置必定不会陌生。这种方式经过在项目的某个文件夹下定义.gitignore文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的 Git 提交行为。.gitignore文件是能够提交到公有仓库中,这就为该项目下的全部开发者都共享一套定义好的忽略规则。在.gitingore文件中,遵循相应的语法,在每一行指定一个忽略规则。如:

*.log
*.temp
/vendor
复制代码

参考:Git忽略提交规则 - .gitignore配置运维总结

6. 如何在README.md中嵌入一个Gist?

适用于 GitHub 的网页,经过 Jekyll,使用 Markdown 中的脚本标记,而后由 Jekyll 处理。由于 Markdown支持 html,因此能够直接使用< script>标签嵌入 Gist。

只需复制 GitHub 提供的 Gist 的嵌入网址,示例,复制如下内容并粘贴到 Markdown 文件:

< script src =“https://gist.github.com/nisrulz/11c0d63428b108f10c83.js”>< / script>
复制代码

这样能看到想要的结果。注:以上使用的 Jekyll 方式,亲测,若是是直接嵌入 README.md 文件是不行的,由于 GitHub为了安全性都不能引入自定义的 JS 和 CSS。

参考:

7. 其余网页上面嵌入我的的GitHub仓库?

是否想在其余网页上面嵌入本身的 GitHub 仓库页面,有个 star 或 fork 按钮,以下图:

能够这样写:

<iframe src="https://ghbtns.com/github-btn.html?user=strivebo&amp;repo=websites-and-tools&amp;type=watch&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="156px" height="30px"></iframe>
<iframe src="https://ghbtns.com/github-btn.html?user=strivebo&amp;repo=websites-and-tools&amp;type=fork&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="156px" height="30px"></iframe>
复制代码

把 user 和 repo 改为你本身的就能够了。注:亲测,GitHub 网站页面暂不支持。

8. GitHub快捷方式

  • issue 中输入冒号 : 添加表情
  • 任意界面 shift + ?显示快捷键
  • issue 中选中文字,R 键快速引用

参考及推荐资料

相关文章
相关标签/搜索