Git整理(一)

Git

Git簡介

git是世界上最先進的分佈式版本控制系統
很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷髮展,已經成爲最大的服務器系統軟件了。

Linus雖然創建了Linux,但Linux的壯大是靠全世界熱心的志願者參與的,這麼多人在世界各地爲Linux編寫代碼,那Linux的代碼是如何管理的呢?

事實是,在2002年以前,世界各地的志願者把源代碼文件通過diff的方式發給Linus,然後由Linus本人通過手工方式合併代碼!

你也許會想,爲什麼Linus不把Linux代碼放到版本控制系統裏呢?不是有CVS、SVN這些免費的版本控制系統嗎?因爲Linus堅定地反對CVS和SVN,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用。有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。

不過,到了2002年,Linux系統已經發展了十年了,代碼庫之大讓Linus很難繼續通過手工方式管理了,社區的弟兄們也對這種方式表達了強烈不滿,於是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出於人道主義精神,授權Linux社區免費使用這個版本控制系統。

安定團結的大好局面在2005年就被打破了,原因是Linux社區牛人聚集,不免沾染了一些梁山好漢的江湖習氣。開發Samba的Andrew試圖破解BitKeeper的協議(這麼幹的其實也不只他一個),被BitMover公司發現了(監控工作做得不錯!),於是BitMover公司怒了,要收回Linux社區的免費使用權。

Linus可以向BitMover公司道個歉,保證以後嚴格管教弟兄們,嗯,這是不可能的。實際情況是這樣的:

Linus花了兩週時間自己用C寫了一個分佈式版本控制系統,這就是Git!一個月之內,Linux系統的源碼已經由Git管理了!牛是怎麼定義的呢?大家可以體會一下。

Git迅速成爲最流行的分佈式版本控制系統,尤其是2008年,GitHub網站上線了,它爲開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等

集中式和分佈式比較

集中式:代表(svn)所有人工作的時候代碼版本都集中 放在中央服務器中,都由中央服務器進行版本管理。同時要求工作時必須聯網,從中央服務器進行上傳和下載。
分佈式:代表(git)分佈式版本控制系統,沒有中央服務器,每個人的電腦上都是一個完整的版本庫。相比於集中式,分佈式更加安全。當然分佈式在公司中小組多個成員進行開發的時候,也需要有一臺電腦充當中央服務器,但是他的作用不同於集中式的中央服務器,僅僅只作用於小組成員之間的“交換”。

git:本地有與"中央倉庫"一樣的代碼及歷史記錄的信息,一旦服務器有問題,那麼找一個最新的本地代碼同步上去後,之前所有的提交歷史記錄還可以看到。
svn:所有人都將代碼提交至“中央倉庫”,一旦服務器有問題,就算找到一個最新的代碼上去,也是隻能以當前時間爲節點作爲新的項目去使用,之前所有的提交歷史記錄無法看到,對於處理歷史遺留問題並不友好。

Git本地倉庫包含代碼庫還有歷史庫,在本地的環境開發就可以記錄歷史 而SVN的歷史庫存在於中央倉庫,每次對比與提交代碼都必須連接到中央倉庫才能進行。
這樣的好處在於: 1、自己可以在脫機環境查看開發的版本歷史 2、多人開發時如果充當中央倉庫的Git倉庫掛了,任何一個開發者的倉庫都可以作爲中央倉庫進行服務(不過一般不會這樣設置)

Windows安裝Git

直接從官網下載,然後傻瓜式安裝(最好不要有中文路徑名)
安裝完成後打開Git Bash
要在git上面輸入本機使用的名字和郵箱地址,就類似與註冊
$ git config --global user.name "你註冊的名字"
$ git config --global user.email "你的郵箱地址"

創建版本庫

所謂的版本庫就是版本的倉庫,repository,就類似於maven的倉庫,,這個版本庫裏的所有文件都可以被git管理起來,對文件進行的讀寫操作,Git都可以跟蹤

方法一

#創建一個文件夾
$ mkdir learn1
#進入剛創建的文件夾
$ cd learn1
#查看當前路徑
$ pwd
/c/Users/Administrator/learn1
#通過git init命令把這個目錄變成git可以管理的倉庫
$ git init
Initialized empty Git repository in C:/Users/Administrator/learngit/.git/

方法二

找到一個位置,鼠標右鍵點擊Git Bash Here
#創建一個文件夾
$ mkdir learn2
#此時剛點進入的位置就已經創建了一個learn2的文件夾
#通過git init命令把這個目錄變成git可以管理的倉庫
$ git init
Initialized empty Git repository in C:/rep/.git/

接下來就可以在裏面寫一些文件了,linux的指令也可以在這裏使用

在這裏插入圖片描述

往本地倉庫中添加文件

#把剛寫好的文件傳入到本地倉庫中
$ git add a.txt
#沒有顯示錯誤說明成功
#查看當前狀態(可省略)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   a.txt
#此時只是添加至stage 並沒有提交到本地倉庫
#提交至本地庫還需要commit一下
$ git commit -m "第一次提交"
[master (root-commit) 77c2b2c] 第一次提交
 1 file changed, 1 insertion(+)
 create mode 100644 learn2/a.txt
#注意-m 後面一定要加備註信息,如果在公司中不加,可能挨熊
#繼續添加代碼,提交就重複剛剛的步驟
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章