2013-08-27 4 views
4

존재 여부 확인, 내가 어떤 외부 파일 내가 특정 버전을 얻을 git show HEAD~1:some_file 같은 명령을 사용하고힘내 : 파일의 일부 버전을 내 응용 프로그램에서

의 버전 관리를 위해 자식을 사용하고 있습니다 (자식 태그를 기반으로, 해시 또는 HEAD와의 관계). 파일이 없으면 '치명적인'메시지가 출력됩니다 (stderr 파이프로 생각합니다). 예 :

치명적인 : 경로 'some_file은'HEAD ~ 1 '

파일이 특정 버전에 존재하는지 여부를 확인하는 clean 명령이 있는가

에 존재하지 않는?

답변

3

내가 지금까지 발견 한 가장 좋은 방법은 다음과 같습니다

특정 버전에서 파일 이름 목록을 출력
git ls-tree -r HEAD~1 --name-only 

. 출력을 구문 분석하고 특정 파일을 필터링해야합니다. 그러므로 내가 생각했던 것보다 조금 덜 직접적 이었지만 한 조각의 케이크. 당신이 필요로하는 모든 명령의 종료 코드이기 때문에

10

어떻게 사용하고 계십니까? 대본에? 언제든지 종료 코드를 확인할 수 있습니다. 그리고 git cat-file 더 적합 할 수 다음 -e 옵션을

git cat-file -e HEAD~1:some_file 

, 개체가 0과 그것을 그렇게되면 존재하지 않을 때 제로가 아닌 에러 코드와 함께 종료됩니다. 그러나 fatal: Not a valid object name도 인쇄되지만 쉽게 억제 할 수 있습니다.

+0

고마워, 나는 실제로 이걸 루비 스크립트에서 호출하고있다. 'cat-file'은'git show' asaik와 아무런 차이가 없습니다. '-e'는 stdout을 억제하지만 stderr는 억제하지 않습니다. 따라서 여전히 치명적인 결과를 낳고 있습니다. 그것을 억제하는 대신에, 나는 '이 파일이 존재합니까?'라는 명령을 git에 요청하기를 바랐다. – SirLenz0rlot

3

, 당신은/dev/null로 표준 출력 및 표준 오류를 리디렉션 할 수 있습니다 :

git show HEAD~1:some_file > /dev/null 2>&1 

0의 종료 코드는 파일이 존재하는 것을 의미한다.

당신은 당신의 루비 시스템 호출 내에서 그 전체 라인을 사용할 수 있어야합니다 :

git show HEAD~1:some_file > /dev/null 2>&1 
if [ $? -ne 0 ]; then 
    # the file does not exist 
fi 
: 배쉬에서이 일을 누구의 이익을 위해

exit_code = system("git show HEAD~1:some_file > /dev/null 2>&1") 

, 당신은 종료 코드이 방법을 얻을 수 있습니다

관련 문제