2014-01-24 4 views
1

다음 명령을 사용하여 svn (Subversion) 'Revision number'와 유사한 ID (커밋 횟수)를 생성합니다.'커밋 횟수'와 일치하는 모든 자식 커밋 찾기

git rev-list HEAD | wc -l 
# With newer git versions you can also use: 
git rev-list HEAD --count 

나는 이것이 svn에서와 정확히 같지 않으며 특히 내 힘내 ID가 반드시 고유하지 않다는 것을 알고 있습니다. 그래도 내 목적에는 충분합니다 (두 빌드 중 어느 것이 더 최근인지 쉽게 구분할 수 있음).

지금 내 질문 :

내가 어떻게 모든 힘내 개정이 ID (커밋의 수를) 일치 (해시)을 찾을 수있는 ID 2340을 치죠? ID (계산)이 들어

EDIT (예)

* 9c4365c count: 5 
|\ 
| | 
| | 
| * b1a9954 count: 2 
| | 
| | 
| | 
* | 7e8831a count: 3 
| | 
| | 
| | 
* | e8cabc4 count: 2 
|/ 
| 
| 
* 9ae0137 count: 1 

나는 e8cabc4 및 b1a9954을 좀하고 싶습니다.

매우 비효율적 인 솔루션은 모든 커밋을 반복하고 그 커밋의 '개수'를 확인하는 것입니다. 일치하는 경우 솔루션에 추가하십시오.

+0

변경 사항은 변경 집합입니다. 커밋 수는 숫자입니다. 두 사람은 비교하지 않습니다. 원하는 것을 정확하게 설명하십시오. 예를 들면 바람직합니다. – mockinterface

+0

질문이 명확하지 않습니다. 수목 산출량은 어디에서 왔으며 어떻게 계산과 관련이 있습니까? 트리 출력을 감안할 때 관련 리비전을'grep' 또는'awk' 할 수만 있습니까? – grebneke

+0

트리 출력은 저장소가 어떻게 보이는지 알기위한 것입니다. 트리를 자동으로 생성하려면 모든 커밋을 반복하고 각 커밋의 수를 계산해야합니다. 이는 비효율적입니다. 질문을 올리는 또 다른 방법 : count는 저장소의 첫 번째 커밋과 현재 커밋 사이의 커밋 수입니다. 카운트 N이 주어지면 저장소의 첫 번째 커밋에서 N이 커밋됩니까? –

답변

0

이 질문에 언급 된 비효율적 인 해결책은 가치가 있습니다.

#!/bin/bash 

MY_COUNT=2340 

for COMMIT in `git rev-list HEAD` 
do 
    CCOUNT=`git rev-list ${COMMIT} --count` 
    if [ "${CCOUNT}" == "${MY_COUNT}" ] 
    then 
     echo $COMMIT 
    fi 
done 

3000 커밋의 저장소의 경우 약 30 초가 걸립니다.

+0

이것을 한 번 저장하고 어딘가에 저장하면 다음 커밋은 새로운 커밋에 대해서만 다시 작성합니다. 그러면 숫자에 대해 간단히 grep 할 수 있습니다. – RedX