Subversion에서 하나의 파일 체크 아웃


320

"단일 파일을 체크 아웃 할 수 없습니다. 가장 정밀한 체크 아웃 레벨은 디렉토리 레벨입니다."

Subversion을 사용할 때이 문제를 어떻게 해결합니까?

Subversion에는이 폴더가 있으며 모든 이미지를 보관합니다. 그중 하나의 파일 (이미지)을 확인하고 싶습니다. 이 폴더는 정말 커서 지금 필요하지 않은 다른 것들이 많이 있습니다.


다른 방법으로 할 수 있습니다. 프로덕션 서버 및 svn up컴퓨터의 로컬 디렉토리에 로그인하십시오.
Neocortex

답변:


403

간단한 대답은 svn export파일을 체크 아웃하는 대신 파일입니다.

그러나 그것은 당신이 원하는 것이 아닐 수도 있습니다. 필요없는 GB의 정크를 다운로드하지 않고도 파일을 작업 한 후 다시 체크인 할 수 있습니다.

Subversion 1.5 이상을 사용하는 경우 스파 스 체크 아웃을 수행하십시오.

svn checkout <url_of_big_dir> <target> --depth empty
cd <target>
svn up <file_you_want>

SVN의 이전 버전의 경우 다음과 같은 이점이 있습니다.

  • 먼 옛날에 수정본을 사용하여 디렉토리를 확인하십시오. 필요한 정크가 적을 때 필요하지 않습니다.
  • 혼합 파일을 만들려면 원하는 파일을 업데이트하십시오. 이것은 체크 아웃 한 개정판에 파일이없는 경우에도 작동합니다.
  • 이익!

대안은 (예를 들어, 디렉토리가 작성된 개정판에서 너무 많은 정크 권한을 가진 경우) 저장소의 새로운 위치에 원하는 파일의 URL-> URL 사본을 수행하는 것입니다 (효과적으로 작동하는 분기입니다) 파일). 해당 디렉토리를 확인하고 수정하십시오.

대상의 작업 복사본없이 수정 된 복사본을 리포지토리에 완전히 다시 병합 할 수 있는지 확실하지 않습니다. 그렇다면 그렇게하십시오.

그렇지 않다면 불행히도 전체 디렉토리를 체크 아웃 한 다른 사람을 찾아서해야 할 수도 있습니다. 또는 수정을 할 때까지 나머지는 다운로드를 완료했을 것입니다 ...


13
정말 간단한 해결책은 웹 브라우저로 저장소에 액세스하는 것입니다.
고인돌

11
@dolmen-아마도 파일을 수정할 필요가 없다고 가정하십시오 (그리고 해당 저장소에 대해 웹 인터페이스가 실행되고 있다고 가정). 명령 줄 SVN svn export을 사용하므로 원하는 파일을 알고 있다면 웹 인터페이스를 사용하는 것보다 사용하는 것이 더 간단합니다 . 질문자는 이미 SVN을 사용하므로 어떤 클라이언트와 클라이언트가 사용하기 쉬운 지에 달려 있습니다 svn export. 그래도 웹 브라우저가 브라우징에 더 낫다는 것을 알았습니다 svn ls:-)
Steve Jessop

2
Subversion 서버가 지원하는 경우 SmartSVN 클라이언트는 개별 파일을 잠급니다. 그리고 바이너리 / 실행 파일을 체크인하기 전에 체크 아웃이 필요한 후크가 있습니다. 실제로 두 사람이 바이너리를 수정하고 변경 사항을 병합하도록하는 것은 아닙니다. 이러한 질문이 있었을 때 사용할 수 없었던 새로운 기능 일 수 있습니다.
TamusJRoyce

@Tamus : "실제로 이해가되지 않습니다."동의하지만, 병합의 경우 새 버전을 원래 위치로 되 돌리는 것입니다. 이진 파일이 병합 대상에서 수정 된 것은 아닙니다. 따라서 파일 자체는 이전 버전을 새 버전으로 바꾸는 것 외에는 "병합"할 필요가 없으며 SVN에서 호출 한 것이므로 나중에 참조하기 위해 변경 사항이 발생한 위치를 기록합니다. 당신은 옳습니다, 지속 시간 동안 파일을 잠그면 충돌 방지를 시행 할 수 있습니다.
Steve Jessop

1
TortoiseSVN은 개별 파일을 체크 아웃 할 수 있습니다. 나는 그것을 달성하기 위해 무대 뒤에서 같은 일을한다고 생각합니다.
Mike Starov

109

svn export대신 사용해보십시오 svn checkout. 단일 파일에서 작동합니다.

제한 이유 checkout는 리포지토리, 개정판, 특성 등에 대한 메타 정보가 포함 된 작업 복사본 을 생성하기 때문입니다 . 해당 메타 데이터는 '.svn'이라는 하위 디렉토리에 저장됩니다. 그리고 단일 파일에는 하위 디렉토리가 없습니다.


2
주의 사항 : 매우 오래된 버전은 svn단일 파일 내보내기를 수행하지 않습니다.
Mladen Jablanović

5
배포의 일부로 특정 스크립트의 최신 버전을 가져 오려는 경우이 방법이 가장 좋습니다.
william.berg

2
이 경고는 2011 년에도 거슬러 올라갔지 만 매우 오래된 버전에서는 가능 svn cat $url_to_file_in_repo > $local_file_name합니다.
cprn 2016 년

53

svn cat또는을 사용하십시오 svn export.

이를 위해 작업 디렉토리를 가져올 필요는 없지만 변경 사항을 커밋 할 수는 없습니다. 변경하고 커밋해야하는 경우 작업 디렉토리가 필요하지만 완전히 가져올 필요는 없습니다. 디렉토리가 여전히 / 거의 비어있는 개정판을 확인한 다음 'svn cat'을 사용하여 HEAD에서 파일을 추출하십시오.


svn cat svn://.../my_file.txt내가 찾던 것입니다. 나는 svn://유일한 (아니 http://) 저장소 에서 일하고 최신 websvn 인터페이스가 원시 파일 다운로드를 제공하지 않는 것 같습니다 (또는 잘못 구성되었거나 눈이 멀었습니다). 파일을 다운로드하는 것보다 checkout+ 보다 쉬운 방법 up입니다.
ribamar

12

확인하지 않고 리포지토리에서 readme.txt를 보려면 다음을 수행하십시오.

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
이것은 README 파일입니다. 이것을 읽어야합니다.

팁 : 작업 사본이 오래되었거나 로컬로 수정 한 경우 작업 사본에 파일의 HEAD 개정을 보려면 svn cat은 경로를 제공 할 때 HEAD 개정을 자동으로 가져옵니다.

$ cat foo.c
이 파일은 로컬 작업 복사본에 있으며 변경 한 내용이 있습니다.

$ svn cat foo.c
저장소에서 최신 개정!

출처


모든 HTTP 클라이언트를 직접 사용할 수도 있습니다. 웹 브라우저, 또는 같은 명령 줄 도구 curlwget.
고인돌

9

허용 된 답변에 대한 TortoiseSVN 동등한 솔루션 (SVN을 새로 채택함에 따라 회사의 내부 문서에 이것을 작성했습니다). 여기에서도 공유하는 것이 도움이 될 것이라고 생각했습니다.

단일 파일 체크 아웃 : Subversion은 단일 파일의 체크 아웃을 지원하지 않으며 디렉토리 구조의 체크 아웃 만 지원합니다. (참조 : http://subversion.tigris.org/faq.html#single-file-checkout ). 작업중인 사본으로 체크 아웃 된 모든 디렉토리에서 수정 / 파일 개정에 관한 메타 데이터는 내부 숨겨진 폴더 (.svn / _svn)로 저장되기 때문입니다. 단일 파일에 대해서는 현재 (v1.6) 지원되지 않습니다.

대체 권장 전략 : 단일 파일을 직접 체크 아웃 할 수 있도록 체크 아웃 디렉토리 부분을 한 번만 수행해야합니다. 상위 폴더 및 디렉토리 구조의 스파 스 체크 아웃을 수행하십시오. 스파 스 체크 아웃은 기본적으로 컨텐츠 파일을 채우지 않고 폴더 구조 만 체크 아웃합니다. 따라서 디렉토리 구조 만 체크 아웃하고 모든 파일을 체크 아웃 할 필요는 없습니다. 참조 : http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

1 단계 : 리포지토리 브라우저로 진행

2 단계 : 작업하려는 모든 파일이 포함 된 저장소 내의 상위 폴더를 마우스 오른쪽 단추로 클릭하고 체크 아웃을 선택하십시오.

3 단계 : 새 팝업 창에서 체크 아웃 디렉토리가 로컬 PC의 올바른 위치를 가리키는 지 확인하십시오. “체크 아웃 깊이”라고 표시된 드롭 다운 메뉴도 있습니다. 요구 사항에 따라 "이 항목 만"또는 "폴더를 포함한 즉각적인 하위 항목"을 선택하십시오. 중첩 된 폴더에서 작업하려면 다음에 바로 진행할 수 있으므로 두 번째 옵션을 사용하는 것이 좋습니다. 그렇지 않으면 중첩 된 폴더에 대해이 전체 절차를 다시 수행해야합니다.

4 단계 : 이제 상위 폴더를 로컬에서 선택한 폴더 내에서 사용할 수 있고 SVN으로 모니터링하고 있습니다 (숨겨진 폴더 ".svn"또는 "_svn"이 있어야합니다). 이제 리포지토리 내에서 단독으로 체크 아웃하려는 단일 파일을 마우스 오른쪽 단추로 클릭하고 "수정할 항목 업데이트"옵션을 선택하십시오. 이제 단일 파일을 작업하고 리포지토리에 다시 체크인 할 수 있습니다.

이게 도움이 되길 바란다.


8

두 단계로 수행 할 수 있습니다.

  1. 메타 정보 만있는 빈 SVN 저장소를 체크 아웃하십시오.

    $ cd /tmp
    
    $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql
    
  2. svn up지정된 파일을 업데이트하려면 실행하십시오 .

    $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql
    

6

파일이 다른 폴더의 체크 아웃에 포함되도록하여 실제로 필요한 경우의 업데이트를 처리 할 수 ​​있습니다.

SVN 1.6부터는 일종의 svn 링크 인 파일 externals를 만들 수 있습니다. 즉, 단일 파일을 포함하는 다른 버전의 폴더를 가질 수 있습니다. 이 폴더를 체크 아웃 할 때 파일 변경 사항을 커밋 할 수도 있습니다.

매우 간단합니다. 파일을 포함하려는 폴더를 체크 아웃하고 폴더에 속성을 추가하십시오.

svn propedit svn:externals .

다음과 같은 내용으로 :

file.txt /repos/path/to/file.txt

이 커밋 후에는 나중에 폴더를 체크 아웃 할 때 파일이 나타납니다. 기본적으로 작동하지만 위에 링크 된 설명서에 설명 된대로 몇 가지 제한 사항이 있습니다.


4

repo-browser로 이동하여 파일을 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 저장'을 사용하십시오. TortoiseSVN을 사용하고 있습니다.


4
cd C:\path\dir
svn checkout https://server/path/to/trunk/dir/dir/parent_dir--depth empty
cd C:\path\dir\parent_dir
svn update filename.log

(filename.log 편집)

svn commit -m "this is a comment."

4

Steve Jessop의 답변 이 저에게 효과적이지 않았습니다. SVN에 대한 도움말 파일을 읽었으며 이미지가있는 경우 Photoshop을 수행하지 않는 한 다시 체크인하지 않으려 는 경우 내보내기 가 버전 화되지 않은 체크 아웃보다 명령이 더 좋습니다 (그러나 사소합니다).

그리고 --depth ARG는 안 비어 있지만 파일은 즉각적인 디렉토리에있는 파일을 얻을 수 있습니다. 따라서 필드뿐만 아니라 모든 필드를 얻을 수 있지만 empty 는 저장소에서 아무것도 반환 하지 않습니다 .

 svn co --depth files <source> <local dest>

또는

svn export --depth files <source> <local dest>

다른 답변에 관해서는, 고양이 는 모든 것의 이미지가 아니라 텍스트에만 적합한 내용을 읽을 수 있습니다.


1
요점은 --depth empty다른 파일을 체크 아웃해서는 안되며을 사용하여 단일 파일 만 가져올 수 있다는 것입니다 svn up <source/file>. 을 사용 svn export하면 파일을 지정하기 만하면됩니다.
Kevin Vermeer

@reemrevnivek-당신이 맞아요. 질문은 방금 단일 파일을 요청했는데, 이것은 비어있는 경우에도 전체 디렉토리 구조 파일을 체크 아웃하지 않고 작동합니다.
Vass

4

그냥 찾아서 단일 파일을 내보내고 싶습니다. HTTP 액세스 권한이 있으면 웹 브라우저를 사용하여 파일을 찾아서 가져 오십시오.

편집 후 다시 가져와야하는 경우 약간 지루할 수 있지만 svn import기능 이있을 것이라고 확신 합니다 ...


3

다음과 같이하십시오 :

mkdir <your directory>/repos/test

svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt

기본적으로 아이디어는 SVN에서 파일을 가져 오려는 디렉토리를 작성하는 것입니다. svn cat명령을 사용하여 출력을 동일한 이름의 파일로 경로 재 지정하십시오. 기본적으로 고양이는 stdio에 정보를 덤프합니다.


2

수정 정보가없는 파일 만 사용하려면

svn export <URL>

2

Subversion 1.5에서는 하위 디렉토리 (다양한 --depth 플래그)를 체크 아웃하지 않고 디렉토리의 파일을 체크 아웃 (전체) 할 수 있습니다. 당신이 요구 한 것은 아니지만 "모두보다 작다"라는 형식입니다.


2

스파 스 체크 아웃 기술을 사용하면 이미 체크 아웃되었거나 존재하는 특정 파일을 간단한 트릭으로 확인할 수 있습니다.

Windows 탐색기에서 '이 항목 만'옵션을 사용하여 저장소의 최상위 레벨을 체크 아웃 한 후에는 먼저 업데이트해야하는 파일을 마우스 오른쪽 단추로 클릭해야합니다. 상황에 맞는 메뉴에서 Repo Browser를 선택하십시오. 저장소 브라우저에서 해당 파일을 다시 찾아 마우스 오른쪽 단추로 클릭하십시오. 이제 상황에 맞는 메뉴에 "수정할 항목 업데이트"가 표시됩니다.

문서화되지 않은 기능인지 또는 단순히 버그인지 확실하지 않습니다. 마침내이 트릭을 찾기 위해 연장 된 근무 시간이 걸렸습니다. 내가 사용하고 TortoiseSVN을 1.6.2.


2

작업 복사본의 일부가 아닌 디렉토리에 단일 파일을 체크 아웃하고 싶었습니다.

다음 URL에서 파일을 가져 오십시오. http : //subversion.repository.server/repository/module/directory/myfile

svn co  http://subversion.repository.server/repository/module/directory/myfile /**directoryb**

그래서 나는 목표 디렉토리가 들어있는 주어진 디렉토리를 확인했다. 나는 더미 디렉토리 (예 :로 끝나는 URL 등)에 도착했다 /etc.

그런 다음 필요하지 않은 대상 디렉토리의 모든 파일에서 .svn / entries 파일을 비우고 원하는 파일 만 남겨 두었습니다. 이 .svn / entries 파일에는 속성이있는 각 파일에 대한 레코드가 있으므로 가져오고 저장하려는 파일에 관한 레코드 만 남겨 두십시오.

이제 ''.svn ''을 새로운 "작업 카피"디렉토리에 복사하면됩니다. 그런 다음 다음을 수행하면됩니다.

cp .svn /directory
cd /directory
svn update myfile

이제 디렉토리 디렉토리 는 버전 제어하에 있습니다. ``임시 작업 복사본 ''인 디렉토리 directoryb 를 제거하는 것을 잊지 마십시오 .


이것이 드문 체크 아웃이 아닌가? .svn 디렉토리의 파일을 수동으로 해킹해서는 안됩니다.
Lasse V. Karlsen 2019

아마도 문제를 올바르게 해결했습니다. 버전 관리가 작동하는 방식이며 파일을 디렉토리의 확장으로 처리 할 수 ​​없다고 생각합니다. 그것을 시도하고 논리에 어떤 문제가 있는지 말해주십시오. Subversion 개발 팀 이이 기능으로 svn 유틸리티를 확장하도록 제안하면이 스레드에 응답 한 모든 사람의 문제를 해결할 수 있습니다.
hendergassler

2

다른 답변 중 어느 것도 나를 위해 일하지 않았 으므로이 해킹을 사용하여 수행했습니다.

$ cd /yourfolder
svn co https://path-to-folder-which-has-your-files/ --depth files

이렇게하면 원격 경로의 파일 만있는 새 로컬 폴더가 만들어집니다. 그런 다음 여기에 원하는 파일에 대한 심볼릭 링크를 수행 할 수 있습니다.


OP svn co는 이미지 파일로 가득 찬 전체 디렉토리를 피하기 위해 하나의 파일에 대해 물었습니다 . 또한 심볼릭 링크를 추가하면 복잡성을 더할 수 있으며 임시 디렉토리에서 이동하면 효과가 있지만 여전히 하나의 이미지에 대해 전체 그림 디렉토리를 확인해야합니다. @ steve-jessop은 옳은 생각을했습니다
Chris Marotta

2
@ChrisMarotta the OP가 9 년 전에 질문을했습니다. 여기에 아무도 OP에 응답하지 않습니다. 이것은 이런 종류의 문제에 대한 일반적인 주제이며 더 이상 원본 OP와 관련이 없습니다. 사람들은 자신의 문제에 대한 해결책을 찾기 위해 여기에오고 있습니다. 그리고 그들이 그것을 읽을 때, 그들 중 일부는 이것이 유일한 적절한 해결책 인 내 상황에있을 것입니다. 그래서 제가 게시했습니다.
Lacho Tomov

1
이 답변에 만족합니다. 도움이되었습니다.
Leos Literak

1

이 문제는 다음과 같습니다.

http://subversion.tigris.org/issues/show_bug.cgi?id=823

svn에서 단일 파일을 체크 아웃하고, 변경하고, 변경 사항을 다시 저장소에 커밋 할 수있는 스크립트가 첨부되어 있지만 "svn up"을 실행하여 디렉토리의 나머지를 체크 아웃 할 수는 없습니다. svn-1.3, 1.4 및 1.6으로 테스트되었습니다.


1

파일 만 내보내고 나중에 업데이트 할 필요가 없으면 SVN 명령을 사용하지 않고도 파일을 업데이트 할 수 있습니다.

TortoiseSVN 리포지토리 브라우저를 사용 하여 파일을 선택하고 마우스 오른쪽 단추를 클릭 한 다음 " 클립 보드에 URL 복사 "를 선택하십시오 . 해당 URL을 브라우저에 붙여 넣고 로그인 후 파일 다운로드 메시지가 표시됩니다.

이 방법으로 원하는 개정판을 선택하고 이전 버전의 파일을 다운로드 할 수도 있습니다.

이것은 SVN 서버에 웹 인터페이스가있는 경우 유효합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.