在Github和Git上fork之简单指南
以我的经验来看，刚接触Git和GitHub时，最困扰的一件事情就是尝试解决下面的问题：在Git和GitHub上，我能做什么？ Git教程往往不会解决这个问题，因为它集中篇幅来教你Git命令和概念，并且不认为你会使用GitHub。GitHub帮助教程一定程度上弥补了这一缺陷，但是它每篇文章的关注点都较为狭隘，而且没有提供关于&quot;Git vs GitHub&quot;问题的概念性概述。 如果你是习惯于先理解概念，再着手代码的学习者，而且你也是Git和GitHub的初学者，我建议你先理解清楚什么是fork。为什么呢 ？  Fork是在GitHub起步最普遍的方式。 Fork只需要很少的Git命令，
git github fork
117.26.249.10
中科软还挺喜欢考git…………
微博评论
2014-11-24T16:33:01.000
117.26.249.10
转发微博.
微博评论
2014-11-24T16:33:01.000
117.26.249.10
Repost
微博评论
2014-11-24T16:33:01.000
117.26.249.10
Repost
微博评论
2014-11-24T16:33:01.000
0.0.0.0
@我的印象笔记
微博评论
2014-11-24T17:03:04.000
0.0.0.0
马克
微博评论
2014-11-24T17:03:04.000
61.154.15.211
@石头也疯癫儿 //@LUPA开源社区:转发微博
微博评论
2014-11-24T17:33:01.000
61.154.15.211
不错的教程[噢耶]
微博评论
2014-11-24T17:33:01.000
116.24.51.55
@我的印象笔记
微博评论
2014-11-24T18:33:01.000
68.180.228.107
repost
微博评论
2014-11-24T19:33:02.000
218.30.103.250
马
微博评论
2014-11-24T22:03:03.000
14.127.30.90
git fork,
来自 - 广东深圳 的 Firefox/Linux 用户
2014-11-24T23:23:48.000
110.89.37.141
@XTT是纯纯的牛奶巧克力 我翻译的其中一篇
微博评论
2014-11-25T09:03:02.000
110.89.37.141
回复@谁抢了我苏苏的昵称:又不是你写的[拜拜]
微博评论
2014-11-25T09:03:02.000
110.89.37.141
回复@XTT是纯纯的牛奶巧克力:噢
微博评论
2014-11-25T09:03:02.000
110.89.37.141
回复@谁抢了我苏苏的昵称:以后你也能写
微博评论
2014-11-25T09:03:02.000
218.194.39.94
简单易懂
来自 - 四川成都电子科技大学 的 Firefox/Windows 用户
2014-11-29T15:02:59.000
113.99.4.75
受教了,刚看完pro git,再加上这个,概念清晰多了
来自广东广州的 Chrome 45.0|Windows 7 用户
2015-10-12T10:56:11.000
89.234.157.254
你使我的一天<br />
{{MmVhZGFkMmQ2NGM2YzYwNTA0NjVlNjY1NjVjNWU2MDUyNDA1ZTYwNTA0YzVjNmVlOGY0ZDZmMmU2ZGM2Y2YyZTRkZWVhZTRkZTYyZDJlMmQyMw==}} <br />
-Sent from Iphone
来自法国的 Chromium 48.0|Ubuntu 用户
2016-03-18T18:59:16.000
89.234.157.254
你使我的一天<br />
{{MmVhZGFkMmQ2NGM2YzYwNTA0NjVlNjY1NjVjNWU2MDUyNDA1ZTYwNTA0YzVjNmVlOGY0ZDZmMmU2ZGM2Y2YyZTRkZWVhZTRkZTYyZDJlMmQyMw==}} <br />
-Sent from Iphone
来自法国的 Chromium 48.0|Ubuntu 用户
2016-03-18T18:59:19.000
123.120.74.36
what ?
linux [Chrome 49.0|Mac 10.11]
2016-03-19T10:39:27.000
183.16.90.205
@我的印象笔记
来自广东深圳的 Chrome 50.0|GNU/Linux 用户
2016-08-04T09:03:39.000
120.31.136.209
defasdfasdf
来自广东佛山的 Chrome 56.0|Windows 7 用户
2016-11-24T15:32:40.000
123.122.12.173
总结得非常清楚，感谢！
来自北京的 Firefox 52.0|Windows 10 用户
2017-03-12T12:36:48.000
183.128.108.240
感谢作者与译者，很清晰，很有帮助
来自浙江杭州的 Chrome 70.0|Windows 7 用户
2019-01-05T11:13:46.000
以我的经验来看，刚接触Git和GitHub时，最困扰的一件事情就是尝试解决下面的问题：在Git和GitHub上，我能做什么？ Git教程往往不会解决这个问题，因为它集中篇幅来教你Git命令和概念，并且不认为你会使用GitHub。GitHub帮助教程一定程度上弥补了这一缺陷，但是它每篇文章的关注点都较为狭隘，而且没有提供关于&quot;Git vs GitHub&quot;问题的概念性概述。 如果你是习惯于先理解概念，再着手代码的学习者，而且你也是Git和GitHub的初学者，我建议你先理解清楚什么是fork。为什么呢 ？  Fork是在GitHub起步最普遍的方式。 Fork只需要很少的Git命令，
以我的经验来看，刚接触Git和GitHub时，最困扰的一件事情就是尝试解决下面的问题：**在Git和GitHub上，我能做什么？**


Git教程往往不会解决这个问题，因为它集中篇幅来教你Git命令和概念，并且不认为你会使用GitHub。[GitHub帮助教程](https://help.github.com/)一定程度上弥补了这一缺陷，但是它每篇文章的关注点都较为狭隘，而且没有提供关于"Git vs GitHub"问题的概念性概述。


**如果你是习惯于先理解概念，再着手代码的学习者**，而且你也是Git和GitHub的初学者，我建议你先理解清楚什么是fork。为什么呢 ？


1. Fork是在GitHub起步最普遍的方式。
2. Fork只需要很少的Git命令，但是起得作用却非常大。
3. Fork提供了对Git和GitHub最基础的了解，有益于你之后的工作。


![](/data/attachment/album/201411/24/162415fptso6zpgpt0xpht.gif)


**本篇指南使用两张简单的图表，来教会你fork的两种主要工作流程。**我并不打算涉及任何代码，但是在结论中，我会把你需要使用的代码的链接给你。


### fork并且更新一个仓库


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


![Alt text](/data/attachment/album/201411/24/162415ki4zz0z7zy14zv3y.png)


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


1. **Fork他的仓库**：这是GitHub操作，这个操作会复制Joe的仓库（包括文件，提交历史，issues，和其余一些东西）。复制后的仓库在你自己的GitHub帐号下。目前，你本地计算机对这个仓库没有任何操作。
2. **Clone你的仓库**：这是Git操作。使用该操作让你发送"请给我发一份我仓库的复制文件"的命令给GitHub。现在这个仓库就会存储在你本地计算机上。
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，他将把那些修改拉到自己的仓库。胜利！


### 同步一个fork


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


![Alt text](/data/attachment/album/201411/24/162416icr0h6wzr6ec2jze.png)


*同步GitHub fork的图表示意图*


1. **从Joe的仓库中取出那些变化的文件**：这是Git操作，使用该命令让你可以从Joe的仓库获取最新的文件。
2. **将这些修改合并到你自己的仓库**：这是Git操作，使用该命令使得那些修改更新到你的本地计算机（那些修改暂时存放在一个"分支"中）。记住：步骤1和2经常结合为一个命令使用，合并后的Git命令叫做"pull"。
3. **将那些修改更新推送到你的GitHub仓库**（可选）：记住，你本地计算机不会自动更新你的GitHub仓库。所以，唯一更新GitHub仓库的办法就是将那些修改推送上去。你可以在步骤2完成后立即执行push，也可以等到你做了自己的一些修改，并已经本地提交后再执行推送操作。


**比较一下fork和同步工作流程的区别**：当你最初fork一个仓库的时候，信息的流向是从Joe的仓库到你的仓库，然后再到你本地计算机。但是最初的过程之后，信息的流向是从Joe的仓库到你的本地计算机，之后再到你的仓库。


### 结论


我希望这是一篇关于GitHub和Git 的 [fork](https://help.github.com/articles/fork-a-repo)有用概述。现在，你已经理解了那些概念，你将会更容易地在实际中执行你的代码。GitHub关于fork和[同步](https://help.github.com/articles/syncing-a-fork)的文章将会给你大部分你需要的代码。


如果你是Git的初学者，而且你很喜欢这种学习方式，那么我极力推荐书籍[Pro Git](http://git-scm.com/book)的前两个章节，网上是可以免费查阅的。


如果你喜欢视频学习，我创建了一个[11部分的视频系列](http://www.dataschool.io/git-and-github-videos-for-beginners/)（总共36分钟），来向初学者介绍Git和GitHub。




---


via: <http://www.dataschool.io/simple-guide-to-forks-in-github-and-git/>


作者：[Kevin Markham](https://disqus.com/home/user/justmarkham/)  译者：[su-kaiyao](https://github.com/su-kaiyao) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出

