一個簡單的git應用教程

Blog from xjfengck

1. 基本概念

1.1  SVN和git

說起軟件版本管理工具,我們立刻會想到tortoiseSVN和git,而如果要說起兩者的區別,我們的第一反應總是,前者是集中式的,後者是分佈式的。我覺得,這種抽象的概念描述起來雖然簡單,但是並不利於理解。

考慮一個典型的由tortoiseSVN管理的軟件項目,每個項目的參與者都需要,而且只能與一個固定的SVN server進行交互,因爲整個項目的版本和文件更新的協作都是由server來完成的;而在git系統中,任何一個項目的參與者都擁有這個項目repository的所有信息,任何兩個項目的參與者都可以彼此交換更新的版本和文件更新信息,git的整個系統中並不存在唯一的server的概念。從系統的穩定性來說,git顯然要遠遠強於SVN,因爲SVN系統中,一旦server出現故障,整個系統都無法進行工作,但git卻不存在這種問題。

以本地的軟件版本管理爲例,我們從實際操作的步驟和過程來進一步的看看兩者的區別。假設我們有一個項目文件夾project,如果用tortoiseSVN來進行管理,那麼我們需要採取如下的步驟,

  1. 創建repository:projectRepos

  2. import項目文件到preojectRepos

  3. 建立本地工作目錄workingProject

  4. 從projectRepos中checkout項目文件到工作目錄workingProject

  5. 在本地工作目錄的日常操作

#如果修改了workingProject中的文件,需要commit到repository
#如果需要獲取projectRepos中的最新版本,採用update本地工作目錄;

如果我們用git來進行管理,那麼我們需要如下的步驟,

1)創建repository:建立文件夾projectRepos,並執行初始化命令,
git init

2)添加文件到repository
git add allFiles
git commit -m "set up all initial project files"

在git中,每次的文件更新或更改,都需要先git add, 然後git commit。 相對於SVN, 我們可以看到git的工作目錄和repository是在一起的,我們每一次的更新操作無需提交到一箇中央管理目錄,都是在當前的目錄完成的;而SVN中版本管理的repository是獨立的,任何一個working directory想得到最新的文件和更新信息,都需要從repository check。

1.2  git的原理描述

如下圖所示,git系統工作在三個層次上:工作區(working tree)、暫存區(staging  area)和倉庫分支(branch)。其中,工作區就是我們在git系統目錄下實際看到的文件目錄結構,例如命令行下ls顯示看到的文件;在工作區中修改了某些文件之後,我們首先用git add命令把修改的文件提交到暫存區,然後會用git commit提交到對應的倉庫分支中。在git系統文件夾下,暫存區和庫分支信息都保存在.git文件夾裏。

wKiom1MkJr6xNyicAAB95nDYs3Q337.jpg


通常我們在本地構建的倉庫叫做local repository, 但很多時候,我們需要和遠在外地的合作者一起開發某個項目,因此需要和遠方的合作者進行信息交換,此時遠方合作者的repository叫做remote repository。Github提供了免費的remote repository的服務,這使得彼此的信息交互更加方便了。

2. 在本地應用git

下面以在ubuntu下的本地系統建立一個repository爲例來說明常用的git操作,

1)創建一個repository,並初始化mkdir learnGit
cd learnGit
git init

2)添加一個文件到Git
git add readMe.txt
git commit -m "wrote a readme file"

3)查看repository中的修改日誌
git log --pretty=oneline

4)比較修改前後的差異
git diff readMe.txt

5)回退到上一個版本
git reset --hard HEAD^
note: HEAD指工作的分支上的當前版本;

6)查看所有的commit的記錄
git reflog

7)恢復工作區中誤刪的文件
git checkout -- file.txt

8)創建分支的相關命令
查看分支:git branch
創建分支:git branch name
切換分支:git checkout name
創建+切換分支:git checkout -b name
合併某分支到當前分支:git merge name
刪除分支:git branch -d name

3. 使用github

3.1 github的環境設置

1)在本地命令行下,產生自己的ssh key
ssh-keygen -t rsa -C "[email protected]"
note: 產生的key pair存在於~/.ssh下
2) 登陸gitHub,點擊account settings----> SSH Keys--->add SSH key
copy剛剛產生的sshKey.pub裏的內容到窗口;
3) 在gitHub創建一個新的倉庫,
點擊右上角的加號,選擇create a new repository給新倉庫命名,例如learnGit
4) 關聯本地的倉庫和github上的倉庫
git remote add origin https://github.com/yourname/learnGit.git
5) 推動本地庫的所有內容到遠程庫上
git push -u origin master
---------以後每次在本地庫做了commit之後,要同步到遠程庫,只需要git push origin master即可;
---------按照提示輸入自己在github上的用戶名和密碼;

3.2 clone github上的項目

github上的開源項目衆多,如果我們只是想實踐一下這些開源軟件,我們可以通過git clone在本地構建一個應用環境,這與SVN工具中的建立的本地拷貝沒有什麼區別。不過,git強大的地方在於,你在本地所做的任何更改無需commit到遠端的server上,因爲版本的管理工作完全是在本地的repository中進行管理的。

例如,我們想clone 前端開發框架bootstrap, 在終端中鍵入:
git clone [email protected]:twbs/bootstrap.git

3.3 fork github上的項目

有些時候,如果我們想參與某個開源軟件的開發,最方便的方式是在你自己的github賬戶fork這個項目。然後,你可以clone這個項目到本地。你在本地的任何更改,都可以同步到你在github上的對應的repository裏,你甚至可以提交更改到原始的軟件項目。不過,這需要對方認可你才行。在github上,其實有很多項目並沒有對所有的人開放權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章