1.git工作原理
.git是什麼
開源的分佈式版本控制系統,去中心化。大小項目均可以靈活管理,參與開發人員比較靈活。
Linux的代碼管理工具BitKeeper不適合開源社區,故Torvalds推出了GIT。
.工作架構
.工作流程圖
.分支管理
git的分支只要不提交合並,對別人沒任何影響。
svn的分支是完整的目錄,你改了svn的分支,所有人的分支都隨你而變。
分支命名:git的分支在本地和遠程是自由匹配,而svn是全局統一的。
.內部數據存儲方式
git爲元數據統一存儲管理,老vcs是以文件爲按文件來存儲。
.Git與GitHub關係
git是一個分佈式的版本控制系統,最初應用在Linux源碼協同開發中。
GitHub是一個基於git的項目託管平臺,提供web界面,你可以在上面創建資源倉庫來存放你的項目。
現已發展成爲全球最大的開源社區平臺。
2.git shell 應用
.git 安裝
一般的linux發行套件都是自帶git工具的,如果不帶,則使用yum安裝即可
yum install git
..git配置
用戶名和郵箱配置,方便與倉庫間做交互時候標記來源,即自報家門
以下爲全局配置,所有用戶均使用該配置
git config --global user.name "YourName" //zhuzhu
git config --global user.email "YourEmail" //[email protected]
.git命令
創建本地版本庫
選擇自己的linux主機
cd ~ //進入到家目錄
mkdir local_repo //創建文件夾,作爲版本倉庫的目標目錄
git init //創建本地git倉庫
目錄變化如圖:
創建待git管理的文件
cd ~/local_repo
touch input.txt
echo "i am a new file,i will be added to git vcs" > input.txt
將文件添加到代碼庫
git add input.txt //提交文件到緩存區
git commit -m "first commit" //提交文件到本地庫
查看版本倉庫狀態
git status
假如提交完成後,沒有任何修改,則結果如圖:
假如我修改了之前的input.txt
查看具體的差異點
比較-工作區和緩存區差異
git diff working_file_path
比較緩存區和本地倉庫差異
比較工作區和本地倉庫差異
提交之前的變化文檔input.txt
git add input.txt
git commit -m "second commit" input.txt
再次使用git diff檢查文件的三個不同狀態之間的差異
*注意:在沒有提交前,所有的改動都只是在工作目錄中進行,只有再次提交後,工作目錄、緩衝區、本地倉庫才能同步
git日誌查看
git log
查看兩個版本之間文件的差異
查看所有分支的所有操作記錄
版本回退
回退到當前版本的上一個版本
git reset --hard HEAD^ //回到當前版本的上一個版本
git reset --hard HEAD@{1} //回退到指定版本
撤銷修改
應用場景1:工作空間文件已修改,但沒有add到緩存區。
手動修改還原已修改的文件。
用版本庫中的復原工作區的文件
git checkout -- filepath //將版本庫中的指定文件覆蓋掉工作區中的指定文件
應用場景2:工作空間已修改,已添加到緩存區,但沒有添加到版本庫
git reset HEAD filepath //將該filepath對應的緩存區的內容刪除掉,對工作區沒有任何改動。相當於回到了應用場景1。
再按場景1的方式修改,即手動修改或者是git checkout -- filepath
應用場景3:工作空間已修改,已添加到緩存區,且已添加到版本庫,但沒有推到遠程庫。
直接按版本回退來處理即可,
git reset --hard HEAD^ //回到當前版本的上一個版本
git reset --hard HEAD@{1} //回退到指定版本
應用場景4:rm -rf誤刪除某文件的還原
rm -rf filepath //在工作目錄中誤刪除某個文件
git checkout -- filepath //將版本庫中的文件還原到誤刪除的文件中。
應用場景5:git rm誤刪除git文件的還原,並沒有commit提交
git reset HEAD filepath //將該文件在緩存區的刪除操作移除掉
git checkout -- filepath //從緩存區移除對該文件操作後,即可按應用場景4的操作還原。
遠程倉庫操作
關聯遠程倉庫
在gitlab web界面中,創建自己的項目。
執行本地到遠程的關聯
模板: git remote add 遠程倉庫名 [url]
例子:git remote add origin http://xxx
查看遠程倉庫信息
git remote //顯示遠程倉庫的關聯分支
git remote -v //查看遠程倉庫的詳細信息,顯示對遠程的操作權限, fetch和push權限
從遠程庫同步數據到本地庫(協作開發)
git clone [url]
本例:git clone http://xxx
今天先更到這,有時間繼續補更