2013-11-28 7 views
2

내 프로젝트에는 DB의 모든 업데이트가 저장되는 디렉토리 (예 : db/updates /)가 있습니다. 각 업데이트는 단일 파일 (예 : update_1.sql, update_2.sql 등)입니다. 릴리스가 만들어지면 마지막 개정 이후 추가/업데이트 된 파일 범위 (DB에 저장 됨)가 필요합니다. 지금 나는 그것을 다음과 같은 방법으로하고 있어요 :힘내 : 특정 버전간에 파일을 가져 오는 방법

# pull changes  
git pull origin branch --force 

# make patch  
git diff $last_revision -- ./db/updates > ./PATCH 

# remove all files in directory /db/updates  
rm -rf ./db/updates/* 

# apply changes  
git apply --ignore-whitespace --inaccurate-eof ./PATCH 

그것은 잘 작동을하지만 실패했을 때의 경우가있다. 이 있다면 커밋에 추가 어디 패치가 오류 오류와 함께 실패합니다 파일에 B와 C를 저지른 사이에 파일의 변경 사항 : dB/업데이트/update_xxx.sql : 그런 파일이나 디렉토리는

무시하는 방법이 누락되지 파일? 패치를 만드는 동안 나는 --diff 필터 = A를 사용하는 거라고하지만,이 어디에 필요한 개정 B와 C 사이에 최선을 다하고 있음을 모든 변경 사항을 무시

답변

1

에만 추가 된 파일에 대한 필터링을보십시오 :

git diff --diff-filter=A $last_revision -- ./db/updates > ./PATCH 

을 그 수정 된 파일 대신 패치에 새로 추가 된 파일 만 제공합니다.

는 "Filter git diff by type of change"에 대한 자세한 내용보기 :
새로운 수정 된 파일 얻으려면 :

git diff --diff-filter=ACMR $last_revision -- ./db/updates > ./PATCH 
+0

나는 내 게시물에서 언급했듯이이 옵션이 없습니다. 패치에 수정 사항이 포함되어야합니다. – user3044784

+0

@ user3044784 문제 없음 : 새로운 * 및 * 수정 된 파일로 필터링 할 수 있습니다. 답변을 편집했습니다. – VonC

1

음을, 등등 패치에 문제없이/수정 된 파일을 추가하려면 더 쉽게 방법이 :

# pull changes 
git pull origin branch --force 

# get modified files list since last revision 
modified=`git diff --name-only last_revision -- ./db/updates` 

# copy added/modified to another folder 
for sql in $modified; do 
    cp $sql ./temp/ 
done 
+0

그게 효과가 있습니다. 내 대답보다 간단합니다. 잘하셨습니다. +1 – VonC

관련 문제