- 什么是GIT
Git是一個強調速度的分布式版本控制軟件和源代碼管理系統(SCM,source code management)。Git最初是由Linus Torvalds為內核開發而設計的管理軟件。自從Git推出以來,已經被很多開源項目所采納。每一個Git工作目錄是一個帶有完全歷史記錄和版本信息的倉庫,不依賴於網絡和中央服務器。Git是一個免費的開源軟件,遵從GNU v2協議。
Git這個詞在英語中的原意是很笨拙,沒用的人。Linus自嘲說:“我是一個任性的笨蛋,所以我把我的所有的項目的名字都和我很相似。第一個是Linux,現在是Git。”Git的幫助文檔中描述Git為:笨拙的內容跟蹤者(the stupid content tracker)。(翻譯自WIKI)
關於開發Git的一些歷史由來,可以看看這個網站:https://lkml.org/lkml/2005/4/6/121
2.為什么要用GIT
- 更順暢的工作流程,開發過程中,完全可以離線操作
- 快速,Git分布式架構使得本地倉庫包含所有的歷史版本信息,你可以在不同的版本之間快速切換
- 彈性的本地分支,在svn下,你建一個分支需要把源代碼復制到另外一個文件夾,而在Git下,創建分支的代價是非常小的,只需一條命令
- 倉庫目錄結構簡潔,用Git復制一個項目,只會在項目根目錄創建一個.git的目錄,而其他目錄很干凈
- 內容按元數據方式存儲,所有的版本信息都位於.git目錄下
- 完整性好,更易於協作開發
- 用戶群大,現在已經有成千上萬個開源項目采用Git來做項目管理,github上更是有無數個代碼倉庫
-
在 Mac 上安裝
在 Mac 上安裝 Git 有多種方式。 最簡單的方法是安裝 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系統中,在 Terminal 里嘗試首次運行 git 命令即可。 如果沒有安裝過命令行開發者工具,將會提示你安裝。
如果你想安裝更新的版本,可以使用二進制安裝程序。 官方維護的 OSX Git 安裝程序可以在 Git 官方網站下載,網址為 http://git-scm.com/download/mac。
- .在Linux上安裝
yum install git-core (fedora)
apt-get install git-core (ubuntu)
- .在Windows上安裝
盡管Git是發源於Linux,但現在Windows上也有能夠正常使用Git,只不過不支持中文,在Windows下所有的中文都顯示問號,另外還有一些功能上的BUG。所以建議還是在Linux上去使用Git,如果你不得不工作在Windows上,你可以到http://msysgit.github.com/上下載msysgit的最新版,安裝過程和其他Windows程序差不多,基本上點下一步就OK了。Msysgit默認會安裝git bash和git GUI這兩個程序,一般用git bash就可以了,它支持常用的命令。如果對Linux命令行不熟,你也可以用用git GUI,但功能有限制。
b) 第一次使用GIT
在你安裝好Git之后,你需要修改一些配置,才能正常使用Git。
Git通過“git config”命令來配置Git,這個命令有2個選項:--system, --global, 加上默認選項,分別對應Git上3級配置文件。第一個是/etc/gitconfig文件,和--system對應,這是全局配置文件,修改這個文件,將會影響系統上所有的用戶,所有的倉庫。第二個是你家目錄下的/.gitconfig文件,與--global對應,修改它會對你當前用戶的所有倉庫產生影響。第三個是你倉庫中的.git/.gitconfig文件,這是“git config”默認修改的配置文件,它只會對你當前倉庫產生影響。
在第一次使用Git時,你需要告訴你的協同開發者,你是誰以及你的郵箱,在你提交的時候,Git需要這兩個信息。具體通過以下命令設置:
git config --global user.name “Test OSS”
git config --global user.email [email protected]
當然你也可以不用--global選項,但這意味這你在每一個倉庫中都要這樣設置。
同時,你也可以指定你的編輯器,你的Diff工具:
git config --global core.editor vim
git config --global merge.tool vimdiff
你還可以通過”git config --list”命令來查看你的設置。
當你把Git設置好之后,如果你要和從Git服務器上獲得倉庫,或者向Git服務器提交你的代碼(比如github),你可能需要生成你自己的ssh密鑰對。Git支持4種與服務器端通信的協議:git、http、ssh和https。其中git只是一個只讀協議,也就是說你只可以從服務器端獲取倉庫,但是你不能提交你自己的代碼。而http和https用的很少,大部分都只支持ssh協議和Git協議。
當你通過ssh協議與遠端服務器進行通信的時候,你可以通過以下命令生成ssh密鑰對:
ssh-keygen -t rsa
如果你沒有指定密鑰名稱和存放路徑的話,它默認把兩個不對稱密鑰放在你的家目錄下的.ssh目錄下,密鑰文件默認名稱為id_rsa和id_rsa.pub,前者是私鑰,后者是公鑰。中間可能會要你設定訪問密鑰密碼,這個可以設,可以不設,但為了安全考慮,還是建議你設一個訪問密碼。否則,意味着任何持有你密鑰的人都可以使用該密鑰。
然后把你的公鑰發給Git倉庫管理員,然后你就可以通過ssh協議來訪問服務器端,期間程序會自動進行密鑰對匹配,如果你設了訪問密碼,你可能需要輸入密碼。
更多關於ssh的內容,請訪問這里:http://www.freebsd.org/doc/zh_CN/books/handbook/openssh.html
這些設定完之后,你可以通過獲得任何一個公開的代碼倉庫來檢測你的git是否工作正常。比如下面這個:
git clone git://git2.kernel.org/pub/scm/git/git.git
4、GIT倉庫
Git做為一個資源管理和跟蹤系統,如果想要把自己的文件托管在Git上,那么首先你得讓Git知道你需要管理的文件在哪。比如說現在我有一個項目,它在test文件夾里,我想讓Git管理這個項目,這個時候你需進入到這個目錄,然后運行“git init”命令。這個時候Git就會在該目錄下生成一個.git的隱藏目錄,Git用來進行版本控制和內容跟蹤的所有文件都在該文件夾下。
處於git跟蹤下的文件只具有三種狀態:
- Modified(working directory):被修改過的文件
- Staged(staging area):通過git add添加到暫存區域的文件
- Committed(git directory):通過git commit提交到倉庫的文件
所以,一般的git工作流程可能是這樣:修改過某些文件,然后把這些文件添加都暫緩區,再提交到倉庫中形成一個版本或快照,最后提交到git服務器上。而在中間,可能伴隨着分支管理,分支切換,撤消與合並。
可能有些人會覺得很奇怪,為什么git會有暫存區域這個概念,直接提交到倉庫中不就ok了。其實這是git為了做版本控制用的,試想如果沒有暫存區域,每修改一個文件,就會形成一個版本,太過頻繁,不易於管理。暫存區域其實就是下一個版本的文件清單,你可以自由控制該往倉庫中提交什么文件,這也可以避免在一個版本中包含一些中間文件,比如編譯后的文件。
更多git 進階( http://www.125135.com/1057214.htm )
命令行比較高冷,還是來一個圖形界面
GUI for git|SourceTree|入門基礎
- SourceTree簡介
- SourceTree基本使用
- SourceTree&Git部分名詞解釋
- 相關連接推薦
一、SourceTree簡介
SourceTree 是 Windows 和Mac OS X 下免費的 Git 和 Hg 客戶端,擁有可視化界面,容易上手操作。同時它也是Mercurial和Subversion版本控制系統工具。支持創建、提交、clone、push、pull 和merge等操作。
二、SourceTree基本使用
(以下以SourceTree For Mac V2.0.5.2中文版為例,托管平台以Github為例)
-
基本安裝
1.1. 不建議在appstore直接搜索下載SourceTree,因為appstore里的版本已經十分老舊(好像是2012年更新的)。建議前往官網下載安裝最新版,我這里也提供一個SourceTree for Mac V2.0.5.2的百度雲的方便鏈接。 傳送門→SourceTreeDownload
1.2. 拖動安裝,Launchpad中打開,continue,輸入github賬號按下一步完成即可。沒有Github賬號的朋友,也可以跳過本步驟完成安裝 -
注冊GitHub(已有Github賬號的朋友請跳過本步驟)
2.1. 打開Github官網 傳送門→Github
2.2. 填寫必要的信息,點擊sigh up for github
- 2.3. 默認選中免費賬號,點擊綠色的Finish sign up即可
-
實踐入門-創建倉庫 clone&pull
3.1. 創建倉庫
用我們剛才創建的賬號登陸github,在歡迎頁點擊“+ New repository“創建我們的倉庫
Create Repository 1
或點擊右上角的“+”,然后再New repository亦可
Create Repository 2
3.2. 按照個人需要填寫倉庫名、倉庫描述等,建議勾選“Initialize this repository with a README”(注意此處免費賬戶只能選擇建立public(開源)倉庫),填寫完成后點擊Create repository
Copy Link
3.4. 打開我們的SourceTree,點擊:“+新倉庫”,選擇:“從URL克隆”
Clone 1
3.5. 粘貼我們的倉庫鏈接至源URL,SourceTree會自動幫我們生成目標路徑(本地倉庫路徑)以及名稱,點擊克隆
Clone 2
3.6. 等待數秒后,SourceTree會為我們自動打開我們剛才克隆的倉庫,選擇master選項,這里我們可以看到我們倉庫里的所有文件
MainPage
3.7. 接下來我們想要上傳一個項目至我們的遠程Github倉庫內。我們點擊右上角“在Finder”中顯示。然后SourceTree會幫我們打開我們的本地倉庫,我們將需要上傳的項目復制到本地的Finder文件夾內,然后關閉文件夾,回到主頁面。我們會發現工作副本出現了更改提示
Change Notification
3.8. 我們點擊工作副本,然后我們發現我們剛才上傳的文件都在未暫存文件當中,此時,我們勾選“未暫存文件”
工作副本 1
3.9. 發現我們的文件變成了已暫存文件。此時,我們可以輸入更新信息,然后,點擊提交按鈕
工作副本 2
3.10. 我們切換回master分支,會發現master分支以及推送(Push)按鈕,都出現了更改提示。這表示SourceTree已經將我們剛才添加的文件成功提交到本地倉庫,而本地倉庫的內容則比遠程倉庫超前了一個版本。我們這個時候點擊推送(Push)即可將本地倉庫的內容同步至遠程倉庫。
Branch Master
3.11. 點擊推送(push),等待片刻即可,我們重新登錄github網站,會發現我們剛才本地倉庫的文件已經成功推送到遠程倉庫
Push -
實踐入門-參與開源 Fork&pull request
(以下以 [https://github.com/octocat/Spoon-Knife] 舉例)
4.1. 首先打開上述頁面,然后點擊右上角“fork”按鈕。fork意味着將他人的倉庫復制到我們賬號中。如果我們想要參與開源項目,首先要fork下別人的項目,然后在我們復制過來的倉庫中,對別人的代碼做修改。
fork
4.2. fork完之后,我們用上文提到的方法,將自己賬號中的[Spoon-Knife]倉庫克隆(clone)到本機SourceTree中,並在稍作更改后,推送(push)到自己賬號的遠程倉庫
4.2.1 在SourceTree中建立新倉庫,並復制URL
clone Spoon-Knife
4.2.2 在本地倉庫中稍作更改(如圖我新建了一個Test)
Example
4.2.3 通過上文方法推送(Push),登陸Github,進入Spoon-Knife倉庫,發現test已經上傳到我們賬號的遠程倉庫Spoon-Knife當中
Success
4.3. 上傳完后,我們點擊Github branch旁的綠色按鈕
Pull Request 1
4.4. 之后我們會進入一個Compare頁面,這個頁面用於比較作者倉庫與我們倉庫的文件的不同。Base fork:指的是作者倉庫目錄地址;Head fork:指的是我們賬號中fork后所產生的倉庫地址。我們點擊Create pull request即可
Compare
4.5. 然后我們會進入一個Pull Request界面,在這里,我們可以輸入自己更改的原因/更改的內容。這里寫的文字會顯示給源代碼作者,如果作者接受了我們的推送請求(pull request)后,我們的代碼將會上傳到源代碼作者的倉庫內,成功為開源做貢獻。如果作者拒絕了我們的推送請求(pull request)后,我們的代碼將不會上傳到源代碼作者的倉庫內。
Pull Request 2
4.6. 我們點擊Create Pull Request即可,系統將自動跳轉到等待回復的頁面,這里會顯示作者是否接受我們的代碼更改。
Pull Request 3三、SourceTree&Git部分名詞解釋
- 克隆(clone):從遠程倉庫URL加載創建一個與遠程倉庫一樣的本地倉庫
- 提交(commit):將暫存文件上傳到本地倉庫(我們在Finder中對本地倉庫做修改后一般都得先提交一次,再推送)
- 檢出(checkout):切換不同分支
- 添加(add):添加文件到暫存區
- 移除(remove):移除文件至暫存區
- 暫存(git stash):保存工作現場
- 重置(reset):回到最近添加(add)/提交(commit)狀態
- 合並(merge):將多個同名文件合並為一個文件,該文件包含多個同名文件的所有內容,相同內容抵消
- 抓取(fetch):從遠程倉庫獲取信息並同步至本地倉庫
- 拉取(pull):從遠程倉庫獲取信息並同步至本地倉庫,並且自動執行合並(merge)操作,即 pull=fetch+merge
- 推送(push):將本地倉庫同步至遠程倉庫,一般推送(push)前先拉取(pull)一次,確保一致
- 分支(branch):創建/修改/刪除分枝
- 標簽(tag):給項目增添標簽
- 工作流(Git Flow):團隊工作時,每個人創建屬於自己的分枝(branch),確定無誤后提交到master分枝
- 終端(terminal):可以輸入git命令行
- 這里只對SourceTree做一下大體講解。
四、相關鏈接推薦
- →Github help for mac https://mac.github.com/help.html
- →Github help for win https://windows.github.com/help.html
- →由淺到深學git http://backlogtool.com/git-guide/tw/intro/intro1_1.html
- http://www.jianshu.com/p/be9f0484af9d (鳴謝)
上文均為個人拙見,歡迎大家討論交流