欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
原文出处: 野兽

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。