加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

如果非得了解下 GIT 系统… – 实践篇

发布时间:2018-09-19 11:25:20 所属栏目:移动互联 来源:野兽
导读:【新品产上线啦】51CTO播客,随时随地,碎片化学习 git的定义是一个内容寻址文件系统。内容、寻址、文件、系统,该来的总会来的 本文旨在通过实践来介绍.git文件夹中的目录及文件功能,属git基础知识。但在此基础上可解决各git使用过程中可能遇到的问题,如
副标题[/!--empirenews.page--] 【新品产上线啦】51CTO播客,随时随地,碎片化学习

git的定义是一个内容寻址文件系统。内容、寻址、文件、系统,该来的总会来的…

本文旨在通过实践来介绍.git文件夹中的目录及文件功能,属git基础知识。但在此基础上可解决各git使用过程中可能遇到的问题,如“.git文件夹占用空间大”,“git如何找回丢失的对象(提交)”,”git diff 对比依据是什么”等,

如果非得了解下 GIT 系统… – 实践篇

话不多说,撸起袖子就是干,来看看 .git 是个啥样,这些个货色都是干嘛的。

  1. # 初始化git,查看内容 
  2. git init 产生一个.git隐藏文件夹 
  3. cd .git 
  4. ls -F1 
  5. # 初始化时的.git长这样 
  6. # HEAD 
  7. # config 
  8. # description 
  9. # hooks/ 
  10. # info/ 
  11. # objects/ 
  12. # refs/ 
  13. # 日常工作中的.git大概长这样 
  14. # COMMIT_EDITMSG 
  15. # config 
  16. # description 
  17. # hooks/ 
  18. # index 
  19. # info/ 
  20. # logs/ 
  21. # objects/ 
  22. # refs/ 

随着之后的多种 git操作 ,还会存在如 MERGE_HEAD 、 MERGE_MODE等和 COMMIT_EDITMSG 类似功能的文件,branches(分支信息)、lost-found(存储被悬挂起/丢失的提交对象)、packed-refs(压缩后的refs记录)等和logs、objects类似功能的文件夹。

以上面的.git为例做个简单的介绍:

COMMIT_EDITMSG 最近一次的 commit edit message ;

  1. # 编写提交信息的两种姿势 
  2. git commit 
  3. # 自动打开文件编辑,在文件中输入信息即可 
  4. git commit -m msg 
  5. # 信息都会被保存到 COMMIT_EDITMSG 
  6. # 如需修改提交信息,不可直接编辑COMMIT_EDITMSG,可执行以下命令 
  7. git commit --amend  
  8. # 自动打开文件编辑,在文件中修改信息即可 

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

  1. # 包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns); 
  2. echo for git ignore > git-ignore 
  3. echo for git exclude > git-exclude 
  4. echo git-ignore > .gitignore 
  5. git status 
  6.       
  7. # On branch test 
  8. # Untracked files: 
  9. # (use "git add <file>..." to include in what will be committed) 
  10.   
  11. # .gitignore 
  12. # git-exclude 
  13.   
  14. # git-ignore已被忽略,还有2个untracked的文件 
  15.   
  16. cd .git 
  17. cd info/ 
  18. vi exclude 
  19.       
  20. # 最后一行新增 git-exclude 
  21.       
  22. cd ../.. 
  23. git status 
  24. # On branch test 
  25. # Untracked files: 
  26. # (use "git add <file>..." to include in what will be committed) 
  27.   
  28. # .gitignore 
  29.   
  30. # git-exclude 已被忽略,只有.gitignore还是untracked 

除exclude文件外,还可能会有refs、grafts,attributes等文件

hooks/ 文件夹包含客户端或服务端的钩子脚本(hook scripts),如pre-commit,post-receive等:

  1. vi .git/hooks/pre-commit 
  2. # 保存以下信息  第一行指定用什么执行 
  3. #!/bin/sh 
  4. echo "Message for pre commit"; 
  5. exit 1; 
  6. # 开执行权限 
  7. 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) 
  8.       
  9. touch commit-hook-test 
  10. git add . 
  11. git commit -m “pre-commit test“ 
  12. # 你会看到以下信息 
  13. # Message for pre commit 
  14.   
  15. # 如果不exit,则继续执行,详情可参考.git/hooks/下的*.sample文件 
  16. # Message for pre commit 
  17. # [test 038e6ec] pre-commit test 
  18. # 1 file changed, 1 insertion(+), 1 deletion(-) 

logs/ 放置git仓库操作记录的文件夹,包含HEAD文件 和 refs文件夹。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读