2014-12-04 3 views
0

두 커밋간에 파일을 저장/내보내기하고 싶습니다. 다음 명령은 수정 된 파일을 보여줍니다 ...자식들간에 커밋되지 않은 파일 저장하기

$ git diff-tree --no-commit-id --name-only -r bd61ad98 
index.html 
javascript/application.js 
javascript/ie6.js 

그러나 파일 구조를 보존하면서 내보내는 방법이 있습니까? 전체 프로젝트를 업로드하는 대신 웹 서버에 수정 된 파일 만 저장해야합니다.

+0

출력은 – unixmiah

+0

@unixmiah 명령 줄을 사용하여 txt 파일에 출력 할 수 있지만 이진 파일 (예 : 이미지)이 있으면 어떻게됩니까? 또한 ... 명령 줄을 사용하여 디렉토리 구조를 보존 할 수 있습니까? – Pablo

답변

1

이것은 작은 쉘 스크립트 (파일에 저장하고 파일을 실행 가능하게 만들기)의 시드입니다. 완전한 스크립트는 아닙니다. 명령 줄에 $1이 있는지 확인하고 그렇지 않으면 오류 메시지로 중단해야합니다. 그렇지 않으면 나머지 스크립트가 오류 메시지와 함께 실패합니다. 그것이 어디에 위치해 있고 호출 된 곳에서 작동해야합니다 (현재 디렉토리가 프로젝트 디렉토리 인 경우에만 작동합니다). 그것은 어떻게 든 삭제 된 파일을 처리 할 필요가 (그들이 git diff-tree 명령에 의해 반환입니까?)

#!/bin/bash 

commit=$1   # get the commit hash from the command line (the first argument) 
dest='/tmp'   # path to your destination directory (change it to match your setup) 

# Cleanup on the destination directory 
rm -rf $dest 
mkdir $dest 

# Copy the modified files 
for i in $(git diff-tree --no-commit-id --name-only -r $commit); do 
    cp --parents $i $dest/ 
done 
+0

어디서 쓸 수 있습니까, 자식 터미널에 없나요? 아니면 스크립트를 만들어야합니까? – Pablo

+0

같은 작업을 몇 번이고 반복해서하고 싶을뿐입니다. 파일이 가장 적합한 장소입니다. – axiac

+0

모든 것을 .sh 파일에 넣을 수 있습니다. 실행 파일이 실행되도록 .sh 파일에서 chmod a + x를 실행하십시오. 예 : project-diff.sh. 그런 다음 터미널에 가서 sh ./project-diff.sh 또는 sh project-diff.sh를 실행하십시오. – unixmiah

1

git archive을 참조하십시오.

git diff-tree --no-commit-id --name-only -r $commit \ 
| xargs git archive -o changedfiles.tgz -- 

해야합니다.

1

사용

git diff-tree --no-commit-id --name-only -r bd61ad98 | git archive --format zip --output "proj-diff.zip" master -0 

-0 인수가 압축 아카이브입니다; 테스트를 해보지는 않았지만 정상적으로 작동해야합니다.

관련 문제