學習和記筆記從第四章開始,前面有點冗長,暫時略過,有時間再看。git
4.1 建立版本庫及第一次提交windows
查看git版本:安全
git --version
首先設置Git的配置變量。這些設置會保存在用戶主目錄下的.gitconfig文件或etc/gitconfig文件中。編輯器
一、配置當前用戶和郵件地址,這些信息將在版本庫提交時用到。分佈式
git config --global user.name "ivanjz93" git config --global user.email "ivanjz93@163.com"
二、設置別名ide
這樣能夠簡化子命令,例如git ci 至關於git commit。學習
若是有系統管理員權限,並但願註冊的別名被全部用戶使用:ui
sudo git config --system alias.st status sudo git config --system alias.ci commit
只在本用戶的全局配置中添加Git別名:this
git config --global alias.co checkout git config --global alias.br branch
三、在Git命令輸出中開啓顏色顯示spa
git config --global color.ui true
四、版本庫的初始化
創建一個DEMO版本庫。
在當前目錄下面git自動建立demo目錄並完成初始化:
git init demo
或者手動建立目錄並進入目錄,調用初始化命令完成初始化:
mkdir demo cd demo git init
git init命令在工做區建立了隱藏目錄.git。這個目錄就是Git版本庫(又叫倉庫,repository)。
版本庫所在目錄被稱爲工做區。
在工做區建立一個文件:
echo "Hello." > welcome.txt
將新建的文件添加到版本庫:
git add welcome.txt
執行提交操做:
git commit -m "initialized."
在提交過程當中必須輸入提交說明,若是未在命令行提供提交說明,Git會自動打開一個編輯器,要求在其中輸入提交說明,輸入完畢保存並退出後會執行提交操做。
提交後的輸出:
4.2 工做區根目錄下的.git目錄
Git版本庫位於工做區根目錄下的.git目錄,且僅此一處,在工做區的子目錄下沒有任何其餘跟蹤文件或目錄。
做者在文中提到:「Git沒有CVS和Subverion中存在的安全泄露問題」。我不理解,由於版本信息都放在.git目錄中,同樣能夠泄露?或者是我沒有理解CVS版本庫、Subversion版本庫的內容和Git版本庫的內容有什麼本質的區別。
Git提供了一條git grep命令來更好的搜索工做區的文件內容:
git grep "Hello"
當在Git工做區的某個子目錄下執行操做的時候,會在工做區目錄中一次向上遞歸查找.git目錄,找到的.git目錄就是工做區對象的版本庫,.git所在的目錄就是工做區的根目錄,文件.git/index記錄了工做區文件的狀態(其實是暫存區的狀態)。
在非Git工做區執行git命令時會由於找不到.git目錄而報錯。
想要獲取Git版本庫的位置或工做區的根目錄等信息,可使用git rev-parse命令,假設當前目錄在工做區的a/b/c目錄:
git rev-parse --git-dir ~/demo/.git
git rev-parse --show-toplevel ~/demo
git rev-parse --show-prefix a/b/c/
git rev-parse --show-odup ../../../
Git克隆能夠下降由於版本庫和工做區混在在一塊兒而致使的版本庫被破壞的風險。能夠經過克隆操做在本機另外的磁盤/目錄中創建Git克隆,並在工做區有新的提交時,手動或自動的執行向克隆版本庫的推送(git push)操做。還能夠實如今其餘機器上創建克隆。對於使用Git作版本控制的團隊,每一個人都是一個備份,所以團隊開發中的Git版本庫更安全。
4.3 git config命令和Git配置文件
Git的配置文件有三個,分別是版本庫級別的配置文件、全局配置文件和系統級配置文件。其中版本庫級別的配置文件優先級最高,全局配置文件次之,系統級配置文件優先級最低。
git config -e
git config -e --global
git config -e --system
Git配置文件採用的是INI文件格式,例如
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true
可以使用git config命令修改和查看配置:
例如
git config core.bare 返回 false
git config a.b something
會在.git/config文件中添加
[a] b = something
git config命令能夠操做任何INI文件,例如向配置文件test.int中添加配置項:
GIT_CONFIG=test.init git config a.b.c.d "Hello World"
從test.ini中讀取配置:
GIT_CONFIG=test.ini git config a.b.c.d
4.4 提交者的信息
刪除全局配置信息:
git config --unset --global user.name git config --unset --global user.email
這樣用戶名和郵件信息被清空了。使用git config命令查看配置項,沒有信息:
git config user.name git config user.email
而後進行提交。命令中使用了--allow-empty參數,由於提交時若是沒有對工做區進行修改,Git默認將不會進行提交,使用--allow-empty參數運行進行空白提交:
git commit --allow-empty -m "who does commit?"
輸出結果以下:
[master 76491e8] who does commit? Committer: jiangzhi <jiangzhi> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author
Git詳細的告訴咱們如何設置必須的配置變量。查看提交信息:
git log --pretty=fuller
在從新設置完用戶名和email後可使用下面的命令修改最近一次的提交:
git commit --amend --allow-empty --reset-author
參數--amend是對剛剛的提交進行修補,參數--reset-author的含義是將Author的ID同步修改,不然只會印象提交者(Commmit)的ID。此參數也會重置AuthorDate信息。
4.五、可以隨意修改用戶信息是否不安全
分佈式版本控制系統中每一個人都是本身版本庫的主人,很難也沒有必要進行身份認證。一般在團隊協做時會設置一個共享版本庫,向共享版本庫傳送新提交時會進行用戶身份認證並檢查受權。一旦用戶經過身份認證,通常不會對提交中包含的提交者ID作進一步檢查。
4.6 命令別名
命名命令別名時還能夠指定參數,例如:
git config --global alias.ci "commit -s"
-s參數會在提交說明中自動添加上包含提交者姓名和郵件地址的簽名標識,相似於Signed-off-by: UserName <email@address>。
4.7 備份本章的工做區
git clone demo demo-step-1