2016-10-03 2 views
3

디렉토리가 자식 제어하에 있는지 확인하는 방법에 대해 묻는 stackoverflow에 많은 질문이 있습니다. 그리고 대답은 자식 프로세스를 통해 명령을 호출하여 git 명령을 사용하는 것입니다.git이 필요없는 디렉터리가 유효한 자식 디렉터리인지 확인하는 방법은 무엇입니까?

내가 알고 싶은 것은 디렉토리가 유효한 자식 자식 디렉토리인지 어떻게 결정할 수 있는가?

config 
description 
HEAD 
hooks 
info 
objects 
refs 

같은이 git init --bare로 간다 :

git init 명령은 .git 디렉토리에이 파일을 만듭니다.

예를 들어 git init 명령을 실행 한 다음 git을 제거/제거한 경우 시스템이 이됩니다. 그리고 dir이 git dir인지 확인하고 싶습니다. 분명히, 나는 git rev-parse 명령을 사용할 수 없습니다. 그래서, 나는 그 파일을 검사하여 수표가 필요하다고 생각합니다. 그 파일에는 무엇이 존재해야합니까? .git dir 은 유효한 .git 저장소입니까? 그리고 추가 점검이 필요합니까?

UPDATE 세부 정보 :

은 내가 여기 유효로 필요하면 다른 작업 추가 할 수 있도록 검사 최소이다. 나는 잘 설명하지 못한다. 하지만,이 두 기능 (의사 코드)가 가정 해 봅시다 : 만 .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 파일 파서를 개발해야합니다. 단지 git을 사용하는 것이 더 쉬울 것입니다.

0

.git 디렉토리의 존재가 시작하는 데 알맞은 체크라고 생각합니다. 일부 형태의 repo 유효성 검사가 필요한 경우 구성 및 설명에서 정보를 파싱 할 수 있습니다. 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 

주어진 디렉토리가 자식의 repo에 있는지 알고 싶은 경우에, 당신은 디렉토리 트리를 만들거야, 그리고 당신이 .git 디렉토리의 존재가 발생할 때까지 트리를 이동합니다.

관련 문제