路径.git下的文件
用了這么久的git, 可以毫不謙虛地說對git是一無所知. 每天用來用去的就是commit, add, merge 等幾個有限的命令, 這不符合我這刨根問底的性格啊. 不行, 得研究研究, 從哪里下手呢? 別的咱先不說, 所有 git 項目都有這么一個文件夾.git, 不如就從它入手 ? 那咱就看看這個文件夾下都有些什么妖魔鬼怪.
先來想一想, .git文件夾下保存了git倉庫的所有信息, 那么就包括:
- 提交歷史
- 暫存內容
- 當前分支
- 遠程分支路徑
- 等等
好, 來看一看都有些什么:
內容都在這了, 好, 那就對這些文件依次看一下吧.
先來說一下我目前對這個測試項目的操作.
; 創建文件提交 touch readme.md git add readme.md git commit -m 'add readme' ; 修改文件提交 echo test > readme.md git add readme.md git commit -m 'change readme' ; 創建分支 git checkout -b master_test僅做了兩次提交操作, 這是為了保持.git文件夾最初的狀態, 好方便查看.
COMMIT_EDITMSG
此文件保存了最后一次commit的信息. 沒搞懂存這玩意有啥用, 我直接 git log看不就行了么.
HEAD
保存當前使用的分支.
另外, 直接修改這個文件, 就可以達到git checkout命令的目的. (可以切換分支, 但是不能創建分支哦)
再另外, 從這個文件內容中, 可以推斷出, refs文件夾是用來保存分支信息的, 不過這個先記到小本本上, 接著往后看.
config
不用說, 看名字也知道, 是用來保存配置信息的.
我們加一條本地配置信息看一下: git config --local user.name 'git_test'
如果不出所料, 遠程地址也保存在這里, 加一下: git remote add origin http://test.com/aa/bb
description
不多說了, 上圖, 看文件描述是用來填寫項目的描述信息的.
hooks
存放項目的各個鉤子函數, 就是在各種操作的前后添加自己的執行邏輯. 這個之前倒是一直沒有用過. 文件夾下有樣例文件, 直接將.sample后綴刪除即可使用. (下面只列舉了常用的幾個, 并不是全部)
-
pre-commit: commit 之前觸發. 可用來對代碼進行檢查
-
prepare-commit-msg: commit 之前, 添加 message 之后.
-
commit-msg: commit 時調用, 可修改 message, 也可以取消本次提交
-
post-commit: commit 之后調用
-
post-update: push之后觸發
-
pre-receive: push 時, 實際推送之前調用
-
pre-push: push 之前觸發
-
pre-merge-commit: merge之前觸發
-
pre-rebase: rebase 之前觸發
等等, 具體信息可到官網文檔查看
可以看到, 此文件夾用來對工作流程進行自動化管理的.
index
用來保存本地暫存區中的內容. 二進制文件, 不可直接查看. 可通過命令: git ls-files --stage來查看當前暫存區內容.
info
路徑下目前只有一個文件: exclude. 此文件用來在git中忽略某些文件. 與.gitignore不同的是, 此文件不會進行提交. 也就是用來忽略一些僅你本地使用的文件.
logs
用來記錄所有的操作記錄. 看一下我本地這幾個文件的內容.
HEAD文件記錄的是所有的操作, 而對應refs文件夾下, 則記錄的時候各個分支中的操作.
同時, 可以通過git reflog命令來進行查看, 當出現誤操作的時候, 通過git reset --hard {id}來后悔.
objects
這個文件保存的就是所有 git 歷史變動了, 具體文件的保存結構就留待日后研究. 這里先不深究.
可通過git gc來減少文件體積.
refs
保存本地的分支和標簽. 文件內容也很簡單, 就是一個 commit id.
另外, gc之后, 會多出來一個: .git/packed-refs文件. 此文件包含refs下的所有信息, 同時refs下的文件會被清空.
其他文件
FATCH_HEAD
用來保存遠程分支信息
ORIG_HEAD
在執行如merge, reset, rebase等操作時, 對 "HEAD"文件內容進行備份.
sourcetreeconfig
當使用sourcetree對項目進行管理時, 用來保存sourcetree中的配置信息.
將.git文件夾下的內容過了一遍, 基本保存的位置都找到了, 剩下保存內容的二進制文件了還整不明白.
過下來之后, 倒也發現了一些能夠幫到我的內容, 比如本地的 ignore, 之前的處理是在路徑下添加.gitignore同時將.gitignore文件本身也忽略. 后面可以直接修改.git/info/exclude這個文件.
總結
以上是生活随笔為你收集整理的路径.git下的文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#计算长方形的周长和面积公式_Java
- 下一篇: Kubernetes中Pod生命周期