github开发

来源:互联网 发布:人工智能要学单片机吗 编辑:程序博客网 时间:2024/05/17 01:31


零、引子(http://site.douban.com/196781/widget/notes/12161495/note/269163206/)

1. 最最开始,我以为git clone [项目地址],也就是把代码clone下来 然后修改,然后push到项目里就可以了。
    后来发现,这种情况只适合该项目属于你自己的情况,如果你git clone别人的项目代码,你想push都push不上去,因为 git push 不是需要你输入github帐号密码么。


2. 然后 我就知道了 github上 不是有个fork么, 好,那么给别人的项目提交代码的方式就有了,先fork下别人的代码,于是你的github上就出现了同名的项目,这个项目就属于你自己了,你把这个自己的项目git clone到本地,修修改改,然后push到你自己的项目里,那么你如何把你对自己项目的改动,给发到之前fork的那个原项目呢,看见了没,在github上你的项目页面有个按钮,叫Pull request,对 你点它就会把你的修改发到对方的项目里,人还会收到邮件呢,由原项目主人决定是否接受你的修改。



一、基于自己的项目开发


空 白


提交自己本地项目的修改到 github 的库中.

如果你自己的项目,你自己 clone 到本地后, 进行了一系列的修改, 然后你想提交, 大多最方便的方式是使用 HTTP 的方式进行提交。 但你提交的时候, 会发现一直提示:

error: The requested URL returned error: 403 Forbidden while accessing http://xxx

这主时, 你需要修改你的项目目录下的 .git/config 文件 在 url 中修改成象

url = https://iakuf@github.com/iakuf/mojo

也就是给你的 github 的帐号名使用 @ 加到前面, 才能做为 HTTP 认证的用户来认证. 这样就不用关心 SSH 的 Key 的问题了。




二、基于别人的项目开发(需要fork)


        现在有这样一种情形:有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它。并且Joe将他的代码放在了GitHub仓库上。下面是你要做的事情:


1.fork并且更新GitHub仓库的图表演示

                         Alt text

  1. Fork他的仓库:这是GitHub操作,这个操作会复制Joe的仓库(包括文件,提交历史,issues,和其余一些东西)。复制后的仓库在你自己的GitHub帐号下。目前,你本地计算机对这个仓库没有任何操作。(在GitHub.com上对repo进行fork)

  2. Clone你的仓库:这是Git操作。使用该操作让你发送"请给我发一份我仓库的复制文件"的命令给GitHub。现在这个仓库就会存储在你本地计算机上。(利用右侧边栏中的HTTPS clone URL对repo进行克隆:git clone git@github.com:jcutrell/jquery.git)

  3. 更新某些文件:现在,你可以在任何程序或者环境下更新仓库里的文件。

  4. 提交你的更改:这是Git操作。使用该操作让你发送"记录我的更改"的命令至GitHub。此操作只在你的本地计算机上完成。

  5. 将你的更改push到你的GitHub仓库:这是Git操作。使用该操作让你发送"这是我的修改"的信息给GitHub。Push操作不会自动完成,所以直到你做了push操作,GitHub才知道你的提交。

  6. 给Joe发送一个pull request:如果你认为Joe会接受你的修改,你就可以给他发送一个pull request。这是GitHub操作,使用此操作可以帮助你和Joe交流你的修改,并且询问Joe是否愿意接受你的"pull request",当然,接不接受完全取决于他自己。

         如果Joe接受了你的pull request,他将把那些修改拉到自己的仓库。胜利!



2.同步一个fork

       Joe和其余贡献者已经对这个项目做了一些修改,而你将在他们的修改的基础上,还要再做一些修改。在你开始之前,你最好"同步你的fork",以确保在最新的复制版本里工作。下面是你要做的:

                                     Alt text

        同步GitHub fork的图表示意图

  1. 从Joe的仓库中取出那些变化的文件:这是Git操作,使用该命令让你可以从Joe的仓库获取最新的文件。

  2. 将这些修改合并到你自己的仓库:这是Git操作,使用该命令使得那些修改更新到你的本地计算机(那些修改暂时存放在一个"分支"中)。记住:步骤1和2经常结合为一个命令使用,合并后的Git命令叫做"pull"。

  3. 将那些修改更新推送到你的GitHub仓库(可选):记住,你本地计算机不会自动更新你的GitHub仓库。所以,唯一更新GitHub仓库的办法就是将那些修改推送上去。你可以在步骤2完成后立即执行push,也可以等到你做了自己的一些修改,并已经本地提交后再执行推送操作。



3.比较一下fork和同步工作流程的区别

         当你最初fork一个仓库的时候,信息的流向是从Joe的仓库到你的仓库,然后再到你本地计算机。但是最初的过程之后,信息的流向是从Joe的仓库到你的本地计算机,之后再到你的仓库。






4.结论

        我希望这是一篇关于GitHub和Git 的 fork有用概述。现在,你已经理解了那些概念,你将会更容易地在实际中执行你的代码。GitHub关于fork和同步的文章将会给你大部分你需要的代码。

         如果你是Git的初学者,而且你很喜欢这种学习方式,那么我极力推荐书籍Pro Git的前两个章节,网上是可以免费查阅的。

         如果你喜欢视频学习,我创建了一个11部分的视频系列(总共36分钟),来向初学者介绍Git和GitHub。

GitHub 使用教程图文详解  http://www.linuxidc.com/Linux/2014-09/106230.htm

如何在 GitHub 建立组织 http://www.linuxidc.com/Linux/2013-08/88197.htm

GitHub Linux下使用方法 http://www.linuxidc.com/Linux/2013-06/86417.htm

Windows下Eclipse搭建GitHub开发环境图文教程 http://www.linuxidc.com/Linux/2013-06/85372.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-11/109785.htm




5.补充实例:

(实例1)参与到其他项目中去,并通过pull request工作流进行代码贡献

       贡献代码的工作流程可能令人望而生畏。最重要的一点是要记住按照当前工作项目(正如我们前面所讨论过的)的模式及标准处理工作。GitHub所支持的一般性工作流程其实没那么困难。

1.将目标repo发送到自己的账户当中。

2.将repo克隆到自己的本地设备当中。

3.查看新的“主题分支”并做出变更。

4.将主题分支推送回自己的fork。

5.利用GitHub上的差异查看器创建一条pull request。

6.根据请求进行变更。

7.将pull request进行合并(通过在主分支当中),然后将主题分支从上游(目标)repo当中删除。

在整个工作流程当中,根据给定项目的不同、其具体内容也会出现很多差异。举例来说,主题分支的命名约定可能有所区别。某些项目使用诸如bug_345这样的公约,其中345代表已经提交的GitHub问题ID号。某些项目更倾向于提交相对较短的消息。我们将通过以下一系列命令完成前面提到的工作流程。

第一步: 进行Fork

在GitHub.com上对repo进行fork。

第二步: 进行克隆

利用右侧边栏中的URL对repo进行克隆:

  1. git clone git@github.com:jcutrell/jquery.git 

第三步: 添加上游远程仓库

切换到克隆目录,在这里大家可以添加上游远程仓库:

  1. cd jquery 
  2. git remote add upstream git@github.com:jquery/jquery.git 

以上命令现在允许大家将本地源中的变更提取出来并加以合并,如下所示:

  1. git fetch upstream 
  2. git merge upstream/master 

步骤四:检查主题分支

不过在大家执行自己的变更前,请先对主题分支进行检查:

git checkout -b enhancement_345

步骤五:提交

现在,大家可以执行变更并创建commit以追踪具体变更内容。

  1. git commit -am "adding a smileyface to the documentation." 

步骤六:推送

接下来,大家将把主题分支推送到自己的项目fork当中。

  1. git push origin enhancment_345 ‘

第七步:创建pull request

最后,大家需要创建一条pull request。首先,查看repo中的fork,我们可能会看到一条"您最近推送的分支"。如果结果确实如此,则可以选择"比较并pull request"。如果显示其它结果,则可以在下拉菜单中选择自己的分支,随后单击repo界面右上角的“pull request”或者“比较”按钮。

通过“比较并pull request(Compare and Pull Request)”按钮创建pull request

通过分支下拉菜单创建pull request

        两种方式都会将我们引导至同一个页面,在这里大家可以创建pull request并在其中添加评论意见。该页面还以直观方式显示出我们所做出的各项变更。这将帮助项目管理员更轻松地查看自己已经完成的工作,同时简化决策过程、更快决定当前内容是否适合提交。如果变更存在问题,管理员可以在评论中提出质疑;管理员还可以要求我们清空pull request并重新提交,然后关闭pull request。

请注意,向项目管理员表达充分的尊重对于开源贡献而言非常重要;毕竟我们总是能够使用代码的分支版本,如果管理员不打算pull我们的变更,这往往与他们的角色定位有关。请记住,根据GitHub员工Zach Holman在《GitHub如何利用GitHub来创建GitHub》一文中所说,pull request实际属于对话的过程。最重要的是认同管理员的处理方式;相对于一味要求对方接受我们提交的内容,大家应当调整心态、只把提交过程视为与编写代码相关的对话通道。

       GitHub Issue+Pull Request=项目管理最佳效果

        GitHub提供GitHub Issue,这是一种非常有效的途径,帮助我们为任何特定项目创建记录化、交互化以及自动化的bug或者功能对话。不过Issue可以被禁用,而且其在默认状态下即被禁用。Issue中内置有大量值得称道的功能,但最重要的功能之一在于其与pull request的整合。用户只需在提交消息中加入issue的数字ID,即可轻松在所提交信息中罗列该issue作为参考。例如:

  1. git commit -am "Adding a header; fixes #3" 

这条提交消息会在关联pull request被接受后自动标记3号issue。这类自动化机制使得GitHub成为一款出色的项目开发管理工具。




(实例2)参与GitHub中其它开源项目

1).我们一直用GitHub作为免费的远程仓库,当然如果可以的话你也可以付费,给开源世界做点贡献嘛,嘿嘿。如果是自己的开源项目,放到GitHub上是完全没有问题的。其实GitHub还是一个开源协作社区,通过GitHub既可以让别人参与你的开源项目,也可以参与别人的开源项目。那么我们如何参与一个开源项目呢?比如人气极高的jquery框架,你可以访问它的项目主页https://github.com/jquery/jquery,点“Fork”就在自己的账号下克隆了一个jquery仓库,然后,从自己的账号下clone。如下图:

image

 

2).点击右上脚的“fork”即可,如下图:

image

 

3).下面我们克隆一份到本地

image

大家可以看到文件比较多,克隆需要一段时间请大家耐心等吧,嘿嘿。注意的是clone仓库一定要从自己的账号下克隆,这样你才能推送修改。如果从jquery的作者的仓库地址git@github.com:jquery/jquery.git克隆,因为没有权限,你将不能推送修改。如果你想修复jquery的一个bug或者新增一个功能,我想说你现在就可以开始开发了,开发完成后往自己的仓库推送。如果你希望jquery的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,官方是否接受你的pull request就不一定了。嘿嘿! 

如何在 GitHub 建立组织 http://www.linuxidc.com/Linux/2013-08/88197.htm

GitHub Linux下使用方法 http://www.linuxidc.com/Linux/2013-06/86417.htm

Windows下Eclipse搭建GitHub开发环境图文教程 http://www.linuxidc.com/Linux/2013-06/85372.htm

R语言 3.0.1 源码已经提交到 GitHub http://www.linuxidc.com/Linux/2013-05/84425.htm

从GitHub将Maven项目导入Eclipse4.2 http://www.linuxidc.com/Linux/2013-04/83082.htm

分享实用的GitHub 使用教程http://www.linuxidc.com/Linux/2014-04/100556.htm











0 0
原创粉丝点击