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


191

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

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

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

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


3
왜 지구상에서 @가 붙은 파일 이름이 있습니까? 당신이 저에게 묻는다면 문제를 요구하는 ... :-)
JesperE

아주 좋은 질문입니다! :) 나는이 캐릭터가 파일 명명 규칙의 기본 구성 요소 인 프로젝트를 인수하고 있으며 불행히도 가까운 미래에는 변경할 수 없습니다.
weston

57
Apple은 iOS 4 이상에서 모든 iOS 개발자를 위해이 규칙을 만들었습니다. 고해상도 디스플레이를 위해 모든 자산의 이름을 @ 2x로 지정해야합니다 ...
Dimitris

2
빈민가 구식 Matlab OO에 대한 표준
Chinasaur

썬더 버드의 명 Enigmail에서 개인 키 또는 취소 키를 저장하는 경우 또한, 그것은 파일 이름을 생성 -하지 부당 응용 프로그램 제공 - at 기호 포함
피터 플린

답변:


283

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

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


4
"svn diff"를 사용하려면 개정 매개 변수를 추가해야합니다. "svn up @ file @"은 작동하지만 "svn diff @ file @"은 작동하지 않습니다. "svn diff -r HEAD @ file @"
분석을 사용해야합니다.

SVN 서적에 대한 참고 사항 : 파일은 Windows에서도 확장명없이 존재할 news@11수 있으므로 파일 일 수도 있습니다.
trysis

1
이름 바꾸기와 같은 일부 명령의 경우 인수는 버전이 지정된 항목이거나 로컬 파일 이름 일 수 있습니다. 이름을 바꾸는 경우 대상도 고정 된 개정판을 스캔하지만 나중에 일반 이름으로 취급 될 수 있습니다. 예를 들어, 이름을 바꿀 경우 @foo@bar, svn rename @foo@ @bar불평 할 것이다 @bar; 그러나 당신이 그것을 만들면 svn rename @foo@ @bar@, 새로운 이름은 문자 그대로 될 것 @bar@입니다. 이를 피하려면 ./(또는 .\ 창에) 추가 하여 로컬 경로인지 확인하십시오 svn rename @foo@ ./@bar.
Zastai

82

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

svn info 'image@2x.png@'

또는

svn info "image@2x.png@"

또는

svn info image\@2x.png\@

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


4
나는 또한 테스트 svn info icon@2x.png@했고 그것이 효과가 있었다. 예, 따옴표 나 슬래시가 없습니다!
Nate

인용의 필요성은 쉘에 달려 있습니다 .KSH를 사용하고 따옴표가 필요합니다 ( '@'는 백그라운드에서 프로세스를 실행하려는 기호이므로). 쉘에 따라 YMMV.
David H

네. 마일리지가 bash고속도로 에있었습니다 :)
Nate

1
@Nate 이제 실패 할 수는 없습니다-ksh로 따옴표없이 잘 작동합니다. 왜 내가 필요하다고 생각했는지 모르겠습니다. 다른 문제 일 수도 있습니다. 2 년 전에 게시했습니다.
David H

14

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

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

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


파일 이름을 인용하거나 이스케이프하십시오 (대소 문자를 구분하지 않음). 또한 파일 @이름을 특수한 경우로 취급 할 필요가 없으며 @모든 파일 이름에 심볼을 안전하게 추가 할 수 있습니다 for file in $(find ./ -type f -iname "*.png"); do svn add "$file@"; done. 또한이 접근법은 파일 / 디렉토리 구조를 사용하여 svn 저장소를 작업 로컬 사본과 일치하지 않습니까?
ardnew

사용하는 exec발견의 것은 eaiser 수 있습니다 :find . -type f -name "*@*.png" -exec svn add {}@ \;
Walty Yeung의

11

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


11

간단히 추가

@

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

file@2x.jpg

file@2x.jpg@

8

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

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

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

그러나 이것은했다 :

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

6

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

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

답을 설명하십시오.
Hemang

3
grep 대신 awk를 사용할 수 있습니다.svn status | awk '/\.png/ {print $2"@"}'| xargs svn add
h3dkandi

1

"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"에 "@"를 추가 할 필요는 없습니다.


0

@ 데이비드 H

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

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

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


0

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

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


이것이 원래 질문에 대한 새로운 답변 이어야한다고 확신 합니까? 이것은 오히려 찬성 또는 의견이어야한다
Nico Haase

죄송합니다, 내 나쁜, 난 아직 코멘트를 추가 할 수 없습니다
Jonyx4

0

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

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

 svn add  $(find . -name "*@*.png" -printf "%p@ ")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.