2016-11-25 7 views
2

나는 Git 저장소가 있습니다. 다른 커밋을 기반으로 내 저장소 기록에서 모든 파일과 폴더를 폴더로 내보내려고합니다. 하지만 모든 커밋과 지점을 별도로 내보내려고합니다. 내 자식 저장소에 대한 일종의 백업/아카이브. 나는의 저장소 이력이있는 경우 예를 들어Git Repository에서 폴더/아카이브에 대한 모든 커밋 파일을 추출하는 방법은 무엇입니까?

: 내 최신 커밋 -v2.0

을 -v1.0 내 초기

내가 분리에 서로 다른 커밋의 모든 파일과 폴더를 내보낼 커밋 폴더. 차이점 패치가 아닌 일반 파일로 파일을 원합니다.

예를 들어 커밋 파일을 포함해야하는 "/MyGitBackup/Master/v1.0"및 "/MyGitBackup/Master/v2.0"폴더가 있습니다.

어떻게하면됩니까? GUI 도구가 이와 비슷한 기능을 제공합니까? 나는 윈도우 머신을 사용한다.

답변

1

공간이 낭비되는 것 같습니다. 그러나 확인이 가능하다 : 각 개정

  • , 실행 git archive revision
  • git rev-list 명령에 따라 적절한 플래그

이것은에 master 각 개정 내용을 내보낼 수있는 한 가지 방법으로 archive/의 하위 디렉토리에 별도의 폴더 :

git rev-list master | while read rev; do 
    echo creating archive for $rev 
    mkdir -p archive/$rev 
    git archive $rev | (cd archive/$rev; tar x) 
done 
+0

있다. 이 스크립트는 어떤 언어입니까? –

+1

이것은 배쉬입니다. Windows에서는 표준 힘내 설치의 일부인 Git Bash 셸에서 실행할 수 있습니다. 예. 커밋 날짜의 이름을 파생 시키도록 스크립트를 조정할 수 있습니다. 어떤 종류의 카운트를 사용하는 것도 가능합니다. 귀하의 예에서는 v1.0과 v2.0이 어디에서 왔는지를 지정하지 않았습니다. 분명히 디렉토리 이름은 고유해야합니다. 당신이 원하는 방식을 말해 준다면, 나는 적응하려고 노력할 수 있습니다. – janos

+0

커밋 날짜 이후와 커밋 주석의 첫 번째 10 자 이후에 폴더의 이름을 지정하고 싶습니다. "Name A-Z"-sort-option을 선택하면 내 폴더가 내 파일 탐색기에서 만성적으로 정렬됩니다. –

1

당신은을 사용할 수 있습니다다른 디렉토리에 대해 다른 커밋을 체크 아웃 할 수 있습니다. 그래서, 당신의 작업 디렉토리에서 다음 명령을 실행, 더 사람이 읽을 수있는 방법 또는 만성적으로 폴더 이름을 지정하는 방법은

이 체크섬의 이름을 딴 폴더를 만드는
git worktree add /MyGitBackup/Master/v1.0 <v1.0 commit hash or tag> 
git worktree add /MyGitBackup/Master/v2.0 <v2.0 commit hash or tag>