git的界说是一个内容寻址文件系统。内容、寻址、文件、系统,该来的总会来的…
本文旨在通过实践来先容.git文件夹中的目次及文件成果,属git基本常识。但在此基本上可办理各git利用进程中大概碰着的问题,昆山软件开发,如“.git文件夹占用空间大”,“git如何找回丢失的工具(提交)”,”git diff 比拟依据是什么”等,
话不多说,昆山软件开发,撸起袖子就是干,来看看 .git 是个啥样,这些个货色都是干嘛的。
# 初始化git,查察内容 git init 发生一个.git埋没文件夹 cd .git ls -F1 # 初始化时的.git长这样 # HEAD # config # description # hooks/ # info/ # objects/ # refs/ # 日常事情中的.git或许长这样 # COMMIT_EDITMSG # config # description # hooks/ # index # info/ # logs/ # objects/ # refs/
跟着之后的多种 git操纵 ,还会存在如 MERGE_HEAD 、 MERGE_MODE等和 COMMIT_EDITMSG 雷同成果的文件,branches(分支信息)、lost-found(存储被悬挂起/丢失的提交工具)、packed-refs(压缩后的refs记录)等和logs、objects雷同成果的文件夹。
以上面的.git为例做个简朴的先容:
COMMIT_EDITMSG 最近一次的 commit edit message ;
# 编写提交信息的两种姿势 git commit # 自动打开文件编辑,在文件中输入信息即可 git commit -m msg # 信息城市被生存到 COMMIT_EDITMSG # 如需修改提交信息,不行直接编辑COMMIT_EDITMSG,可执行以下呼吁 git commit --amend # 自动打开文件编辑,在文件中修改信息即可
description 描写文件,打开后内里提醒该为git客栈建设个描写(Unnamed repository; edit this file ‘description’ to name the repository.)。
config 文件包括项目特有的设置选项,如一些常用项:
[core] ignorecase 是否忽略文件巨细写;
[remote "origin"] url 设置长途客栈地点;
[remote "origin"] fetch 长途分支映射干系;
[user] name 用户名
[user] email 邮箱
[alias] 呼吁别名设置 : cmt = commit
抑或更多其他config参数…
全局设置文件在 ~/.gitconfig ,Windows应该是在Users/Administrator/.gitconfig。
info/ 文件夹用以存储一些有关git客栈的信息,如exclude
# 包括一个全局性解除(global exclude)文件,用以安排那些不但愿被记录在 .gitignore 文件中的忽略模式(ignored patterns); echo for git ignore > git-ignore echo for git exclude > git-exclude echo git-ignore > .gitignore git status # On branch test # Untracked files: # (use "git add <file>..." to include in what will be committed) # .gitignore # git-exclude # git-ignore已被忽略,尚有2个untracked的文件 cd .git cd info/ vi exclude # 最后一行新增 git-exclude cd ../.. git status # On branch test # Untracked files: # (use "git add <file>..." to include in what will be committed) # .gitignore # git-exclude 已被忽略,只有.gitignore照旧untracked
除exclude文件外,还大概会有refs、grafts,attributes等文件
hooks/ 文件夹包括客户端或处事端的钩子剧本(hook scripts),如pre-commit,post-receive等:
vi .git/hooks/pre-commit # 生存以下信息 第一行指定用什么执行 #!/bin/sh echo "Message for pre commit"; exit 1; # 开执行权限 chmod +x .git/hooks/pre-commit # user+group+other 执行x(1)权限 ,备注 r(4,read),w(2,write),x(1,execute),-(0,no permission),s(special) touch commit-hook-test git add . git commit -m “pre-commit test“ # 你会看到以下信息 # Message for pre commit # 假如不exit,则继承执行,详情可参考.git/hooks/下的*.sample文件 # Message for pre commit # [test 038e6ec] pre-commit test # 1 file changed, 1 insertion(+), 1 deletion(-)
logs/ 安排git客栈操纵记录的文件夹,包括HEAD文件 和 refs文件夹。
HAED 文件包括对 git分支 的操纵记录,如
vi HEAD # 99a10c283c33beed7f31c210a6c8b411d2a31085 5daf6094ea2cc60d17e947c0435096a4bdafe82d yeshou <yeshou@xxx.com> 1535082919 +0800 commit: rm files # 5daf6094ea2cc60d17e947c0435096a4bdafe82d b8e02a5f9c2bf44342d15f5ea1e60ffd9434765a yeshou <yeshou@xxx.com> 1535087285 +0800 checkout: moving from test to master # 先是删除文件后提交了次,再是由test检出到master
refs 文件夹包括 heads 文件夹,remote文件夹。heads 记录当地相关的各 git分支 操纵记录,remote 记录长途客栈相关的各 git分支 操纵记录
cd heads ls # master master分支操纵记录 # test test分支操纵记录 cd remote/origin ls # master 长途master分支操纵记录 # test 长途test分支操纵记录
HEAD 文件指示当前被检出(地址)的分支,如当前在test分支,文件内容则为ref: refs/heads/test。