2012-04-20 3 views
2

변경 사항을 커밋하기 전에 파일의 새 자식 샤을 결정하는 방법이 있나요 (또는 이상적으로 나무의) 후크 사전 커밋?자식 : A의 사용 객체의 SHA

배경 :

내가 자동으로 고유 한 값으로 내의 repo에서 하나 개의 파일에 문자열을 변경하기 위해 노력하고있어, 모든 시간이 REPO의 다른 디렉토리에있는 파일이 변경됩니다.

나는이 작업을 수행 할 수있는 쉬운 방법이 바로 고유의 문자열로 하위 디렉토리 트리의 SHA를 사용하는 자식 후크를 작성하는 것이라고 생각했다. 이것은 git ls-tree로 포스트 커밋 훅 (post-commit hook)으로하는 것이 간단 할 것 같지만, 매번 문자열을 커밋 (commit)하는 추가 커밋 커밋 (dump commit)이 필요하다.

지금까지 git hash-object를 실행하여 이것이 가능할 수 있다고 판단했지만, 다소 복잡한 스크립트를 작성하여 디렉토리의 파일 해시를 반복적으로 작성해야 결국 계산할 수 있습니다 디렉토리 (트리)의 해시 더 간단한 옵션이 있는지 궁금 하네.

+1

왜이 일을하려는 * 이유를 말씀해 주시겠습니까? 그것은 우리가 문제를 해결하는 데 도움이 될 수 있습니다. 당신이하려고하는 것은 잘못된 것처럼 들립니다. – larsks

+0

기본적으로 이러한 파일에는 코드를 배포 할 때 (데이터가 변경된 경우) 데이터베이스에 업로드해야하는 일부 데이터가 포함되어 있습니다. 그러나 원자 적으로 업로드하기 위해 데이터는 고유 한 식별자를 사용하여 버전이 지정됩니다 (나머지 코드는이를 알아야하기 때문에 다른 파일에 저장됩니다). 나는 자동으로 데이터 파일의 내용을 기반으로 고유 ID를 생성하는 것이 편리 할 것이라고 생각하고, 자식 샤 멋지게 그 법안을 맞는 것 같았다. – agrifolia

답변

3

이것은 대답 정확히 대답이 아닙니다. 실제로는 새 커밋을 먼저 만들지 않고 커밋 할 트리의 인덱스를 계산하는 방법입니다. 당신이 git write-tree --prefix <subdirectory>/을 실행하면

, 그것은 디스크에, 인덱스에서와 같이 트리를 작성하고 해시를 반환합니다. 이것은 정확히 커밋이 수행 될 때 생성되는 객체입니다.

+0

우수합니다. 정상적으로 작동합니다. 감사. – agrifolia

0

위 내 의견을 참조하십시오 ...하지만 당신은 디렉토리 트리에 대한 고유 식별자의 일종을 얻으려면, 당신은 같은 것을 할 수있는이 모든 파일의 해시를 계산합니다

find directory -type f -print0 | 
    xargs -0 git hash-object | 
    git hash-object --stdin 

을 귀하의 디렉토리 ... 그리고 해시 목록의 해시를 계산합니다.