歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> GitHub使用操作指南

GitHub使用操作指南

日期:2017/2/28 13:48:20   编辑:Linux教程

GitHub的是版本控制和協作代碼托管平台。它可以讓你和其他人的項目從任何地方合作。Git也是目前世界上最先進的分布式版本控制系統(沒有之一)。最初編寫用作Linux內核代碼的管理。推出後,Git在其它項目中也取得了很大成功。Github目前已經有100多萬的開發者,並且對於公共項目的托管免費。Github使得版本控制更加容易,多人協作編碼變得簡單。使用過SVN的同學應該知道,當沒有網絡的支持,開發者並沒有辦法提交已完成代碼。Github支持離線提交,其實就是提交到本地倉庫。每一個開發者clone下的項目代碼都是一個完整的倉儲,當遠程或其他協作開發者代碼無法恢復時,都可以方便使用本地的倉儲進行恢復。當需要對代碼進行分支時,其他版本控制軟件在大量文件時會很慢,而Github幾乎是瞬間完成這個操作,而且只需要一個命令即可。下面我們一步一步來搭建Github的環境(以windows操作系統為例)。

Git歷史?

Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟件了。Linux的代碼是如何管理的呢?Linus自己用C寫了一個分布式版本控制系統,這就是Git!一個月之內,Linux系統的源碼已經由Git管理了!Git迅速成為最流行的分布式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。

1、安裝Git(本文介紹windows上的安裝,linux和Mac OS安裝參看原文)

准備

1)Windows版Git下載,然後全部點擊下一步安裝。安裝完成後,在開始菜單裡找到Git->Git Bash,如下圖就說明Git安裝成功!

2)GitHub官網申請一個賬號

開始操作:

1)Git安裝完成後,配置你的名字和Email地址。

1 2 3 $ git config --global user.name "Your Name" $ git config --global user.email "[email protected]"

注:git config命令的--global參數,表示本機所有的Git倉庫都會使用這個配置,也可以對某個倉庫指定不同的用戶名和Email地址。

2、創建版本庫

什麼是版本庫呢?

版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裡面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以還原。

1)創建一個版本庫非常簡單,首先,創建一個空目錄:

1 2 3 4 5 6 7 8 9 $ cd /d //你指定的個人盤符 $ mkdir learngit //創建版本庫根目錄 $ cd learngit //進入版本庫目錄(tab鍵盤補全命令) $ pwd //查看當前路徑 /d/learngit

2)通過git init命令把這個目錄變成Git可以管理的倉庫:

1 $ git init

Git倉庫建好了,是一個空的倉庫(empty Git repository),當前目錄下多了一個.git的目錄,來跟蹤管理版本庫的,不要手動修改這個目錄裡面的文件。隨後分布式服務器push或download都是使用master,包括對github的交互也是如此。

3)在learngit下創建一個readme.txt文件並編寫兩句話。

1 2 3 4 5 6 7 8 9 $touch readme.txt $ vi readme.txt //進入編輯器,按i進入編輯模式,esc退出:wq強制保存 Git is a version control system. Git is free software. $cat readme.txt //查看信息

4)用命令git add告訴Git,把文件添加到倉庫:

$ git add readme.txt

5)用命令git commit告訴Git,把文件提交到倉庫,-m後面輸入的是本次提交的說明:

$ git commit -m "wrote a readme file"

3、修改文件

1)成功添加並提交readme.txt文件,修改readme.txt文件如下:

運行git status命令查看當前倉庫狀態:

上面的命令告訴我們,readme.txt被修改過,但還沒有提交��git diff命令告訴我們readme.txt被修改的具體內容:

4、版本回退

1)用git log命令查看歷史記錄:

如輸出信息太多,可以加上--pretty=oneline參數:

$ git log --pretty=oneline

2)把readme.txt回退到上一個版本,也就是"add distributed"的那個版本,怎麼做呢?在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^。現在,我們要把當前版本"append GPL"回退到上一個版本"add distributed",就可以使用git reset命令:

看看readme.txt的內容是不是版本add distributed:

還可以繼續回退到上一個版本wrote a readme file,我們用git log再看看現在版本庫的狀態:

最新的那個版本append GPL已經看不到了!怎麼辦?只要上面的命令行窗口還沒有被關掉,你就可以順著往上找啊找啊,找到那個append GPL的commit id

於是就可以指定回到未來的某個版本:

$ git reset --hard 9636c65

再看看readme.txt的內容:

Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向append GPL:

然後順便把工作區的文件更新了。所以你讓HEAD指向哪個版本號,你就把當前版本定位在哪。現在,你回退到了某個版本,關掉了電腦,想恢復到新版本怎麼辦?找不到新版本的commit id怎麼辦?在Git中,總是有後悔藥可以吃的。當你用$ git reset --hard HEAD^回退到add distributed版本時,再想恢復到append GPL,就必須找到append GPL的commit id。Git提供了一個命令git reflog用來記錄你的每一次命令:

終於舒了口氣,第二行顯示append GPL的commit id是9636c65。

5、撤銷修改

1)在readme.txt中添加了一行信息:

突然發現最後一行沒有必須添加,想修改。如果用git status查看一下:

Git會告訴你,git checkout -- file可以丟棄工作區的修改全部撤銷:命令中的--很重要,沒有--,就變成了"切換到另一個分支"的命令。

$ git checkout -- readme.txt

現在,看看readme.txt的文件內容:

文件內容果然復原了。

6、刪除文件

1)刪除也是一個修改操作,先添加一個新文件test.txt到Git並提交:

你通常直接在文件管理器中把沒用的文件刪了,或者用rm命令刪了。這個時候,Git知道你刪除了文件,因此,工作區和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了:

現在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,並且git commit:

現在,文件就從版本庫中被刪除了。

7、遠程倉庫

讀者先自己注冊個GitHub賬號。由於你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要設置SSH:

1)打開Shell(Windows下打開Git Bash),創建SSH Key:

把郵件地址換成你自己的郵件地址,然後使用默認值即可。如果一切順利的話,可以在用戶主目錄(上圖標橘紅色路徑查找)裡找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

2)登陸GitHub,打開Account settings,SSH Keys頁面:填上任意Title,在Key文本框裡粘貼id_rsa.pub文件的內容:

點"Add Key",你就應該看到已經添加的Key:

因為GitHub需要識別出你推送的提交,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。當然,GitHub允許你添加多個Key。

3)現在你已經在本地創建了一個Git倉庫後,又想在GitHub創建一個Git倉庫,並且讓這兩個倉庫進行遠程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作。首先,登陸GitHub,然後,在右上角找到"Create a new repo"按鈕,創建一個新的倉庫:

在Repository name填入bnclearngit,其他保持默認設置,點擊"Create repository"按鈕,就成功地創建了一個新的Git倉庫:

目前,在GitHub上的這個bnclearngit倉庫還是空的,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。

4)在本地的bnclearngit倉庫下運行命令:

$ git remote add origin [email protected]:yourGitHub/bnclearngit.git

注意:把上面的yourGitHub替換成你自己的GitHub賬戶名。

添加後,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。

5)就可以把本地庫的所有內容推送到遠程庫上:

把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數。推送成功後,在GitHub頁面中看到遠程庫的內容已經和本地一模一樣:

從現在起,只要本地作了提交,就可以通過命令:

$ git push origin master

本地master分支最新修改推送至GitHub,你就擁有了分布式版本庫!

8、遠程倉庫克隆

這個也是非常重要的,你既可以clone自己的項目到本地,也可以在github上把有用的項目Fork到你的倉庫裡面,然後clone到本地,下來看看我們是怎麼做的吧!

clone你自己項目到本地:現在,遠程庫已經准備好了,下一步是用命令git clone克隆一個本地庫:本示例clone自己倉庫已經存在的OracleCluster

$ git clone [email protected]:yougithub/OracleCluste

clone其他人源碼,首先選中項目Fore,後面步驟就是本地clone啦

9、版本號管理

1)敲命令git tag <name>就可以打一個新標簽:

$ git tag v1.0

可以用命令git tag查看所有標簽:

默認標簽是打在最新提交的commit上的。有時候,如果忘了打標簽,怎麼辦?方法是找到歷史提交的commit id,然後打上就可以了:

$ git log --pretty=oneline --abbrev-commit

比方說要對append GPL這次提交打標簽,它對應的commit id是9636c65:

$ git tag v0.99636c65

再用命令git tag查看標簽:

注意:標簽不是按時間順序列出,而是按字母排序的。可以用git show <tagname>查看標簽信息:

可以看到,v0.9確實打在append GPL這次提交上。還可以創建帶有說明的標簽,用-a指定標簽名,-m指定說明文字:

$ git tag -a v0.1 -m "version 0.1 released"9636c65

用命令git show <tagname>可以看到說明文字:

$ git show v0.1

如果標簽打錯了,也可以刪除:

$ git tag -d v0.1

因為創建的標簽都只存儲在本地,不會自動推送到遠程。所以,打錯的標簽可以在本地安全刪除。如果要推送某個標簽到遠程,使用命令git push origin <tagname>:

$ git push origin v1.0

或者,一次性推送全部尚未推送到遠程的本地標簽:

$ git push origin --tags

如果標簽已經推送到遠程,刪除遠程標簽就麻煩一點,先從本地刪除:

$ git tag -d v0.9

然後,從遠程刪除。刪除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

要看看是否真的從遠程庫刪除了標簽,可以登陸GitHub查看。

10、配置別名

有沒有經常敲錯命令?比如git status?status這個單詞真心不好記。如果敲git st就表示git status那就簡單多了,當然這種偷懶的辦法我們是極力贊成的。我們只需要敲一行命令,告訴Git,以後st就表示status:

$ git config --global alias.st status

還有別的命令可以簡寫,用co表示checkout,ci表示commit等:

? 1 2 3 4 5 6 7 $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch $ git config --global alias.unstage 'reset HEAD'

配置文件:配置Git的時候,加上--global是針對當前用戶起作用的,如果不加,那只針對當前的倉庫起作用。配置文件放哪了?每個倉庫的Git配置文件都放在.git/config文件中:

$ cat .git/config

11、搭建Git服務器

GitHub就是一個免費托管開源代碼的遠程倉庫。但是對於某些視源代碼如生命的商業公司來說,既不想公開源代碼,又捨不得給GitHub交保護費,那就只能自己搭建一台Git服務器作為私有倉庫使用。搭建Git服務器需要准備一台運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。假設你已經有sudo權限的用戶賬號,下面,正式開始安裝。

1)安裝git:$ sudo apt-get install git

2)創建一個git用戶,用來運行git服務:$ sudo adduser git

3)創建證書登錄:收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入到/home/git/.ssh/authorized_keys文件裡,一行一個。

4)初始化Git倉庫:先選定一個目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:

$ sudo git init --bare sample.git

Git就會創建一個裸倉庫,裸倉庫沒有工作區,因為服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾。然後,把owner改為git:

$ sudo chown -R git:git sample.git

5)禁用shell登錄:出於安全考慮,���二步創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改為:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出。

6)克隆遠程倉庫:現在,可以通過git clone命令克隆遠程倉庫了,在各自的電腦上運行:

$ git clone git@server:/srv/sample.git

Cloning into 'sample'...

warning:You appear to have cloned an empty repository.

管理公鑰:如果團隊很小,把每個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys文件裡就是可行的。如果團隊有幾百號人,就沒法這麼玩了,這時,可以用Gitosis來管理公鑰。這裡我們不介紹怎麼玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。

管理權限:有很多不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統裡設置一套完善的權限控制,每個人是否有讀寫權限會精確到每個分支甚至每個目錄下。因為Git是為Linux源代碼托管而開發的,所以Git也繼承了開源社區的精神,不支持權限控制。不過,因為Git支持鉤子(hook),所以,可以在服務器端編寫一系列腳本來控制提交等操作,達到權限控制的目的。Gitolite就是這個工具。這裡我們也不介紹Gitolite了,不要把有限的生命浪費到權限斗爭中。

GitHub 教程系列文章

通過GitHub創建個人技術博客圖文詳解 http://www.linuxidc.com/Linux/2015-02/114121.htm

GitHub 使用教程圖文詳解 http://www.linuxidc.com/Linux/2014-09/106230.htm

使用 GitHub / GitLab 的 Webhooks 進行網站自動化部署 http://www.linuxidc.com/Linux/2016-06/131993.htm

多個GitHub帳號的SSH key切換 http://www.linuxidc.com/Linux/2016-05/131080.htm

如何在同一台電腦上使用兩個GitHub賬戶 http://www.linuxidc.com/Linux/2016-05/131079.htm

利用GitHub搭建個人Maven倉庫 http://www.linuxidc.com/Linux/2016-04/130197.htm

一分鐘認識GitHub http://www.linuxidc.com/Linux/2015-11/125089.htm

分享實用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm

GitHub 的詳細介紹:請點這裡
GitHub 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved