2011-02-02 3 views
2

웹 사이트 구축 프로세스의 일환으로 git 프로젝트를 웹에 액세스 할 수있는 디렉토리에 복사하고 .git 디렉토리를 제거한다고 가정 해 봅시다. 이제 몇 일 후에 공개 웹 디렉토리를 앞두고 몇 가지 커밋을 한 다음 현재 /index.html의 버전이 현재 제공되고 있는지 파악하는 간단한 방법은 무엇입니까?파일을 git commit과 어떻게 일치시킬 수 있습니까?

# /var/www (public web dir): 
/index.html 

# Git repository: 
HEAD:/index.html 
HEAD~1:/index.html 
HEAD~2:/index.html 
. 
. <-- /var/www/index.html matches in here somewhere. 
. 
HEAD~N:/index.html 

내가하고 생각할 수있는 유일한 방법은 자식에있는 파일의 모든 버전을 체크 아웃하고 각각을 확인하는 스크립트를 작성하지만, 자식 내 제한된 경험에서 나는 보통 몇 가지 표준이 있음을 발견했습니다 내가 꿈꾸던 모든 git 작업을 수행하는 방법.

답변

3

git-describe를 사용하는 것이 좋습니다. 또한 git 저장소를 복제 한 다음 .git 디렉토리를 삭제하는 대신 git-archive를 사용하여 tarball을 생성하는 방법을 고려할 수 있습니다. 아카이브를 보관하고 git-get-commit-tar-id를 사용하여 커밋을 찾습니다. 실제 질문에 대답하려면 git-hash-object를 사용하여 해당 파일의 BLOB를 가져온 다음 Which commit has this blob?

+0

감사합니다. 다른 질문에는 내가 찾고있는 것이있었습니다. 검색하여 찾을 수 없었습니다. – Triptych

0

당신은 당신이 파일을 사용하면 파일이 변경 될 때 찾을 양분 사용할 수와 일치하는지 알고 시점을 가지고, 그래서 당신은 당신이 모르는 경우 모든 버전

볼 필요가없는 경우 모든 수정본을 검사해야하는 파일과 일치하는 수정본

1

빌드 프로세스의 일부로 git describe > version_file을 실행하고 나머지 파일과 함께이 파일을 저장하십시오. 이 방법으로 파일을 커밋하는 것에 대한 참조를 항상 얻을 수 있습니다.

다른 옵션은 빌드 프로세스의 일부로 분기 또는 경량 태그 중 하나 인 커밋에 대한 참조를 설정하고 모든 빌드에서 커밋을 덮어 쓸 때 git에서 정보를 사용할 수있게하려는 것입니다.

여러분이 물어 본 것보다 더 가까운 마지막 옵션은 .gitattributes의 ident 필터를 사용하여 각 파일의 $ Id $를 파일 해시로 바꾸는 것입니다. 그러나이 문제는 단지 파일의 정확한 버전을 포함하고 커밋 된 파일이 아닌 커밋 (여러 파일)을 파악할 수있게 해줍니다.

+0

가벼운 태그가 가장 단순한 IMHO처럼 보입니다 – MatrixFrog

+0

git describe에 대한 유용한 팁. 현재 우리는 수동으로 제작에 태그를 추가하지만 사용자의 방법은 분명합니다. 그래도이 대답은 내 설명 된 문제에 도움이되지 않습니다. – Triptych

관련 문제