zoukankan      html  css  js  c++  java
  • 使用GitHub分享代码

      感谢优达的免费课程,还有网络上热心的网友,尤其是廖雪峰老师的教程帮我填补好多空缺。这是三个笔记中最后一个了,我的课外学习要先告一段落了,考验要紧啊,还没咋复习呢。心里好慌,希望自己能耐得住性子坐下来复习。加油!

      一定要从自己的账号下clone仓库,这样你才能推送修改。如果从原作者的仓库地址克隆,因为没有权限,你将不能推送修改。所以为此必须在GitHub上新建一个空的仓库。使用它来保存其他人的仓库,并实现与本地的交互。每次更新GitHub时,更新的是一个分支,他会检查该更新所有的提交,如果GitHub中存在就不需要再次上传,如果没有则会提交。  

      在创建一个新的GitHub仓库时,会有选项“使用README来初始化仓库”:如果这完全是一个新的仓库并且本地也没有任何相关内容的话,建议使用该选项,他会初始化一个commit。否则你无法克隆一个空的仓库。在GitHub的远程仓库中可以直接创建纯文本文件。

    互联设置:因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"

    注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    查看和创建远程仓库:git remote。

    • 不加参数:查看所有远程仓库。
    • git remote add name HTTPS:添加远程仓库,name可以是任何字段,用来在本地指代GitHub中的远程仓库。如果只有一个远程仓库,建议使用origin。最后加上该库的https地址。
    • git remote -v:输出详细信息。

    更新远程仓库:

    git push 远程仓库名 本地分支名

    复制GitHub上其他人的库 

    对于GitHub上想要修改的仓库,可以使用fork按钮将其复制到自己的账户中,GitHub会自动给出原文件链接。想要对其进行修改,除非改动非常小,否则都需要clone到本地,使用git clone URL克隆时,git会自动地创建一个远程仓库并指向克隆的原始仓库。可以食用git remote -v验证。这里的URL是fork的主页URL。

     

    图一GitHub上克隆到本地

      在自己创建一个库的同时还有合作伙伴的时候,可以选用“合作者“一同开发,不过主人还是有主导权的,在setting选项卡中,有collaboration选项可以添加不同的合作者。

    git会把你的所有远程分支在本地保存一个副本,他会包含最后一次拉取、推送时分支的状态。远程分支的本地副本以“远程仓库名/分支名”为名,与远程推送储存在一起。

    更新远程分支本地副本

    git fetch:更新远程分支的本地副本,同时实际的本地版本不发生变化。

    从远程仓库拉取最新的状态

    git pull:从远程仓库拉取最新的状态,并把它与本地的分支进行合并。

    合并机制

      这本来是要在上一篇中讲的,上一篇内容太多了,正好这里也有合并的内容,就放在了这里。

      快速合并:你要git默认的合并方式,判断依据是与本分支合并的分支是否是本分支的祖先。如果是这种情况,后面的分支会有前面的分支所有内容,没有必要再产生一个标签,只要把祖先的标签移到最后即可。但是即使是使用快速合并,在GitHub上也会产生一个commit。也可以使用强制非快速合并,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。所以建议使用非快速合并。

     

    图二快速合并举例

     分支策略

      在实际开发中,我们应该按照几个基本原则进行分支管理:

      首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在其他分支上如:easy-mode,也就是说,easy-mode分支是不稳定的,到某个时候,比如1.0版本发布时,再把easy-mode分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在easy-mode分支上干活,每个人都有自己的分支,时不时地往easy-mode分支上合并就可以了。

    拉取请求

     如果在本地新建一个分支并在其上进行修改,将其推送到GitHub上时也会同样创建一个分支。如果想让其他人更改使用“pull request”拉取请求,即别人可以提交修改,你可以决定是否将其合并到master分支上。设置“pull request”时要注意,GitHub默认是将新分支合并到最原始的仓库中,如果不想一定要更改。拉取请求其实就是合并请求,合作者把想合并到主分支的文本提交到GitHub上,如果主人同意就可以合并到主分支上了。

     

    图三更改请求提交位置

    设置完之后,会在仓库主页中出现pull request选项卡,新的拉取请求在其中,选择相应的请求,会看到最新的提交,你可以点开看到更改的内容。

     

    图四拉取请求位置

      如果有多个pull request,并且他们之间有冲突的话,一般的解决方法是先先判断哪个请求要合并,不需要合并的请求直接删除,减少冲突。如果两个都需要的合并产生冲突可以先合并一个,删除该分支,然后在本地电脑上解决冲突,并将解决方案与主分支(想要被合并的分支)合并到解决方案所在地分支中,然后将该分支push到GitHub中,用来更新“pull request”。使用“git pull 远程仓库名 分支名”来拉取远程仓库中相应的分支。

      不要直接将修改合并到主分支然后push,这样会导致合作者无法看到你的更改。

      如果在你修改本地仓库添加新内容时,原作者修改了他的文件导致你无法与最新版本进行合并,可以先创建一个指向源库的远程仓库一般叫做upstream,在本地解决冲突,然后将其push到自己的GitHub上再次提出pull request

      

    图六 git中一些常用概念以及方法的关系

    以下内容都是后加的。

    冻结现场命令git stash

             如果遇到突发情况,需要立刻去其他分支上处理问题,但是有头上的工作还没做完无法commit,这时候可以使用命令git stash可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

             使用git stash命令后,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。

             用git stash list命令找到储藏的工作现场,需要恢复一下,有两个办法:

    • 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
    • 另一种方式是用git stash pop,恢复的同时把stash内容也删了,但是只能是只有一个stash文件的情况下使用。

    你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令

     

    图七 git stash命令使用情况

    标签tag

             这东西没有听老师讲过,但是看了廖雪峰老师的教程后明白了,其实很简单,给个原链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013762144381812a168659b3dd4610b4229d81de5056cc000

    标签说白了就是一个代号罢了,为了简化commit ID。

             使用也非常简单添加标签使用命令git tag <name>。通常会默认放在该分支的最新提交上。git tag -a <tagname> -m "blablabla..."可以指定标签信息,git tag可以查看所有标签。可以使用git tag <name> commitID给相应ID的commit补上一个标签。

             因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除使用命令:git tag –d <name>

             命令git push origin <tagname>可以推送一个本地标签到远程。

  • 相关阅读:
    使用Publish Over SSH插件实现远程自动部署
    Certificates does not conform to algorithm constraints
    在 Linux 命令行脚本中执行 sudo 时自动输入密码
    pig学习
    Attention-based Model
    kesci---2019大数据挑战赛预选赛---情感分析
    计算广告(1)---广告技术概览
    Hadoop 使用小命令(2)
    shell学习(2)----常用语法
    docker入门
  • 原文地址:https://www.cnblogs.com/lizhe-Ning/p/9239905.html
Copyright © 2011-2022 走看看