vlambda博客
学习文章列表

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


本篇内容涵盖


▲▲▲

Part 0 前

Part 1 Git Introduction

Part 2 Git Initialization

Part 3 Project Initialization

Part 4 Git Practical Usage

Part 5 Git Summary


近年来,各大科技公司对于求职简历上项目经历的要求正逐年提升。homework类型的项目已经远远不能满足公司的要求。对于同学们来说,在有限的时间内既要完成课业,又要准备优质项目,求职准备压力骤增。

 

一旦涉及项目,我们总会联想到工业级别,那么,工业级别的项目意味着什么呢?这意味着从开始搭建项目时,就要具备工业界的思维能力、运作能力。包括思考在此过程中会用到哪些工具,建立什么样的架构,怎样布局,如何创立源代码等。

 

很多同学对GitHub不是很熟悉,不清楚命令行的使用方法,有些同学甚至没有用过GitHub,将Git、GitHub弄混,搞不清两者之间的关系。然而,做项目时,却会百分百使用到该平台。

 

本篇文章根据直通硅谷导师的经验,向同学们讲解GitHub的使用方法及窍门,帮助同学们快速上手,完成整个版本的更新,使用好迭代的开发等。文内含有十余个命令行,帮助同学们快速建立认知。总而言之,这里没有复杂的理论、复杂的形式,而是从实用的角度,教同学们利用好工具,完美完成手头的个人项目、协同开发项目。


Git + GitHub


简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
Git Introduction
0 1
PART

历史

 

创造者:

图片中的这位仁兄叫林纳斯·托瓦兹(Linus Torvalds),是工业界非常知名的工程师、架构师。他是Linus最重要的一位作者兼核心发起人,同时,也是Git的创造者。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

为什么创造了Git:

那么身为贼流弊的开源系统Linus的创始人,他又为什么要做Git这样一个不起眼的辅助工具呢?

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

此处就不得不扯出一段爱恨情仇。在林纳斯·托瓦兹早期做Linus时,曾经使用了BitKeeper这款版本控制工具,很好很顺手!快乐的林纳斯给予BitKeeper高度评价,并推荐给了他的小伙伴们,矛盾出现了。这群活泼的小伙伴中,有几位工程师拿到了BitKeeper的版本并尝试破解协议,被发现后惨遭围剿。

 

原本自负的林纳斯同BitKeeper总裁进行了长达数月的谈判,因为如果被禁用,庞大的Linus系统将无处安放。但是很遗憾,BitKeeper并没有妥协,结果是要么交付巨额的商业使用费用,要么禁止林纳斯等人继续使用。

 

傲慢的天才,林纳斯是个非常有性格的人。怒从心头起,恶向胆边生,“你们滚蛋吧!我不用了!”于是,林纳斯在2005年4月3日开始开发Git,短短十天之内,初级版本的Git上线了!这基本上可以达到开发Linus的使用需求。之后,Git不断更新,一直延续至今。现在,Git的功能已经非常全面,可以满足大部分人的需求。

 

性质


Git优势众多,今天我们挑出几个重点,向大家简单做一个介绍。

 

Revision control system:Git是一个进行软件资源版本迭代的控制、管理系统。

Strong support for non – linear development:Git是一个非常强的非线性软件开发工具。

Distributed development:Git支持分布式开发,每个人都是开发者。可以根据自己的权限将项目下载到本地,进行改写、更新。大幅度提升开发效率。

Open to other SW tools based on cross – platform:Git用户呈病毒式增长蔓延的主要原因。林纳斯是坚定的软件开源支持者,Git也沿袭了该理念。无论是支持工具,云端存储器,还是服务系统,只要想使用Git,都会完全得到开源支持。

 

Git vs GitHub

Git是林纳斯开发的,纯粹的用来使用的工具。

GitHub是一个开源的项目储蓄平台,只支持Git作为唯一的版本库格式进行托管。

 

背景大致讲到这里,下面我们将列出一些命令行,介绍实际上手的过程。


Git Initialization
0 2
PART

 Install 

提到初始化,我们从下载开始讲起


Linux/Unix

Linus系统可以从命令行“sudo apt-get install git”切入,直接下载Git。


Windows/OSX – Git Bash (https://git-scm.com/downloads)

Windows/OSX系统则要去官网下载。在Windows里面,Git工具叫Git bash。

 

 Git Initialization 

下载好以后,在使用之前……


Sign up – username,password,email

需要先注册一下


Global configuration

之后打开Git bash,输入以下两个命令行。告诉你的Git环境,你自己是谁,在上传之前,告诉你有个账号正在与之匹配。到这里,Git的初始化过程基本已经完毕。对于一般的开发者来讲,这已经足够了。

git config --global user.name “Your Name”

git config --global user.email “[email protected]


Git Clone

https://github.com/zhitongguigu/ProjName.git

然后我们一起来看看Git Clone。在开始之前我们需要先创建一个repository,相当于project下一个大的文件。如图,从这里进入界面。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

举例,假如我们今天要做一个计算器,就可以把calculator的前四个字母“calc”填入Repository name中,“calculator development”填入Description中。虽然GitHub支持开源,但因为保密问题,同时也提供Private(当然,你需要支付一定的费用)。随手选上README是个不错的习惯。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

完成这步之后,我们就可以开始Clone了。首先,要想和网页同步,需要把现有的东西,包括Git的链接打造好。在这里我们Control+C一下,把Clone里面的这一段链接复制下来,然后分配到两个窗口里面(模拟两个人或两个电脑)。我们同时在这两个文件夹下复制。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

同样,我们也模拟了两个文件夹。大家可以看到,在下载好之后,里面出现了“calc”。到了这里,基本上已经完成了我们的下载工作。点开之后,发现了README和一个用于存储的半隐藏式文件夹git,为了避免“lost your track”,不要删掉git文件夹。同时,点开README,能看到里面有我们输入的项目名和描述。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

完成初始化之后,我们进行下一步Project Initialization。


Project Initialization
0 3
PART

那么,往项目里面放什么呢?每个人的项目都是不同的,例如C++的项目, java的项目,machine learning的项目等等。我们今天会以C++举例,教大家如何初始化你的项目,并让你的项目看起来更加“类工业级别”。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


如图,SDLC。在开发的过程中,按工业界的思维,未来的项目要不停迭代。在提交后,大家都不希望大的框架下发生大的改变。也就是说,我们的目录里,要尽可能涵盖一些未来要用到的东西,这是一个预测。

 

作为一名优秀的软件工程师,要在开发初始时,就知道三个月以后要做什么。他可能不能特别细致的判断,但大致所走的方向,大致所要建立的初始化的架构,是可以认知和了解的。

 

一个非常有经验的软件工程师,一般会提前建立好比较全面的“目录”。避免未来再做大的变化调整。大家可以想象一下,系统和项目都非常庞大,代码量惊人,如果每一次都需要重新做架构调整,文件夹频繁变动,那么对于整个开发人员,整个组,甚至整个公司来说,都会产生巨大的影响。事情变得非常繁琐,效率低且极易出错。

 

这是大前提,以下我们列出了9个Categories,这些方面是我们应该考虑到的,.为了让大家有更直观的认识,我们将这9个在未来可能涉及到的Categories复制到刚才的两个“calc”中。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


Categories

 

 Build 

win(64/32), osx, linux, android, debian etc…

Build是什么?对于项目,尤其是C++和java的项目,大家肯定会去编译它,这就可能需要针对不同的系统。在学校时,老师可能会指定系统,但工业界则不然,建立的95%以上都是跨平台系统。工业界的代码量非常大,如果在每个系统下都需要重复操作,则会非常繁琐,也是不现实的。所以在此之前,我们要先建立好目录比如win(64/32), osx, linux, android, debian等。建立之后,无论未来如何去编译,我们都可以安置在对应的文件夹里。

 

 dep 

public open source libs

在做project中,我们难免会用到API,或者称之为第三方的开源库。所有的第三方免费库都需要有去向,我们可以提前建好dep,将库放到合适的位置。

 

 docs 

Documentation,这个可能大家都非常了解它的重要性,在进行软件迭代过程中,有不同的阶段,每个阶段产生的文件都可以放在该目录下。

 

 external 

3rd party libs

External和dep有些相似,不过External是专门供第三方商业合作伙伴使用的库,将它与开源库分开,可以有效降低风险。一旦被黑,还有一点幸存的概率。当然把文件夹单独加密是更专业的做法。

 

 src 

可以将source code放在这里。

 

 include 

interface

这不是指开发中源文件的include,是特指interface。一般情况下,开发者都非常希望自己的作品可以嫁接到大公司里。这样就需要一个接口,来定位开放的权限,开放的功能等。

 

 main 

separated from the whole program

放置main函数的地方。大家如果用过很多开源库的话,就会发现几乎所有的开源库都会把main函数跟source code分开。写main函数的基本都是使用者(无论是自己还是第三方),里面的核心代码是完成一些功能的,如果将main函数与source code混在一起,不但非常混乱,而且使用者每一次改变main函数调用功能时,所有的部分都要编译一次。把main函数跟source code分开可以降低错误率,更简单省时,代码管理也更加规范。

 

 resource 

config files, pictures, external data etc…

这里可以放置一些配置文件,例如软件执行时的一些参数等。当然也可以放一些其他的东西,比如在做网页开发时,需要插入图片,可以将图片有条理的放在这里,根据编号使用。

 

 tools 

例如BusyBox等第三方提供的,所有开发时需要用到的辅助工具都可以放在这里。


到这里为止,基本的Categories就建全了,有这方面的思想非常重要。工业界的项目不止是建立一个文件夹,没有任何排序整理的,将所有的东西都凌乱的放在里面。这样在未来进行工作时,将会越来越吃力。


接下来我们回顾一下刚才进行到的步骤。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

点开build,这里我们随便列举了一些操作系统。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


Dep里我们象征性的放入了两个第三方库,opencv和opengl。基本上的第三方库打开之后会有include和lib。如果open source 下载下来后不是这种形式,可以稍作整理。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


docs里则定义了一些开发流程中可能会存储的一些文件,1Planning,2Defining,3Designing,4Building,5Testing,6Deployment,7Maintaining……

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


剩下的部分我们就不一一叙述了。接下来我们开始讲一些Git对Project的初始化,去提交第一个Commit。


Git First Commit – Master Branch

 

 Git Add 

Add new folders/files into commit

“git add (-f) path/filename”

 

 Git Commit 

Commit to the changes and be prepared to upload

“git commit -m “built up calculator project categories, first commit!””

 

 Git Push 

Push the changes to cloud with the commit attached

“git push origin master”


在两个窗口下我们都会提交第一个commit,我们进到刚才下载好的calculator项目下。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


如果你前面的流程, Git安装没有问题的话,会有一个自动默认的master提示。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


如果在Linux下,默认的终端可能没有这个提示,我们可以检查一下:“git branch”。出现的“* master”则说明正处于master的branch下。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


下面我们来看一下,跟最初相比,我们添加了哪些内容。经对比我们发现dep和external没有列举出来(因为文件夹是空的,没有任何文件)。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


假设我们里面有东西,我们将要把它们添加在Commit的潜在的内容下。“*”代表所有文件。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


同样,对于build中的空文件夹来说,为了让Git能看到它们,可以加上dummy file。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

查看了所有添加文件之后,我们要去完成第一个commit —— git commit –m ”added categories for cale project, first commit!”。我们也明确的标注了将要把它push在哪里。最后则需要输入账号以及密码。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

此时再用“git status”查看,就会发现几乎不剩下什么了,基本都被push到了云端。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


我们可以检查一下,刷新过后……

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


到这里,Git First Commit就完成了。

Git Practical Usage
0 4
PART

这一部分我们先以单一窗口为例,给大家介绍工业界当中,一般是如何开发的。


像Google,Facebook这类较大的公司,大家可能很难想象它们所有source code的master只有一个(每人权限不一样,有自己的branch),这也足够证明Git足够强大。


我们将举出例子:完全在自己一个人的情况下开发,单独的branch,commit一次/多次然后merge到master;同事已更新,发生冲突时该如何处理。

 

 Git Checkout 

Open a new branch for local self development

“git checkout –b Name_ForWhat”

首先我们要建立自己的branch。名字 + 目的。我们可以看出这里已经有了两个branch:master和william _Test Brach。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


 Make changes on project 

Files, pictures, external data etc…

接下来做一些改变,加上简单一句。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


为了确保修改正确,我们可以”git diff src/calc.h”简单查看一下修改部分。一般情况下删减呈红色,增加呈绿色。注意格式是否规范。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


 Submit changes on the branch 

Git add

Git commit

Git push

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

william _Test Brach之中有3个commits。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


 Merge to master branch(one commit vs multiple commits, unchanged/changed master) 

Git rebase

 “git rebase –i master”&& “git rebase --continue”

Pull request, Merge, Delete unused (local/remote)branch

我们继续rebase

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

接下来我们将进行Merge。在GitHub页面,选对branch,然后继续操作。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!
简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

在后台,系统会帮助检测有没有冲突,如果没有,就可以完成最后一步了。当前的branch就被merge到master了。在master下,可以发现它。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


当想清理不需要的branch时可以使用命令行:

Remote: git push origin –delete  <branchname>

Local: git branch –d <branchname>

 

我们使用两个窗口模拟不同的机器,这样左边的窗口和云端的master就略有不同。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

检测发现与云端有所不同。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

我们回到本地, rabase。保存,退出,冲突出现。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

查看冲突。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

搜索HEAD寻找冲突。与同事协商得出结论并修改。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

假设不清楚有多少冲突,可以继续查询。最后提交。

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!


Git Summary
0 5
PART

以下是对Git简短的总结。


Very powerful source code distributed management system

 

Tons of commands but only multiple ones are frequently used

 

Embedded in famous cloud services

Github(1st cloud service for Git)

Bitbucket

Teamforge

 

A good looking and enriched github could make attractions!!!

Industrial project

Industrial coding style

Industrial development cycle


想做工业界的项目必须具有工业级别的思想,严谨的编码态度同样必不可少,熟练的运用GitHub将会对同学们做工业级别的项目有很大的帮助。



不止是Git和GitHub,在求职的过程中,我们往往还会遇到许多问题......


该如何衡量学业和求职?

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

秋招的时间线?今年机会几何呢?

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

大厂都考些啥?准备到什么程度够用?

简单实用!从项目架构角度解析Git和GitHub的高效使用方法!

没有实习应该如何快速增加简历竞争力?


那么,你有必要了解——直通硅谷保OFFER计划


依托硅谷顶尖科技公司资深工程师教师资源,针对华人学生面试短板,打造精悍高效、高技术含量且紧贴面试趋势的精品上岸课程!


98%的课程满意度

400+在职资深面试官导师

4200+成功案例

至快三个月,帮你斩获心仪offer


欢迎扫码咨询保OFFER计划,匹配专属面试官导师,领取为你量身打造的职场发展规划!



专业团队,经验打造,助你全面提升求职准备效率,短时间内迅速提升面试能力!

数据科学求职旗舰课重磅更新


软件工程师求职旗舰课全面升级