這些有用的小技巧將改變你在當(dāng)前最流行的版本控制系統(tǒng)下的工作方式。
Git 是當(dāng)前最流行最普遍的版本控制系統(tǒng)之一,它被應(yīng)用于私有系統(tǒng)和公開(kāi)網(wǎng)站上各種各樣的開(kāi)發(fā)工作。不論我變得對(duì) Git 有多熟悉,似乎總有些功能等待著被發(fā)掘。下面分享下和 Git 相關(guān)的改變我工作方式的一些小技巧。
1、Git 中的自動(dòng)糾錯(cuò)
我們每個(gè)人都不時(shí)在輸入時(shí)犯拼寫(xiě)錯(cuò)誤,但是如果你使能了 Git 的自動(dòng)糾錯(cuò)功能,你就能讓 Git 自動(dòng)糾正一些輸入錯(cuò)誤的子命令。
假如你想用命令 git status 來(lái)檢查狀態(tài),但是你恰巧錯(cuò)誤地輸入了 git stats。通常情況下,Git 會(huì)告訴你 ‘stats’ 不是個(gè)有效的命令:
$ git statsgit: ‘stats’ is not a git command. See ‘git --help’.The most similar command isstatus
為了避免類似情形,只需要在你的 Git 配置中使能自動(dòng)糾錯(cuò)功能。
$ git config --global help.autocorrect 1
如果你只想對(duì)當(dāng)前的倉(cāng)庫(kù)生效,就省略掉選項(xiàng) --global。
這個(gè)命令會(huì)使能自動(dòng)糾錯(cuò)功能。在相應(yīng)的 Git 官方文檔[1] 中可以看到這個(gè)命令的詳細(xì)說(shuō)明,但是試著敲一下上面的錯(cuò)誤命令會(huì)使你對(duì)這個(gè)設(shè)置干了什么有個(gè)直觀的了解:
$ git statsgit: ‘stats’ is not a git command. See ‘git --help’.On branch masterYour branch is up to date with ‘origin/master’.nothing to commit, working tree clean
在上面的例子中,Git 直接運(yùn)行了它建議命令的第一個(gè),也就是 git status,而不是給你展示它所建議的子命令。
2、對(duì)提交進(jìn)行計(jì)數(shù)
需要對(duì)提交進(jìn)行計(jì)數(shù)的原因有很多。例如,一些開(kāi)發(fā)人員利用提交計(jì)數(shù)來(lái)判斷什么時(shí)候遞增工程構(gòu)建序號(hào),也有一些開(kāi)發(fā)人員用提交計(jì)數(shù)來(lái)對(duì)項(xiàng)目進(jìn)展取得一個(gè)整體上的感觀。
對(duì)提交進(jìn)行計(jì)數(shù)相當(dāng)簡(jiǎn)單而且直接,下面就是相應(yīng)的 Git 命令:
$ git rev-list --count branch-name
在上述命令中,參數(shù) branch-name 必須是一個(gè)你當(dāng)前倉(cāng)庫(kù)里的有效分支名。
$ git rev-list –count master32$ git rev-list –count dev34
3、倉(cāng)庫(kù)優(yōu)化
你的代碼倉(cāng)庫(kù)不僅對(duì)你來(lái)說(shuō)很寶貴,對(duì)你所在的組織也一樣。通過(guò)少數(shù)幾個(gè)慣例你就能使自己的倉(cāng)庫(kù)整潔并且保持最新。使用 .gitignore 文件[2] 就是這些最好的慣例之一。通過(guò)使用這個(gè)文件你可以告訴 Git 不要保存一些不需要記錄的文件,如二進(jìn)制文件、臨時(shí)文件等等。
當(dāng)然,你還可以使用 Git 的垃圾回收來(lái)進(jìn)一步優(yōu)化你的倉(cāng)庫(kù)。
$ git gc --prune=now --aggressive
這個(gè)命令在你和你的團(tuán)隊(duì)經(jīng)常使用 pull 或者 push 操作的時(shí)候很有幫助。
它是一個(gè)內(nèi)部工具,能清理掉你的倉(cāng)庫(kù)里沒(méi)法訪問(wèn)或者說(shuō)“空懸”的 Git 對(duì)象。
4、給未追蹤的文件來(lái)個(gè)備份
大多數(shù)時(shí)候,刪除所有未追蹤的文件是安全的。但很多時(shí)候也有這么一種場(chǎng)景,你想刪掉這些未追蹤的文件同時(shí)也想做個(gè)備份防止以后需要用到。
Git 組合一些 Bash 命令和管道操作,可以讓你可以很容易地給那些未追蹤的文件創(chuàng)建 zip 壓縮包。
$ git ls-files --others --exclude-standard -z | xargs -0 tar rvf ~/backup-untracked.zip
上面的命令就生成了一個(gè)名字為 backup-untracked.zip 的壓縮包文件(當(dāng)然,在 .gitignore 里面忽略了的文件不會(huì)包含在內(nèi))。
5、了解你的 .git 文件夾
每個(gè)倉(cāng)庫(kù)都有一個(gè) .git 文件夾,它是一個(gè)特殊的隱藏文件夾。
$ ls -a. … .git
Git 主要通過(guò)兩個(gè)東西來(lái)工作:
當(dāng)前工作樹(shù)(你當(dāng)前檢出的文件狀態(tài))
你的 Git 倉(cāng)庫(kù)的文件夾(準(zhǔn)確地說(shuō),包含版本信息的 .git 文件夾的位置)
這個(gè)文件夾存儲(chǔ)了所有參考信息和一些其他的如配置、倉(cāng)庫(kù)數(shù)據(jù)、HEAD 狀態(tài)、日志等更多諸如此類的重要細(xì)節(jié)。
一旦你刪除了這個(gè)文件夾,盡管你的源碼沒(méi)被刪,但是類似你的工程歷史記錄等遠(yuǎn)程信息就沒(méi)有了。刪除這個(gè)文件夾意味著你的工程(至少本地的復(fù)制)不再在版本控制的范疇之內(nèi)了。這也就意味著你沒(méi)法追蹤你的修改;你沒(méi)法從遠(yuǎn)程倉(cāng)拉取或推送到遠(yuǎn)程倉(cāng)了。
通常而言,你需要或者應(yīng)當(dāng)對(duì)你的 .git 文件夾的操作并不多。它是被 Git 管理的,而且大多數(shù)時(shí)候是一個(gè)禁區(qū)。然而,在這個(gè)文件夾內(nèi)還是有一些有趣的工件,比如說(shuō)當(dāng)前的 HEAD 狀態(tài)在內(nèi)的就在其中。
$ cat .git/HEADref: refs/heads/master
它也隱含著對(duì)你倉(cāng)庫(kù)地描述:
$ cat .git/description
這是一個(gè)未命名的倉(cāng)庫(kù);通過(guò)編輯文件 ‘description’ 可以給這個(gè)倉(cāng)庫(kù)命名。
Git 鉤子文件夾連同一些鉤子文件例子也在這里。參考這些例子你就能知道 Git 鉤子能干什么了。當(dāng)然,你也可以 參考這個(gè) Seth Kenlon 寫(xiě)的 Git 鉤子介紹[3]。
6、瀏覽另一個(gè)分支的文件
有時(shí),你會(huì)想要瀏覽另一個(gè)分支下某個(gè)文件的內(nèi)容。這其實(shí)用一個(gè)簡(jiǎn)單的 Git 命令就可以實(shí)現(xiàn),甚至都不用切換分支。
設(shè)想你有一個(gè)命名為 README.md[4] 的文件,并且它在 main 分支上。當(dāng)前你正工作在一個(gè)名為 dev 的分支。
用下面的 Git 命令,在終端上就行。
$ git show main:README.md
一旦你執(zhí)行這個(gè)命令,你就能在你的終端上看到 main 分支上該文件的內(nèi)容。
7、Git 中的搜索
用一個(gè)簡(jiǎn)單的命令你就能在 Git 中像專業(yè)人士一樣搜索了。更有甚者,盡管你不確定你的修改在哪次提交或者哪個(gè)分支上,你依然能搜索。
$ git rev-list --all | xargs git grep -F ‘’
例如,假設(shè)你想在你的倉(cāng)庫(kù)中搜索字符串 “font-size: 52 px;“ :
$ git rev-list –all | xargs git grep -F ‘font-size: 52 px;’F3022…9e12:HtmlTemplate/style.css: font-size: 52 px;E9211…8244:RR.Web/Content/style/style.css: font-size: 52 px;
試試這些小技巧
我希望這些小技巧對(duì)你是有用的,或者增加你的生產(chǎn)力或者節(jié)省你的大量時(shí)間。
你也有一些喜歡的 Git 技巧嗎?在評(píng)論區(qū)分享吧。
編輯:jq
-
Git
+關(guān)注
關(guān)注
0文章
196瀏覽量
15720
原文標(biāo)題:7 個(gè)改變我生活的 Git 小技巧
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論