2011-01-05 3 views
5

나는 다음과 같은 문제에 어떤 물질이 프로젝트에서 삭제됩니다 (그리고 내가 그것을 삭제하는 SVN을 사용할 수 없습니다) 때문에 발생svn은 삭제 된 파일을 "무시"하거나 저장소에서 삭제할 수 있습니까? 내가 svn을 내 프로젝트를 커밋 할 때

svn: '/var/www/sites/blabla/425/file.png' is scheduled for addition, but is missing 

를 얻을. 이러한 파일을 무시하도록 svn을 말할 수있는 방법이 있습니까? 그렇지 않으면 파일을 삭제할 수 있습니까?

답변

7

당신이 svn status을 할 때, 출력은 느낌표로 시작하는 라인으로 "실종"되어 이러한 파일이 표시됩니다 : 스크립트 언어 또는 명령에 스크립트를 작성해야

!  425/file.png 

을 (이 출력을 구문 분석하고, 느낌표로 시작하는 줄을 찾고 파일 이름을 추출한 다음 svn revert <filename>을 수행합니다. 그러면이 파일에 대한 로컬 변경 사항을 실행 취소하여 문제없이 커밋 할 수 있습니다.

편집 : 의견에 PHP 스크립트를 언급 했으므로 필자는 PHP 스크립팅에 익숙하다고 생각합니다. 이 경우 PHP 함수 svn_status을 사용할 수 있습니다.

edit2 : 파일을 저장소에서 삭제하려면 svn rm --force <filename>을 대신 사용하십시오.

+0

팁 주셔서 감사합니다. 나는 실제로 비슷한 스크립트를 사용하여 모든 새 파일을 추가합니다. ** svn status | grep^\? | awk '{print $ 2}'| xargs svn add **. 내가 대체 할 수 있다고 생각하니? " "!" "--force delete"로 "add"할까요? – aneuryzm

+0

저는 실제로 시도했지만 작동하지 않습니다. 죄송합니다. 파일을 되돌리려하지 않고 저장소에서 삭제하는 것을 잊어 버렸습니다. – aneuryzm

+0

@Patrick의 "svn add"주석 대신 "svn rm"을 사용하십시오. – ATorras

5

그럼 svn add 파일을 수동으로 삭제 하시겠습니까? 시험;

svn rm --force file.png 

SVN 인덱스에서 제거하려면.

+0

@ smail 'cartman 'Dönmez 파일은 PHP 스크립트에 의해 삭제됩니다. 그래서 나는 "svn rm"(나는 명령에서 파일 이름을 몰라)으로 제거 할 파일을 몰라. 작업 복사본에없는 파일을 자동으로 삭제해야합니다.) – aneuryzm

+0

자동 경로가 없으므로 삭제 된 경로를 수동으로 찾아서'svn rm --force'를 실행해야합니다. – ismail

+0

당신이 요구하는 행동은 위험합니다. 실수로 작업 공간에서 파일을 삭제 한 경우 이는 상당히 파괴적인 반응입니다. – jaydel

2

실행 터미널에서 다음 명령을 나를 위해

svn revert $(svn st | awk 'BEGIN{FS=""} $1=="!" && $2 !~ /\.(sql|log|tmpl)$/ {print $2}') 
1

작품 :

svn status | grep ^\! | awk '{print $2}' | xargs -L1 svn del --force 

당신이 당신의 파일 이름에 공백이있는 경우, 우리는 AWK 사용할 수 없습니다 그래서 우리는이 시작될 때까지 절단 파일 이름 (아마도이 ​​파일을 편집해야 할 것입니다. 왜냐하면 모든 시스템에서 9 문자를 줄여야하는 경우 idk를 사용하기 때문입니다) :

+1

이 코드/스 니펫은 질문에 대답 할 수 있지만 방법 및/또는 왜 문제를 해결하는지에 대한 추가 컨텍스트를 제공하면 대답의 장기적인 가치가 향상됩니다 . – Akkusativobjekt

+0

여기에서 알아야 할 유일한 트릭은 xargs에 -L1 옵션을 사용하여 실행을 한 줄씩 제한하는 것입니다. 그렇지 않으면 xargs가 처리 할 수있는 문자의 크기가 넘칠 수 있습니다. –

관련 문제