Programing

Subversion 관리 파일 이름에서 @ 문자를 이스케이프 처리하는 방법은 무엇입니까?

lottogame 2020. 5. 14. 07:57
반응형

Subversion 관리 파일 이름에서 @ 문자를 이스케이프 처리하는 방법은 무엇입니까?


많은 Subversion 작업에서 파일 또는 URL 인수 끝에 '@'기호를 추가하면 해당 파일의 특정 개정을 대상으로 할 수 있습니다. 예를 들어, "svn info test.txt@1234"는 개정 1234에 존재했던 test.txt에 대한 정보를 제공합니다.

그러나 파일 이름에 @이 포함되어 있으면 Subversion에서 개정 지정자로 잘못 해석됩니다.

svn info 'test @ .txt'svn : 구문 오류 구문 분석 개정 '.txt'

'/', '\'및 '@'으로 이스케이프 처리하는 것 외에도 큰 따옴표와 작은 따옴표를 시도했습니다. @ 기호를 파일 이름의 일부로 취급하도록 Subversion에 지시하려면 어떻게해야합니까?


로부터 SVN 책 (강조는 추가) :

지각 독자는이 시점에서 페그 개정 구문이 실제 복사 경로 또는 실제로 부호가있는 URL에 문제를 일으키는 지 궁금합니다. 결국 svnnews@11 은 내 트리의 디렉토리 이름 인지 또는“ 뉴스 개정 11”의 구문 인지 어떻게 알 수 있습니까? 고맙게도 svn 은 항상 후자를 가정하지만 사소한 해결 방법이 있습니다. 당신은 경로의 끝에 기호에서를 추가 할 필요가 같은, news@11@. svn 은 인수의 마지막 기호에만 관심이 있으며 그 뒤에 기호 페그 개정 지정자를 생략하는 것은 불법으로 간주되지 않습니다. 이 해결 방법은 at 기호로 끝나는 경로에도 적용됩니다.filename@@filename @ 이라는 파일 에 대해 이야기합니다 .


원래 답변은 정확하지만 충분히 명시 적이 지 않을 수 있습니다. 특정 유닉스 명령 행 옵션은 다음과 같습니다.

svn info 'image@2x.png@'

또는

svn info "image@2x.png@"

또는

svn info image\@2x.png\@

방금 세 가지를 모두 테스트했습니다.


다른 하위 폴더에 여러 파일을 추가하기위한 솔루션 :

for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done

" @ .png" 의 "png" 를 추가하려는 파일 종류로 바꾸십시오 .


다음 파일을 추가하려면 : image@2x.png 다음을 수행하십시오. svn add image \ @ 2x.png @


간단히 추가

@

SVN 명령이 무엇이든 관계없이 파일에서 다음과 같이 사용해야합니다.

file@2x.jpg

file@2x.jpg@

필자의 경우 @ 기호가 포함 된 SVN 저장소에서 파일을 제거해야했습니다.

이것은 작동하지 않습니다 :

svn remove 'src/assets/images/hi_res/locales-usa@2x.png'

그러나 이것은했다 :

svn remove 'src/assets/images/hi_res/locales-usa@2x.png@'

여러 파일을 추가하려면 대체 솔루션이 있습니다.

svn status | grep \.png | awk '{print $2"@"}'| xargs svn add

"move"와 같은 2 개의 인수가있는 svn 명령의 경우 왼쪽 (첫 번째) 매개 변수 에만 "@"을 추가해야합니다 . 예를 들면 다음과 같습니다.

$ svn add README@txt@
A         README@txt

$ svn move README@txt@ README2@txt
A         README2@txt
D         README@txt


$ svn status
A       README2@txt

$ svn commit -m "blah"
Adding         README2@txt
Transmitting file data .
Committed revision 168.

$ svn delete README2@txt@
D         README2@txt

$ svn commit -m "blahblah"
*Deleting       README2@txt

Committed revision 169.

이 줄은 중요합니다 : $ svn move README @ txt @ README2 @ txt

보다시피, "README2 @ txt"에 "@"를 추가 할 필요는 없습니다.


@ 데이비드 H

@ 기호를 이스케이프하지 않고 비슷한 명령을 시도했지만 여전히 잘 작동합니다.

svn ci splash.png splash@2x.png@

이것은 GNU bash 버전 3.2.48 (1)-릴리스 (x86_64-apple-darwin10.0) 및 svn 1.6.16에 있습니다.


나를 위해 일한 유일한 해결책은 @NPike가 제안한 것과 동일했습니다.

svn 'path / to / filename @ ext @'되돌리기


나는 오늘 이메일 주소에서 생성 된 파일 이름에 문제가있었습니다 (아주 좋은 생각은 아닙니다!).

및 셸 확장 printf옵션을 사용하는 솔루션find

 svn add  $(find . -name "*@*.png" -printf "%p@ ")

참고URL : https://stackoverflow.com/questions/757435/how-to-escape-characters-in-subversion-managed-file-names

반응형