跟著MISS學習分散式管理系統Git

MISS的PHP開發

什麼是git?

Git是目前世界上最先進額分散式版本控制系統,那麼什麼是版本控制呢?你有沒有這樣的經歷?想修改一份文件, 但是又怕之前的找不到,所以通常你會將它備份,但是一段時間后,你的文檔里出現了很多備份的文件,這個時候不並不知道某個文件你曾經做過怎樣的修改,於是為了解決這樣的問題,就有了很多版本控制系統,SVN,CVS、等等,今天在這裡只重點與大家分享git。

Git的誕生:

搞程序的同學應該都知道,Linux經過不斷發展,已經成為最大伺服器軟體,Linux是世界各地的volunteer將源代碼文件通過diff的方式發給Linux,然後由Linux本人()通過手工方式合成。但因為當時市面上版本控制的付費與Linux的開源不符合,且與BitMover之間的事情,Linux花了兩周建用C謝了一個Linux,目前越來越多的開源仙姑開始轉移至GitHub。

Advertisements

集中式和分散式:

  1. 集中式必須聯網工作,版本庫集中放在中央伺服器,所以需要其中一些資源時,需要先download其中的文件進行修改,修改完后再退給中央伺服器。

  2. 分散式每個人電腦都是一個版本庫,當其中一台出問題時,從其他人電腦上download一份就行,而集中式的要是出問題了,後果可想而知啦。除了這些git強大的分支管理也不能忽略。

  3. CVS:自身設計會導致提交文件不完整,版本庫也會莫名其妙損壞。

  4. IBM的ClearCase:收費,安裝大於Windows,運行速度慢

  5. 微軟的VSS:集成在visual studio

安裝Git:

Git剛開始是在Linux上跑的,慢慢的發展到如今的可以在LINUX,UNIX,MAC,WINDOWS這幾大平台上正常運行了。

Advertisements

1.Linux上安裝Git:

小編用的是ubuntu16.4 版本,你可以做以下嘗試,如果和小編顯示的一樣,按照提示的命令進行git安裝:

如果遇到以下這種問題,跟著我一起解決吧:

找出並殺掉所有 apt-get 或者 apt 進程

找出進程數ps -A | grep apt

殺掉進程數:sudo kill -SIGKILL 13431(進程數)

刪除鎖定的文件:一旦你運行了 apt-get 或者 apt 命令,鎖定文件將會創建於/var/lib/apt/lists/、/var/lib/dpkg/、/var/cache/apt/archives/ 中。這有助於運行中的 apt-get 或者 apt 進程能夠避免被其它需要使用相同文件的用戶或者系統進程所打斷。當該進程執行完畢后,鎖定文件將會刪除。

解決辦法

好啦,問題解決,

2.在Mac OS X上安裝Git

一是安裝homebrew,然後通過homebrew安裝Git,具體方法請參考homebrew的文檔:brew。sh官網。

3.在Windows上安裝Git

msysgit是Windows版的Git,GitHub上找到資源後下載安裝

創建版本庫

什麼是版本庫(repository),版本庫又稱倉庫,你可以理解為一個目錄,這個目錄對文件的所有操作都可以被跟蹤

或者將來某時刻可以被還原。以下是創建版本庫的命令:

創建版本庫

pwd命令用於顯示當前目錄,以上操作完成後,輸入:

> git init 將這個目錄變成git可管理的倉庫

瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),而且當前目錄下多了一個(.git)的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裡面的文件,不然改亂了,就把Git倉庫給破壞了。如果你沒有看到(.git)目錄,那是因為這個目錄默認是隱藏的,用(ls -ah)命令就可以看見。

注意:Git不能跟蹤二進位文件,只能進行版本控制管理,如果要真正使用版本控制,請以純文本方式編寫。

下面,給出一個簡單示範:

如果在運行過程遇到下面問題,請輸入紅框中的命令,填入你的信息:

修改後立即成功

因為Git是分散式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎麼辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。

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

時光穿梭機

現在我們成功地添加並提交了readme.txt文件,NOW:it『s working time!

對readme.txt文件進行修改後,(git status)命令查看結果

git status 命令可以讓我們時刻掌握倉庫當前的狀態。

那麼你想不想知道你具體修改了什麼內容呢??

git diff命令顯示Unix通用的diff格式,可以看出具體對哪一行進行了什麼操作。

查看確認安全后,再使用git add和git commit進行添加和提交倉庫操作。

在git commit前,也可以git status查看當前狀態,大家動手試試。

版本回退:本節講解幾個最主要命令

git log:查看歷史記錄

git log --pretty=oneline: 查看更簡記錄

對比

因為文件基數過大,你看到的(git log --pretty=oneline)前面的一大串記錄是(commit id 版本號)通過SHA1演算法計算得出,十六進位標識。防止相同引起衝突。

Git中,HEAD表示當前版本,就是最近的版本,上一個版本是(HEAD^),上上一個版本是(HEAD^^),上一百個版本,寫上100個^,簡單寫法(HEAD~^)

  • (HEAD)指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令(git reset --hard commit_id)

  • 穿梭前,用(git log)可以查看提交歷史,以便確定要回退到哪個版本。

  • 要重返未來,用(git reflog)查看命令歷史,以便確定要回到未來的哪個版本。

工作區和暫存區

工作區:比如我新建的missgit就是 一個工作區。

版本庫:

創建兩個文件readme.txt和LICENSE,使用git add命令后

使用git commit命令后

管理修改:

你會問,什麼是修改?比如你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字元,也是一個修改,刪了一些又加了一些,也是一個修改,甚至創建一個新文件,也算一個修改。

現在按照我說的進行操作:修改readme.txt->git add readme.txt->再修改readme.txt->git commit 提交。完成後查看狀態,可以明顯看見,第二次的修改並未被提交,只提交了之前git add到暫存區中的內容,現在大家對暫存區概念有沒有加深呢?提交后,用(git diff HEAD -- readme.txt)命令可以查看工作區和版本庫裡面最新版本的區別。可見第二次的修改並未被提交。如果想將第二次修改的也進行提交,只需在第二次修改完成後git add命令操作即可。

撤銷修改:

丟棄工作區修改:git checkout --filename

撤銷上傳到暫存區的內容:git reset HEAD filename

上傳到版本庫但沒有推送到遠程庫,參考版本回退一文。

刪除文件:

一:確實要從版本庫中刪除該文件,(git rm)刪掉,並且(git commit)

二:刪錯了,因為版本庫中還存在,(gitcheckout -- filename)恢復到最新版本

下節文章將講解遠程倉庫loading.......

Advertisements

你可能會喜歡