現在才開始寫git和github使用教程給人以小菜鳥的感覺。。。
事實上,我注冊GitHub已經多年了,編程經驗也有五年了,然而真正用上git的可能幾乎為0,說句公道話,我是做個人開發的,也沒有開發過什么高大上的開源工具,故而github對我來說是那么的陌生,有大佬說:如果程序員不會用git,那簡直連編程的門檻都沒進呢。
好吧,我用了好多年的百度雲備份代碼,慚愧。
馬上要步入工作(團隊開發)的我,是時候做個example學習一下Git與github的使用了。
我將會把我的畢設——華爾街APP使用git托管到github上
Git與github使用教程
首先,要知道git和github完全是兩回事
git:是一款軟件,工具
github:是一個平台
關於Git的小故事
Git的作者就是大名鼎鼎的Linus先生,他因為創立了Linux內核而名聲大噪,Git的誕生與Linux密不可分。
Linux作為開源操作系統 ,代碼需要由全世界來維護,那么首先要解決的就是如何讓全世界人去開發一款軟件(Linux),這就需要用到分布式管理的概念了。
事實是,在2002年以前,世界各地的志願者把源代碼文件通過diff的方式發給Linus,然后由Linus本人通過手工方式合並代碼!
隨着Linux代碼不斷的膨脹,Linus不得不考慮使用管理服務了,當時流行的版本管理工具有SVN,CVS,直至今日他們依然廣泛被使用,但眾所周知,Linus老人家“強迫症”嚴重,他堅決反對使用他們,理由是他們是非分布式,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用。
當時Linus算是妥協的選擇了一款商用的版本管理工具BitKeeper——BitKeeper的東家BitMover公司出於人道主義精神,授權Linux社區免費使用這個版本控制系統。
但是跟着Linus混的大佬們都是什么人?那都是極具黑客色彩的“互聯網梁山好漢”,也許是出於刺激感,也許是對商業軟件的不滿,以開發Samba的Andrew為首的大佬們試圖破解BitKeeper的協議,后來東窗事發,被BitMover發現,一怒之下收回Linus社區BitKeeper的使用權。
其實只要Linus一個小小道歉,就可以挽回BitKeeper,然而,他的性格,可能會嗎,哼?Linus不僅沒有道歉,還怒噴Bitkeeper就是個辣雞,Linux社區不需要他。
后來的事,Linus花了一個月開發了Git——分布式版本控制工具!僅僅一個月?!大佬不愧是大佬,什么授權,什么商業公司,不存在的!你不給我用的東西,我還不屑什么授權呢,沒有就寫一個啊!不就是個版本控制工具嘛?很難嗎?
Git迅速成為最流行的分布式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區,可能現在我們就沒有免費而超級好用的Git了。
Git和CVS,SVN最大的區別在於分布式,每一台安裝git的電腦都有本地“緩存”版本——鏡像,即使沒有網絡的情況下,代碼版本會被保存在本地,一旦連上了遠程git服務,立刻同步上去。
Github的后端使用的就是git!而github應該被定義為一個網站——平台。
知乎有一段子是這么解釋git和GitHub的關系:
Git好比魔獸爭霸,GitHub好比對戰平台。
使用前准備
下載git:https://git-scm.com/downloads
安裝好后找到git安裝目錄下的bin目錄,將bin配置到PATH環境變量里,打開windows cmd,輸入sh,git,bash三個命令,應該都奏效了,輸入exit退出去。
注冊登陸好,然后點擊右側新建按鈕:
進入新建項目的頁面后輸入你想要新建項目的相關信息,選擇一個協議,一般用MIT的就可以,點擊create Repository即可。
這樣項目已經在github上生成了。
建立SSH連接
熟悉github的都知道,習慣上我們使用ssh協議連接github來管理我們的項目,這種感覺就是Linux ssh遠程控制的閹割版。你只能管理項目,不能控制一台虛擬設備。
打開windows命令行輸入git安裝后攜帶的命令:sh
進入了sh界面,這其實就是個linux的bash
創建ssh密鑰:
ssh-keygen -t rsa -C "devilyouwei@gmail.com"
接下來終端提示,不停按回車過去就行。
他會提示你密鑰保存目錄,去找到那個“id_rsa.pub”文件
一般是在用戶目錄下的ssh目錄下。打開后復制全部內容!
注意:這里復制一長串密鑰開頭應該是ssh-rsa字樣
重新進入github網站點擊個人頭像下拉找到“setting”進入設置界面
點擊左側
點擊“new ssh key”按鈕
隨便輸入一個標題,然后粘貼剛剛復制的一長串密鑰,並且保存即可!
離開GitHub網站,回到本地操作。
測試連接
打開windows cmd命令行,輸入:
ssh -T git@github.com
結果應當如下:
繼續配置用戶名和郵箱認證:
git config --global user.name "devilyouwei"
git config --global user.email devilyouwei@gmail.com
這里輸入的就是GitHub注冊的郵箱和用戶名,需要同步!
項目管理
在成功連接上GitHub后,項目的管理的功能就很多了,比如:
github 初始化到 本地
我們稱本地項目的目錄為倉庫,現在要把剛剛在GitHub新建的項目同步到本地的倉庫來(項目目錄為空的情況下)。
首先本機沒有項目目錄就先創建目錄,一般與github創建的項目名相同比較好,cmd下切換到倉庫目錄下輸入命令:
git init
git remote add origin git@github.com:devilyouwei/WallStreet.git
第一行命令origin后面跟着的是項目地址,如何獲得,在GitHub點擊
這一步是將遠程項目源添加到本地,然后初始化git,注意初始化應該在倉庫(項目)目錄下執行,執行完后目錄里多一個隱藏的目錄“.git”,不用理會,有了他就能在當前目錄為所欲為了!哦不,我是說已經關聯好了。
注意:如果發現項目同步錯了目錄,應該切換到想要同步到的目錄下,輸入git init,重新pull接下來
第一次從遠程同步到本地使用pull:
git pull origin master
現在去看看目錄,已經將遠程項目文件同步到本地了(一般有個readme.md文件)!
本地 到 github
在項目目錄下新建一個index.js文件,隨便寫點代碼進去。
輸入:
git status
提示有一個文件沒有commit上去,標記為紅色,並告訴你用git add把他添加進去。
再次輸入:
git add -A
git status
綠色表示已經添加可以commit到GitHub上了
輸入:
git commit -m "a new index.js for the project"
git push origin master
commit后面跟着的是本次版本更新的描述,然后使用與pull相對的push提交至服務器即可。
查看GitHub項目:
完成本次提交!
github 更新到 本地
有這么一種場景,開發者在多台電腦上開發同一個項目,或者多人開發不同的模塊,例如我在公司寫了一些代碼,按照上述操作同步到了github上,回到家后由於遠程代碼版本變了,需要先將遠程代碼反向同步回家里的電腦上,操作如下:
git remote -v
可以看到origin倉庫的fetch和push版本,這里我們使用fetch將遠程代碼逆向同步到本地,稱之為合並到本地或更新到本地
git fetch origin master
比較與本地倉庫中代碼的區別,我這里兩邊代碼一樣,終端並不會輸出什么
git log -p master.. origin/master
同步(更新合並)
git merge origin/master
正如之前比較結果所述,兩邊代碼相同,所以提示:“already up to date”。
注:以上所述origin為倉庫名,master為分支名。