2016-10-03 6 views
3

ディレクトリがgit制御下にあるかどうかを判断する方法については、多くの質問がstackoverflowにあります。そして、答えは子プロセス経由で コマンドを呼び出すことによってgitコマンドを使用しています。gitを使わずにディレクトリが有効なgitディレクトリであるかどうかを調べるには?

私が知りたいのは、ディレクトリが有効なgit ディレクトリであるかどうかを判断する方法です。

git initコマンドは.gitディレクトリの下に、これらのファイルを作成します。

config 
description 
HEAD 
hooks 
info 
objects 
refs 

同じことがgit init --bareとなります。

私はgit initコマンドを実行し、次にgitを削除/アンインストールしましたかと思います。 私のシステム。そして、私はdirがgit dirであるかどうか確認したい。明らかに、私は git rev-parseコマンドを使用することはできません。だから、私はこれらのファイルをチェックすることによってチェックを行う必要があると思う。これらのファイルには何が存在する必要があるので、.gitディレクトリ は有効な.gitリポジトリですか?そして、追加のチェックが必要ですか?

UPDATE詳細:私はここに有効で必要なもの

は、さらに他の操作 を許可するチェック最小です。私は説明がうまくいかない。しかし、私は2つの機能(擬似コード)を持っているとしましょう:私だけ.gitディレクトリを確認した場合

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; 
} 

が、それはbareリポジトリ上では動作しません。次に、 は、は、HEAD,refsobjectsが の場合にのみ機能することがわかりました。したがって、HEADをチェックすると、refsobjectsで十分ですか?

+0

"有効"とは何を意味するかによって異なります。 – 1615903

+0

「有効」を定義します。いくつかのGitオブジェクトが壊れていても問題ありませんか? *すべての* Gitオブジェクトが壊れている場合はどうなりますか?無効と宣言する前に、ディレクトリに「間違っている」ことをどれくらい許可したいですか? – torek

答えて

0

exhausiveであることはかなり難しいです。

現在のディレクトリが.gitディレクトリか完全に異なるものかどうかを知りたい場合は、メインフォルダの存在(情報、オブジェクト、参照)を確認してください。

gitがそれを扱う方法を知っているかどうか知っていれば、それは単にファイルがゼロではないことを意味するので、gitファイルパーサを開発しなければならないでしょう。

0

私は.gitディレクトリの存在は、まずは適切なチェックであると思います。 設定と説明の情報の解析を見ることができます。これらは、何らかの形式のレポ検証が必要な場合はASCIIテキストファイルです。

.git>$ ls -l | grep -v ^d | grep -v total | awk '{print "file " $9}' | sh 
COMMIT_EDITMSG: ASCII English text 
COMMIT_EDITMSG~: ASCII English text 
config: ASCII text 
description: ASCII English text 
FETCH_HEAD: ASCII text 
gitk.cache: ASCII text, with very long lines 
HEAD: ASCII text 
index: data 
ORIG_HEAD: ASCII text 
packed-refs: ASCII text 

指定したディレクトリがGitのレポにあるかどうかを知りたい場合は、ディレクトリツリーを構築しますし、あなたが.gitディレクトリの存在に遭遇するまで、木を登ります。

関連する問題