跟著MISS學習分散式管理系統Git
什麼是git?
Git是目前世界上最先進額分散式版本控制系統,那麼什麼是版本控制呢?你有沒有這樣的經歷?想修改一份文件, 但是又怕之前的找不到,所以通常你會將它備份,但是一段時間后,你的文檔里出現了很多備份的文件,這個時候不並不知道某個文件你曾經做過怎樣的修改,於是為了解決這樣的問題,就有了很多版本控制系統,SVN,CVS、等等,今天在這裡只重點與大家分享git。
Git的誕生:
搞程序的同學應該都知道,Linux經過不斷發展,已經成為最大伺服器軟體,Linux是世界各地的volunteer將源代碼文件通過diff的方式發給Linux,然後由Linux本人()通過手工方式合成。但因為當時市面上版本控制的付費與Linux的開源不符合,且與BitMover之間的事情,Linux花了兩周建用C謝了一個Linux,目前越來越多的開源仙姑開始轉移至GitHub。
Advertisements
集中式和分散式:
集中式:必須聯網工作,版本庫集中放在中央伺服器,所以需要其中一些資源時,需要先download其中的文件進行修改,修改完后再退給中央伺服器。
分散式:每個人電腦都是一個版本庫,當其中一台出問題時,從其他人電腦上download一份就行,而集中式的要是出問題了,後果可想而知啦。除了這些git強大的分支管理也不能忽略。
CVS:自身設計會導致提交文件不完整,版本庫也會莫名其妙損壞。
IBM的ClearCase:收費,安裝大於Windows,運行速度慢
微軟的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)恢復到最新版本