【转】理清基本的git(github)流程
概述
当我初次接触git时,我需要快速学习基本的git工作流,以便快速接收一个开源Web项目维护。但是,我很难理解工作流程,因为我不太了解git使用关键点。
fork,clone,pull、branch、保存、测试、add,评论、commit,push(注: 以上黑体的单词都是git命令的部分),再次测试,讨论以及重复进行这六个步骤,仅仅为更新进网站,就有这样繁琐的不走,是有点很夸张,有点大张旗鼓。所有初学者都可能会迷惑,会烦恼,会骂搞这么复杂搞毛线。
网上git教程非常多,图文并茂的也不少,在此不愿意重复论述。我们在此只对典型的git工作流程做一下描述、对流程各个关键过程和步骤作出解释。以此作为一个基础,帮助初学者理解git的意义,帮他们快速上手。
为什么要使用Git?
Git是一个分布式版本控制系统(VCS),人们用它来控制文件的变更过程,对每一步的变化做跟踪,必要时候可以撤回,基于此让大家一起协作工作,其他的VCS还包括最初的RCS、CVS,微软的VSS,SVN,BitKeeper等。Git最初是Linus开发来用来为linux内核项目管理用的。
Git基于一个宗旨,鼓励大家都参与,基本上任何人都可以提出变更申请(github:Pull request,gitlab:Merge request),但只有少数负责人(Owner和开发组)可以接受,从而合并变更。一个人可以同时处理很多项目,为了管理这大量的项目(Repo),Git(工具)和Gitlab 、GitHub(协作网站)可以制作并保存许多版本的项目和其版本过程,每个项目对应不同的权限或用于不同的目的。
例如,例如构建公共项目代码通常在线托管GitHub中。如果想要修改,增加功能,解决bug,甚至是完善一下文档。我们都可以通过github网站上通过fork,在个人项目下创建一个副本,然后对这个副本进行修改,甚至是"蹂躏",但是无论你做什么原始版本都不会有任何的影响,直到你想把你的修改通过Pull request 提交给主项目,并且主项目的管理者接受你的请求。
先决条件:
创建一个GitHub帐户。
GitHub是一个共有项目托管网站,项目所有者保留项目的正式版本,其他人需要修改,先得有github账号,并fork得到项目的在线副本。当然对公开项目而言如果你只想在本地得到一个项目副本的话,只需要通过git clone 项目地址,即可。比如下面是虫虫的github个人页面:
在本地安装Git
Git是版本控制工具,帮助我们跟踪项目文件变更。他运行在我们本地电脑上。如果你本地系统是Linux的话,一般会默认安装,如果没有的话,你可以通过发行版的包管理系统安装,比如yum install git。windows版本git工具是由微软开发和维护的git for window(msysgit)和各种git GUI客户端。
当然git的根本还在于git命令行,通过git shell执行各个命令也是最方便最直白的,建议不管你有没有基础,都先从git shell开始,不要对命令产生任何的恐惧,他是你最好的朋友,当你使用任何图形git客户端工具出现问题时候也建议用git shell再试试,往往根据其错误提示最容易找到问题所在。
典型的github工作流程
一旦你安装了git并且创建了GitHub帐户(当然对内部项目你可以使用gitlab自建git托管网站),那么你的git之旅正式开始。首先找到你感兴趣的项目,fork或者clone复制它。这两个命令的区别是:fork是在github复制一个自己的在线的项目,你拥有完全地权限,可以任意"蹂躏"。clone是在本地复制一份项目,除非你clone的是自己的项目,否则,你只能在本地修改,不能对其的操作push到github远程仓库。而且clone 可以随意clone只要不是在同一目录下多次clone即可。
典型的工作流程和做法是,由于你没有远程仓库的权限,你先在github通过fork,复制自己的一份远程仓库,然后通过clone你自己这个远程副本到本地,进行修改,修改后push到自己的githu远程副本,然后通过github上的Pull request发起请求,这将会把你的修改请求发送到原始的仓库管理者,发出pull request后,github会自动检查冲突,然后通知原始仓库的管理者,有个Pull request,原始仓库管理检查请求,并对变化进行review,然后做出接受或者拒绝你的变更请求。
在线副本(fork)
要开始为项目提供代码,首先需要做一个可以控制的原始项目的在线副本。然后你所有的改变,都可以将其添加到你的在线副本中。然后发起Pull request,发起变化后Githu会自动的将你的在线副本和原始副本进行比较,通知原始项目维护者,由他并决定是否接受你的变更。github的fork操作可以说是git和github变得流行的最重要的功能。鼓励大量用户,不需要加入项目组就可以随时随地的贡献力量。
Git项目文件夹的一般叫"repository"(仓库),简称"repo"。仓库会包含项目的所有源码文件以及git版本信息,Git版本跟踪的文件,git项目文件都位于项目更目录下的.git目录,以及以markdow格式项目说明文档README.md文档。
要创建一个github在线副本,你在原始项目的右上角,点击 "Fork"按钮。
就会会在您的GitHub帐户利用原始仓库的最新版本创建一个在线副本。所有Fork的项目,都会在项目路径下发,有个forked form xxx的原始仓库的链接,比如虫虫这个项目就是fork于perl6/doc的原始仓库。
本地副本(clone)
要对项目进行修改,并对其测试,或者部署一个github项目,你需要的本地clone一个本地副本。在本地副本上,你可以无限制的修改、测试,而无需任何的审批和预先的review。
例如,你要维护一个网站内容,你就可以在本地构建网站副本。然后再本地修改浏览,确保代码完全无误后,再将变化push到远程仓库。你push你的变化后,你们的测试根据你commit(可能关联某个问题或者bug修复),clone一份或者pull一份代码变化到本地,然后测试功能,确保问题解决,或者功能生效。当然这一部分完全可以自动化完成,就是github或者gitlab的CI/CD(持续的集成和发布),虫虫以后会介绍这些内容。
下载到本地的repo的副本称为"clone"。克隆repo与一般的项目下载不一样,除了项目文件本身,clone还会为附带下载仓库的所有版本变化信息。您可以使用git clone url 命令克隆一个仓库,url可以在项目的"clone and down"按钮下找到。
注意Url分两种:https和ssh。如果你clone一个别人共有仓库的时候,只能用https形式,否则你没有任何权限通过ssh clone。
你的单独工作环境(branch)
git项目通常不同的贡献者将对同一个仓库进行大量的更新。为了实现这种特性,git让你可以在同一个仓库创建许多不同版本,脱离主线版本做修改,这些不同版本,称为"分支"。分支管理是git版本控制的最大优势之一,git分支管理基于指针来实现,所以分支的创建,切换和合并都非常快捷,几乎没有任何资源消耗。每个人都可以使用分支创建一个单独的工作环境,对其做任何的修改操作,不影响其他分支版本,当确保没有任何问题时,再通过分支合并,把变化合并到主线版本上来。所有仓库,都会有一个主版本,叫Master,一般也会创建一个Develop分支用来做为开发版本。
分支机构和仓库目录之间的关系
你可能会想把每个分支想象成你的项目文件的不同副本,但技术上分支不是副本,前面我们也说过了,不过是通过用指针将其指到了某个commit下而已。
你将在计算机上的同一目录中与你的仓库中所有分支进行交互。当你在那个目录下时,你总是会看到那个目录的一个版本(一个分支)。
当你切换到一个不同分支时,你目录中的大部分文件也会改变,看起来就像你刚刚选择的版本。但是,如果你保存了对任何文件的更改,则这些更改将与上次保存时保持一致,而不管你检出哪个分支。 Git总能知道你已经更改这些文件,并且正在等待你告诉它哪个版本的项目要添加(git add)更改(或者告诉它你不想保留更改)。
维护人员只能查看已添加到分支的更改。分支告诉他们哪个版本的仓库与他们的哪个版本进行比较。当然你分支除非你push到远程仓库,否则其他任何人都是看不到的。
【转】理清基本的git(github)流程的更多相关文章
- 漫谈Github与开源,Git介绍以及Git的思想和基本工作原理 Git工作流程
漫谈Github与开源 文字亮点: 为什么这些优秀的工程师会开源自己的项目? 因为开源是一种精神. 无数的软件开发者苦心积虑保护自己的代码不被破解,而还是被聪明绝顶的脚本小子破解了,但破解无数软件的脚 ...
- git 使用流程(使用代码库github)
一:先在github 上注册账号,并创建一个项目: 二:mac 命令行-进入自己的工作空间 1:建立库 git init 2:初始化配置 git config --global user.na ...
- Github 团队协作基本流程与命令操作 图解git工作流程
# 先 fork 项目到自己 github # 1. 从自己仓库克隆到本地(clone 的是项目指定的默认分支,比如 master) git clone git@github.com:me/em.gi ...
- Git & Github 一页简明笔记
由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅. 相信这种一页的简明笔记,对大家也是有帮助的.我的笔记总结自廖雪峰的Gi ...
- Git & Github 一页简明笔记(转)main
由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅. 使用方法:常用命令供随时查阅,其余内容供新手了解. 0. 常用命令一览 ...
- SourceTree 实现 git flow 流程
为什么使用 git 和 git flow,这篇文章 深入理解学习Git工作流 的内容相信能够给你一个完整的答案. 我们以使用SVN的工作流来使用git有什么不妥? git 方便的branch在哪里,团 ...
- 正确的git开发流程
正确的git开发流程 第一步 在github中创建一个新的仓库,这时候项目是空的,而且只有一个master分支 第二步 第一个开发人员进来了,他在本地创建一个develop分支,并且提交到远程 git ...
- git&github快速掌握
git&github快速掌握 安装git 版本库创建 代码修改并提交 代码回滚 工作区和暂存区 撤销操作 删除操作 更多操作 Windows下安装git https://gitforwindo ...
- 记录自己使用到的git命令行代码与git使用流程
1.安装创建版本库 新建一个文件夹,用命令行实现: $ cd /d //进入d盘 $ mkdir gitproject //新建gitproject文件夹 $ cd ...
随机推荐
- Java NIO- Selector 使用示例
Selector selector = Selector.open(); channel.configureBlocking(false); SelectionKey key = channel.re ...
- JVM building
http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/README file:///D:/JDK/jdk11/jdk/doc/building.htm ...
- jvisualvm工具使用
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...
- merge源表数据移植到目标表新表数据中
merge into dbo.ak_SloteCardTimes a using(select RecordID,CardNO,SloteCardTime from dbo.Tb_CardDate b ...
- python @property使用详解
1.@property,@xx.setter的作用把方法变成属性@property获取属性@xx.setter设置属性 2.使用示例 #@property使用 class Lang(object): ...
- centos 中 修复 win 7 引导
1. 我们可以清楚的看到 /boot/grub2/grub.cfg里面的话,里面说到:不要编辑这个文件,这个文件是由grub2-mkconfig 自动产生的(当然你也可以手动),修改这个文件虽然可以达 ...
- OAuth2.0流程图
OAuth2.0是用户验证和授权标准
- js中特殊转换字符为html标签
function htmlEncode(text){ return text.replace(/&/g,'&').replace(/\"/g,'"'). ...
- js中定义属性和变量
//定义数组 var arr = []; //定义对象 var obj = {}; //定义正则表达式 var reg = /../;
- 传智播客《巴巴运动网视频教程(11-106)》avi格式以及兴许44集视频包括所有源码和资源
(1)网上找巴巴运动网代码资源的时候找了非常久 基本上都是须要各种积分的 最终找到了一个不须要积分的推荐给大家.(支持迅雷下载) (2)兴许44集的jar包和项目文档等下载地址! watermark/ ...