Git是目前世界上最先進的分布式版本控制系統(沒有之一)
為什么會有版本控制系統?
大家在寫論文的時候,都會碰到這樣一個頭疼的問題:在論文反復的修改過程中,你的電腦桌面上會有很多個論文版本,想刪掉一些,但又怕哪天突然會用到,只好作罷。尤其是,當你把論文交給老師或者同學修改,若干天后,他們把改后的文章發回來,但是這期間你自己也做了一些改動,這時候你還需要自己手動把這些改動合并,基于手動管理多個版本的這種不便性,版本控制系統應運而生。
分布式和集中式版本控制系統有何區別
集中式版本控制系統,常見的有CVS和SVN,其版本庫是集中存放在中央服務器的,工作的時候用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始工作,之后,再把自己的工作推送給中央服務器。
分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,雖然系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣工作,只是交換修改不方便而已。
簡而言之,分布式與集中式的區別有:
- 集中式版本控制系統必須聯網才能工作,而分布式不必聯網;
- 集中式版本控制系統的中央服務器如果出了問題,所有人都沒法干活,而在分布式中,如果github掛了可以重新建一個服務器,然后把任何一個人的倉庫clone過去,因為分布式版本控制的每個節點都是完整倉庫;
安裝git
在Ubuntu上安裝git非常簡單,只需要下面一條命令足以
sudo apt-get install git
如果是別的系統,可以參照安裝git.
git的基本操作
- 配置git上的用戶名和郵箱
git config --global user.name "用戶名"
git config --global user.email "郵箱"
需要注意的是,git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置。
- 創建版本庫
第一步,先創建一個空目錄
mkdir feilon
cd feilon
第二步,通過git init命令把這個目錄變成Git可以管理的倉庫
git init
- 把文件添加到版本庫
git add readme.tet
commit -m "wrote a readme file"
其中git commit命令中-m后面輸入的是本次提交的說明,這樣就能從歷史記錄里方便地找到改動記錄。
Git添加文件需要add和commit兩步,是因為commit可以一次提交很多文件,所以你可以多次add不同的文件。
- 查看倉庫的狀態
git status
git status命令可以讓我們時刻掌握倉庫當前的狀態,如果git status告訴我們有文件被修改過,此時可以用git diff查看具體的修改內容。
- 創建與刪除分支
首先,我們創建miao分支,然后切換到miao分支:
git checkout -b miao
git checkout命令加上-b參數表示創建并切換,相當于以下兩條命令:
git branch miao
git checkout miao
刪除分支miao的命令如下
git branch -d miao
-
添加遠程庫
第一步,需要在GitHub上創建一個與本地git倉庫同名的git倉庫;
GitHub上創建新倉庫
第二步,關聯遠程庫,在GitHub上創建好一個新倉庫后,會出現如下頁面:
GitHub上創建倉庫后
我們注意到,GitHub給出的地址不止一個,實際上,Git支持多種協議,可以使用ssh,也可以使用https,但通過ssh支持的原生git協議速度最快。
在本地倉庫下運行如下命令,二選一即可:
git remote add origin https://github.com/zmfl121314/feilon.git
或者
git remote add origin git@github.com:zmfl121314/feilon.git
第三步,把當前分支master推送到遠程
git push -u origin master
由于遠程庫是空的,第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令為:
git push origin master
- 從遠程庫克隆
第一步,先創建遠程庫;
第二步,從遠程庫克隆到本地,同樣的,在本地倉庫下運行如下命令,二選一即可:
git clone git@github.com:zmfl121314/feilon.git
或者
git clone https://github.com/zmfl121314/feilon.git