在stackoverflow中有很多问题,询问如何确定一个目录是否在git控制之下 。答案是使用git
命令,通过子进程调用 命令。如何确定一个目录是否是一个有效的git目录而不需要git?
我想知道的是我们如何确定目录是否是有效的git 目录?
config
description
HEAD
hooks
info
objects
refs
这同样与git init --bare
:
git init
命令.git
目录下创建这些文件。
假设我运行git init
命令,然后从 我的系统中删除/卸载git
。然后我想检查一下目录是否是git
目录。显然,我不能使用git rev-parse
命令 命令。所以,我怀疑检查需要通过检查这些文件来完成。在那些文件中需要存在那么那么.git
目录 是一个有效的.git
存储库?还有什么额外的检查需要完成吗?
UPDATE细节:
我需要通过这里有效的最低检查允许任何其他操作 进一步。我不善于解释。但是,让我们说,我有两个函数(伪代码):
fn is_valid(gitdir) {
// here will happens checking if a git dir is valid. it doesn't care
// if any content is corrupted.
return valid;
}
fn current_branch(gitdir) {
// here will show current branch. but, will only run if the gitdir
// is valid
// this function will read 'refs' directory
return current;
}
fn list_branches(gitdir) {
// here will list of branches. but, will only run if the gitdir is valid
// this function will read 'refs/heads'
return branches;
}
如果我只检查.git
目录,它不会在bare
库工作。然后,我 发现git rev-parse
只会工作,如果HEAD
,refs
和objects
是 存在。那么,如果检查HEAD
,refs
和objects
就足够了?
取决于“有效”的含义。 – 1615903
定义“有效”。如果某些Git对象损坏,可以吗?如果* all * Git对象损坏怎么办?在声明该目录无效之前,您希望允许多少“与”目录“错误”? – torek