99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀敲黑板!你和GitHub高手就差這三條規(guī)則······
敲黑板!你和GitHub高手就差這三條規(guī)則······
2018-08-18
收藏

敲黑板!你和GitHub高手就差這三條規(guī)則······

本文不會(huì)介紹如何創(chuàng)建 GitHub 簡(jiǎn)歷或如何使用終端提交 Git。我將解釋每天使用 Git 和 GitHub 的重要性,尤其對(duì)于正在學(xué)習(xí)寫(xiě)代碼的人。我還將分享并討論三個(gè)簡(jiǎn)單的規(guī)則,你可以通過(guò)遵循這些規(guī)則,變成一個(gè)優(yōu)秀的 Git 和 GitHub 使用者。

為什么 Git 和 GitHub 如此重要?

如果正在學(xué)習(xí)編程,而且你的終極目標(biāo)是獲得一份軟件開(kāi)發(fā)的工作。在這種情況下,答案很簡(jiǎn)單:

學(xué)習(xí) Git 和 GitHub 非常重要,因?yàn)?99% 的公司都會(huì)使用 Git 和 GiHub。所以,學(xué)習(xí)使用 Git 和 GitHub 可以讓你更容易被雇傭,并且能將你和初級(jí)開(kāi)發(fā)者區(qū)別開(kāi)來(lái)。

高級(jí)開(kāi)發(fā)者之所以成為高級(jí)開(kāi)發(fā)者,并不是因?yàn)樗麄兏私馓囟ㄕZ(yǔ)言的語(yǔ)法,而是他們有和真實(shí)用戶一起處理大型復(fù)雜項(xiàng)目和完成業(yè)務(wù)目標(biāo)的經(jīng)驗(yàn)。

當(dāng)你仍在學(xué)習(xí)寫(xiě)代碼階段時(shí),你很難獲得這種經(jīng)驗(yàn)。然而,獲得現(xiàn)實(shí)世界經(jīng)驗(yàn)的一個(gè)簡(jiǎn)單方法就是利用現(xiàn)實(shí)世界項(xiàng)目使用的工具和方法。Git 和 GitHub 就是一個(gè)例子。

你還可以做的事情:遠(yuǎn)程結(jié)對(duì)編程、為開(kāi)源做貢獻(xiàn)、為你的簡(jiǎn)歷構(gòu)建專業(yè)設(shè)計(jì)網(wǎng)站。

即使你同意「掌握 Git 和 GitHub 有助于找工作」,你可能仍然會(huì)想:

「為什么 Git 和 Github 對(duì)公司如此重要?」

簡(jiǎn)而言之,Git 允許團(tuán)隊(duì)以異步方式高效地為同一個(gè)項(xiàng)目貢獻(xiàn)代碼。這使得團(tuán)隊(duì)能夠更好地協(xié)作,從而解決更大更復(fù)雜的問(wèn)題。

Git 是一個(gè)分布式版本控制系統(tǒng),它還提供取消更改、創(chuàng)建代碼分支、解決合并沖突等機(jī)制。這些都是非常有用的特性,可以解決每個(gè)軟件團(tuán)隊(duì)每天都面臨的特定問(wèn)題和常見(jiàn)問(wèn)題。Git 是當(dāng)今的主流解決方案。

另一方面,GitHub 是 Git 之上的附加層,它為其他特定和常見(jiàn)問(wèn)題提供解決方案,比如代碼審查、pull request、問(wèn)題管理/bug 跟蹤等等。

注:盡管 Git 是大多數(shù)公司的首選版本控制解決方案,但 GitHub 仍然有一些強(qiáng)大的競(jìng)爭(zhēng)對(duì)手,比如 GitLab 和 Bitbucket。但是,如果你知道如何使用 GitHub,那么你就能駕輕就熟地使用 GitLab 或 Bitbucket。

現(xiàn)在你已經(jīng)了解了掌握 Git 和 Github 的重要性,接下來(lái)我們來(lái)看三個(gè)簡(jiǎn)單規(guī)則,它們可以讓你在學(xué)習(xí)編寫(xiě)代碼階段,就輕松成為專業(yè)的 Git 和 Github 用戶。

如何利用 3 條簡(jiǎn)單規(guī)則掌握 Git 和 Github?


我是 Microverse 的創(chuàng)始人,Microverse 是一所面向遠(yuǎn)程軟件開(kāi)發(fā)人員的學(xué)校,在你找到工作前完全免費(fèi)使用。我們?cè)?22 周計(jì)劃中,不僅教學(xué)生如何編程,同時(shí)也會(huì)給他們大量的指導(dǎo)和構(gòu)思,讓他們?cè)谟?jì)劃中獲得實(shí)際經(jīng)驗(yàn)。

為了成為專業(yè)的 Git 和 Github 用戶,我們要求學(xué)生遵循以下三個(gè)規(guī)則。培訓(xùn)結(jié)束后,我們的學(xué)生應(yīng)該能自然而然運(yùn)用 Git、GitHub、branch、合并請(qǐng)求和代碼評(píng)審。

在討論這三條簡(jiǎn)單規(guī)則前,請(qǐng)先完成以下任務(wù):


  1. 如果你對(duì) Git 和 Github 還不熟悉,請(qǐng)先從 HubSpot 上完成這個(gè)很棒的教程:https://product.hubspot.com/blog/git-github;

  2. 如果你還不了解 GitHub 流,你應(yīng)該先學(xué)習(xí)它,因?yàn)槲覀兒筮厱?huì)用到:https://guides.github.com/tion/flow/。

無(wú)需多言,三條能令你在學(xué)習(xí)編程階段就能熟練掌握 Git 和 Github 的簡(jiǎn)單規(guī)則如下:


  • 規(guī)則 #1:為每個(gè)新項(xiàng)目創(chuàng)建一個(gè) Git 倉(cāng)庫(kù)

  • 規(guī)則 #2:為每個(gè)新特性創(chuàng)建一個(gè)新分支

  • 規(guī)則 #3:使用 Pull Request 將代碼合并到 Master 分支

即使你的項(xiàng)目非常簡(jiǎn)單或者你只是單獨(dú)工作,但只要在每次編程時(shí)遵循這三條規(guī)則,你很快就可以成為 Git 和 GitHub 的使用高手。

我們會(huì)簡(jiǎn)單分析每條規(guī)則,以便你理解該如何做以及為什么這些規(guī)則很重要。

規(guī)則 #1:為每個(gè)新項(xiàng)目創(chuàng)建一個(gè) Git 倉(cāng)庫(kù)

第一條規(guī)則很簡(jiǎn)單,但是養(yǎng)成習(xí)慣非常重要。每當(dāng)你開(kāi)始一個(gè)新項(xiàng)目時(shí),如你的簡(jiǎn)歷、學(xué)習(xí)項(xiàng)目、編程挑戰(zhàn)的解決方案等等,你都應(yīng)該創(chuàng)建一個(gè)新的 Git 倉(cāng)庫(kù),并將其推送到 GitHub 上。

擁有專用的 repo 是為你編寫(xiě)的每一行代碼使用版本控制的第一步。使用版本控制是你加入公司、開(kāi)始從事實(shí)際項(xiàng)目后的工作方式。及早學(xué)習(xí)并養(yǎng)成習(xí)慣。

注:如果使用終端比較麻煩,你無(wú)法在所有項(xiàng)目中使用 Git,可以考慮使用 Github 桌面應(yīng)用程序(https://desktop.github.com/)。

規(guī)則 #2:為每個(gè)新特性創(chuàng)建一個(gè)新分支。

假設(shè)你希望在簡(jiǎn)歷里構(gòu)建一個(gè)新的「Contact me」部分/組件。那么為這個(gè)新特性創(chuàng)建一個(gè)專用的分支,給它一個(gè)有意義的名稱(例如 contact-me-section),并將所有代碼提交給這個(gè)特定的分支。


如果你不知道何為分支,請(qǐng)返回到 Github 流(https://guides.github.com/guidetion/flow/),閱讀我之前推薦的內(nèi)容。

使用分支可以讓你和團(tuán)隊(duì)成員以并行的方式處理不同的特性,同時(shí)將每個(gè)特性的代碼與其他代碼區(qū)分開(kāi)來(lái)。這使得不穩(wěn)定的代碼不會(huì)輕易并到主代碼庫(kù)中。

即使你是團(tuán)隊(duì)中唯一的成員,一旦你真正開(kāi)始工作,熟練使用特性分支會(huì)使 GitHub 流的過(guò)程變得輕而易舉。

規(guī)則 #3:使用 Pull Request 將代碼合并到 Master 分支

默認(rèn)情況下,每個(gè)倉(cāng)庫(kù)都從一個(gè)主分支開(kāi)始。永遠(yuǎn)不要直接在主分支上進(jìn)行改動(dòng)。相反,你應(yīng)該使用特性分支,并打開(kāi)一個(gè)新的 PR,將特性分支代碼與主分支代碼合并。

在現(xiàn)實(shí)工作中,會(huì)有人查看你的 Pull Request,并在批準(zhǔn)前進(jìn)行代碼審查。GitHub 甚至?xí)?duì)你的代碼進(jìn)行自動(dòng)測(cè)試,讓你知道它是否有問(wèn)題。如果你的代碼與主分支代碼之間存在合并沖突,你也會(huì)收到通知。例如,如果另一個(gè)開(kāi)發(fā)人員推送到主分支的更改影響了你修改過(guò)的文件時(shí),就會(huì)發(fā)生這種情況。

在代碼經(jīng)過(guò)審查、測(cè)試和批準(zhǔn)之后,reviewer 會(huì)允許你合并 Pull Request,或者他們直接合并你的 Pull Request。


即使你單獨(dú)工作,也要習(xí)慣于創(chuàng)建 Pull request,以便將更改合并到主分支。這是幾乎所有開(kāi)源項(xiàng)目使用的基本工作流程。如果你曾經(jīng)貢獻(xiàn)過(guò)某個(gè)項(xiàng)目,理解這三個(gè)規(guī)則將讓你的貢獻(xiàn)很容易被接受。

結(jié)語(yǔ)

如果你仍然感到困惑,那就慢慢來(lái),記住這三條規(guī)則。不要試圖去想「如何做」,而要專注于「做什么」和「為什么」。

一旦「做什么」和「為什么」清楚了,在時(shí)機(jī)成熟時(shí)你就能知道「如何做」了。重復(fù)這個(gè)過(guò)程 2-3 次,你就會(huì)對(duì)它們得心應(yīng)手了。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }