SVN이있는 디렉토리를 어떻게 무시합니까?


760

방금 SVN을 사용하기 시작했으며 소스 제어에서 필요하지 않은 캐시 디렉토리가 있습니다. SVN을 사용하여 전체 디렉토리 / 폴더를 어떻게 무시할 수 있습니까?

OS X 및 명령 줄에서 버전TextMate 를 사용 하고 있습니다.


3
: 비슷한 질문 [1] [1] [SVN 폴더 무시 체크 아웃] 여기에 대답 stackoverflow.com/questions/192824/svn-checkout-ignore-folder
mloskot

의 가능한 중복 나는 서브 버전의 파일을 무시하나요? (복제본이 어떤 방식으로 진행되는지는 신경 쓰지 않습니다. 어떤 대답도 다른 것보다 낫지 않습니다.)
Jeffrey Bosboom

답변:


796

svn:ignore상위 디렉토리 의 특성을 설정하십시오 .

svn propset svn:ignore dirname .

무시할 사항이 여러 개인 경우 속성 값에서 줄 바꿈으로 구분하십시오. 이 경우 외부 편집기를 사용하여 속성 값을 편집하는 것이 더 쉽습니다.

svn propedit svn:ignore .

2
@ Kober : 문제는 쉘 확장이 svn : ignore 속성에 대해 알지 못한다는 것입니다. 따라서 explicityl 매개 변수로 '*'를 사용하면 커밋 명령에 tmp가 전달됩니다. 'svn commit -m "More accents"와 같은 것을 시도하십시오.
MarkusSchaber

4
답변 해주셔서 감사합니다. 편집자로서의 Pico : svn propedit svn : ignore. --editor-cmd pico
hade

157
참고 : 디렉토리가 이미 "in"svn 인 경우에는 작동하지 않습니다. svn rm --keep-local dirname먼저. (내 svn 통계 출력은 거대했고 나는 잠시 동안 이것에 머리를 부딪쳤다.)
Erik Aronesty

10
둘 이상의 파일 / 폴더를 무시하려면 각 이름을 txt 파일에 각각 한 줄씩 추가하고 다음 변형을 사용하십시오.svn propset svn:ignore -F file.txt .
petervaz

2
내가 한 것처럼 설정 svn:ignore하지 않도록 조심하십시오 svn::ignore. 임의의 속성을 설정할 수 있으므로 후자의 속성은 OK로 설정되며 속성을보고 편집 할 수 있지만 SVN이 나열된 파일을 무시하지는 않습니다.
Richard Turner

406

디렉토리 구조의 예는 다음과 같습니다.

\project
    \source
    \cache
    \other

project당신이 볼 때 캐시 디렉토리가 추가되지 않고 그대로 표시됩니다.

> svn st
M  source
?  cache

ignore 속성을 설정하려면

svn propset svn : ignore 캐시.

여기서 svn:ignore설정하려는 속성의 이름, 속성 cache의 값 및 .이 속성을 설정하는 디렉토리입니다. 의 상위 디렉토리 여야합니다cache특성이 필요한 .

설정 한 속성을 확인하려면

> svn proplist
Properties on '.':
  svn:ignore

의 가치를 보려면 svn:ignore:

> svn propget svn:ignore
cache

이전에 설정 한 속성을 삭제하려면

svn propdel svn:ignore

17
내가 우연히 발견 한 까다로운 요점. 에 슬래시를 추가 하지 마십시오dirname . 예를 들어을 입력 svn propset svn:ignore dirname할 때 (bash) 셸이 dirname을 채우도록 허용하면 뒤에 슬래시가 추가되어 명령이 남게 svn propset svn:ignore dirname/되어 폴더가 무시되지 않습니다. 적어도 그것은 내 경험이었습니다.
David Weinraub

4
'캐시'디렉토리는 여전히 'svn st'에 나열됩니다. 뷰에서 제거하는 방법이 있습니까? (디스크에서 삭제하지 않고)
Tom Brito

131

언급해야 할 중요한 사항 :

커맨드 라인에서는 사용할 수 없습니다

svn add *

명령 줄이 확장 *되어 svn add모든 파일을 추가하기를 원 하기 때문에 무시 된 파일도 추가 됩니다. 따라서 이것을 대신 사용하십시오.

svn add --force .

@binco가 말한 그대로 : svn add --force *작동하지 않습니다. 별이 아닌 점을 사용하십시오.
manuell

80

이 작업을 수행하는 데 시간이 걸렸으므로 SVN에 파일이 이미 있으면 파일 svn delete을 편집 한 다음 svn:ignore속성 을 편집해야 합니다.

나는 그것이 명백해 보인다는 것을 알고 있지만, 그들이 ?svn status지역에서 무시할 것이라고 생각했을 때 그들은 내 목록과 같이 계속 나타났습니다 .


8
파일을 무시하고 실제로 삭제하지 않으려면 파일을 삭제할 때 --keep-local 옵션을 사용하는 것을 잊지 마십시오.
Dylan Holmes

71

svn 명령 줄 도구를 사용하여이 작업을 약간 확장하려면 다음을 입력하십시오.

svn propedit svn:ignore path/to/dir

선택한 텍스트 편집기를 연 다음 '*'를 입력하여 내부의 모든 것을 무시하고 저장 + 종료하십시오.이 디렉토리는 svn의 디렉토리 자체를 포함하지만 내부의 모든 파일은 무시하고 디렉토리를 무시하려면 부모의 경로를 누른 다음 파일에 디렉토리 이름을 입력하십시오. 저장 후 업데이트 ( 'svn up')를 실행 한 다음 적절한 경로를 확인하십시오.


8
아주 좋은 지적입니다. 감사합니다. 다른 모든 답변은 중첩 디렉토리의 경우를 놓쳤습니다. 따라서 위의 예제 (작동 중)는 에디터 ignore_directory (경로 / 경로 / 디렉토리 아래의 한 수준이라고 가정)에 입력합니다. svn propedit svn : ignore는 작동하지 않습니다. 편집기에서 path / to / dir / ignored_directory를 입력하십시오. IOW : SVN은 한 번에 한 레벨 아래로 오브젝트를 일치시킵니다.
greenoldman

30

svn:ignore상위 디렉토리 에서 특성을 설정하십시오 .

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

현재의 모든 값을 덮어 씁니다 svn:ignore. 다음을 사용하여 값을 편집하십시오.

$ svn pe svn:ignore .

편집기가 열립니다. 한 줄에 하나씩 여러 패턴을 추가 할 수 있습니다.

다음을 사용하여 현재 값을 볼 수 있습니다.

$ svn pg svn:ignore .

GUI를 사용하는 경우이를 수행하기위한 메뉴 옵션이 있어야합니다.


3
svn ps svn:ignore . 'cachedir'결과 cachedir is not under version control. svn ps svn:ignore 'cachedir' .나를 위해 일하기로 변경
DiCaprio

21

위의 모든 기여에 감사드립니다. 파일을 무시하면서 내 경험에서 얻은 추가 정보를 공유하고 싶습니다.


폴더가 이미 개정 관리중인 경우

svn importsvn co파일을 , 우리가 일반적으로 처음하는 일.

모든 런타임 캐시, 첨부 파일 폴더는 버전 제어를받습니다. 따라서 svn ps svn : ignore 전에 저장소에서 삭제해야합니다.

SVN 버전 1.5 이상에서는을 사용할 수 svn del --keep-local your_folder있지만 이전 버전의 경우 내 솔루션은 다음과 같습니다.

  1. svn.svn 숨겨진 폴더 없이 폴더의 깨끗한 사본을 내 보냅니다 .
  2. svn del 로컬 및 저장소
  3. svn ci
  4. 폴더를 다시 복사
  5. 수행 일 SVN 과 폴더로 플래그가 확인 '?'
  6. 이제 우리는 솔루션에 따라 svn ps를 할 수 있습니다

둘 이상의 폴더를 무시해야 할 때

  • 하나의 디렉토리에는 두 개의 폴더가 있어야합니다. svn:ignore
  • 하나를 설정하면 다른 하나가 제거됩니다.
  • 그런 다음 svn pe 가 필요한지 궁금합니다.

svn pe텍스트 파일을 편집해야하며 vi를 사용하여 텍스트 편집기를 설정해야하는 경우이 명령을 사용할 수 있습니다 .

export SVN_EDITOR=vi
  1. "o"를 사용하면 새로운 줄을 열 수 있습니다
  2. 무시하려는 모든 폴더 이름을 입력하십시오
  3. 편집 모드에서 빠져 나오려면 'esc'키를 누르십시오
  4. ": wq"를 입력 한 후 Enter저장하고 종료하십시오.

파일은 다음과 같이 간단하게 보입니다.

runtime
cache
attachments
assets

svn propset svn:ignore -F .ignorethesefiles .파일의 내용을 사용하는을 사용할 수도 있습니다 . 나는 그것을 무시하고 무엇이 무시되는지 알 수 있습니다. 수정하려면 후속 조치 세트가 필요합니다.
Gerard ONeill

20

먼저 제거하십시오 ...

디렉토리 foo가 이미 버전 제어 상태 인 경우 다음을 사용하여 먼저 디렉토리를 제거하십시오.

svn rm --keep-local foo

... 그런 다음 무시하십시오.

svn propset svn:ignore foo .

12

... 두 개 이상의 디렉토리 (예 : 파일 build/ temp/*.tmp파일)를 무시하려면 두 단계로 수행하십시오 (첫 번째 무시하고 무시 속성 편집 (여기 다른 답변 참조))

svn propset svn:ignore "build
temp
*.tmp" .

명령 행에서.


12

특정 SVN 클라이언트 TortoiseSVN을 사용하는 경우 커밋시 항목을 마우스 오른쪽 단추로 클릭하고 "무시 목록에 추가"를 선택할 수 있습니다.


9

여러 항목을 무시하는 명령은 약간 까다 롭고 백 슬래시가 필요합니다.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

이 명령은 이름이 무엇이든을 무시합니다 cache, tmp, null, 그리고 and_so_on현재 디렉토리이다.


6
그리고 명확히하기 위해서 : 여기서의 백 슬래시는 svn의 기능이 아닙니다. 그것은 단순히 쉘에 여러 줄 문자열을 입력하는 방법입니다. 편집기를 사용하여 여러 줄을 쓸 수도 있습니다.
sleske

bash에는 백 슬래시가 필요하지 않습니다. bash는 "가 열려 있고 라인을 처리하지 않는다는 것을 알기에 충분히 똑똑합니다. 캐시, tmp 및 null 다음에 Enter 키를 누르기 만하면됩니다. bash가 프롬프트를>로 변경하면 알 수 있습니다. 대안은 명령 입력 (svn)을 시작한 다음 esc를 누른 다음 v를 누르는 것입니다. 편집기에서 명령을 입력 할 수 있습니다. 명령을 실행했으면 ZZ를 누르십시오. 실행하고 싶지 않다면 : q !.
Michael Potter

1
svn propset svn:ignore -F .ignorethesefiles .파일을 사용할 수 있습니다. 그리고 언급했듯이, 당신은 항상 propedit을 가지고 있습니다.
Gerard ONeill

5

중첩 디렉토리를 무시하는 데 문제가있었습니다. 내가 무시하고 싶었던 최상위 디렉토리는 'svn status'로 표시되지 않지만 모든 하위 디렉토리가 표시되었습니다. 이것은 아마도 다른 사람들에게 자명하지만, 나는 그것을 공유 할 것이라고 생각했습니다.

예:

/트렁크

/ trunk / 캐시

/ trunk / cache / subdir1

/ trunk / cache / subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

4

"고마워" svn은 파일을 무시하고 무시 무시하고 어려운 방법입니다.

그래서 나는 svn-ignore-all 스크립트를 작성했다 :

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

또한 특정 파일 / 경로 이름 목록을 무시하기 위해이 변형 svn-ignore를 사용할 수 있습니다 . svn-ignore-all은 실제로 xargs svn-ignore와 같아야한다고 생각합니다.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

한 가지 더 : 나는 많은 임의의 파일로 내 svn 체크 아웃을 오염시키는 경향이 있습니다. 커밋해야 할 때 해당 파일을 'old'하위 디렉토리로 이동하고 svn에게 'old'를 무시하도록 지시합니다.


샘, 좋은 스크립트입니다. 내 머릿속에 질문이 생겼습니다. 아마도 문제는 리포지토리의 일부인 전체 폴더를 무시해도 작동하지 않는다는 사실에서 비롯된 것일 수 있습니다. 따라서 '?' 무시 목록에 추가 한 폴더에서 기본적으로 수정 된 파일은 무엇입니까? 스크립트를 항상 실행하는 것이 지루하기 때문에 스크립트 주위에 방법이 있는지 궁금합니다. 당신 은요?
SquareCat

아니, 난 정말 그것을 사용하지 않습니다! 내 파일을 정리하려고
샘 왓킨스

4

여러 무시에 대한 배쉬 oneliner :

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

3

프로젝트 디렉토리의 이름이 / Project이고 캐시 디렉토리의 이름이 / Project / Cache 인 경우 / Project에서 하위 버전 속성을 설정해야합니다. 속성 이름은 "svn : ignore"여야하고 속성 값은 "Cache"여야합니다.

속성에 대한 자세한 내용은 Subversion 매뉴얼 의이 페이지를 참조하십시오 .


3

Jason의 대답이 트릭을 수행합니다. 그러나 svn : ignore를 "."로 설정하는 대신 캐시 디렉토리 에서 캐시 디렉토리가 항상 존재하지 않는 경우 상위 디렉토리의 svn : ignore 특성 에 "캐시"를 포함시킬 수 있습니다 . 여러 "throwaway"폴더에서이 작업을 수행합니다.


3

SVN이 무시할 디렉토리를 유지하려면 :

  1. 그러면 저장소에서 파일이 삭제되지만 SVN 제어하에 디렉토리를 유지합니다.

svn delete --keep-local 경로 / directory_to_keep / *

  1. 그런 다음 디렉토리 및 모든 내용을 무시하도록 설정하십시오.

svn propset svn : ignore "*"경로 / directory_to_keep


2

TortoiseSVN과 같은 SVN에 프론트 엔드를 사용하거나 IDE 통합을 사용하는 경우 동일한 메뉴에 커밋 / 추가 작업과 같은 무시 옵션이 있어야합니다.


1

svn : ignore 속성을 설정하십시오 . 대부분의 UI svn 도구에는 링크에서 명령 줄 토론뿐만 아니라이 작업을 수행 할 수있는 방법이 있습니다.


1

버전을 사용하고 있기 때문에 실제로는 정말 쉽습니다.

  • 체크 아웃 한 사본 찾아보기
  • 무시할 디렉토리를 클릭하십시오
  • "오른쪽의 무시 상자에서 편집을 클릭하십시오.
  • 모든 파일을 무시하려면 *. *를 입력하십시오 (또는 jpg 파일 등의 경우 * .jpg).

1

후행 슬래시도보십시오. images/*무시 설정 파일에 포함 해도 무시되지 않는 것으로 나타났습니다 ./images/. 내가 그것을 실행했을 때 svn status -u여전히 보였다 ? images. 그래서 방금 ignore 설정을 images슬래시가 아닌 just로 변경했습니다 . 상태 확인을 실행하여 지 웠습니다.


1

다음 방법 으로 Eclipse 로 해결되었습니다 .

우선, 폴더를 프로젝트와 동기화하십시오.

팀-> 동기화

다음보기 인 팀보기에서 SVN 서버에 커밋 할 수있는 모든 리소스를 볼 수 있습니다.

따라서 무시하려는 리소스의 리소스 폴더를 선택한 다음 다음을 사용하여 무시할 수 있습니다.

팀 ->에 추가 svn:ignore.

그런 다음 확인 창에서 첫 번째 옵션 인 "이름으로 무시"를 선택하십시오.

예를 들어, 대상 폴더와 해당 .class 리소스를 무시하려면 동기화하고 동기화보기에서 대상 폴더를 선택합니다. 그 후, 나는 선택할 것이다

팀-> 추가

svn:ignore그리고 나는 확인 창에서 첫 번째 옵션을 확인할 수 있습니다.


0

이 간단한 활동을 수행하는 방법을 찾기 위해 많은 시간을 잃은 후, 나는 적절한 설명을 찾기가 어렵다는 것을 게시하기로 결정했습니다.

먼저 샘플 구조를 보자

$ svn st? 프로젝트 / 트렁크 / 대상? 프로젝트 / 트렁크 /myfile.x

1 – 먼저 mycase vim export SVN_EDITOR = vim에서 편집기를 구성하십시오.

2 –“svn propedit svn : ignore project / trunk /”는 새 파일을 열고“target”파일 유형으로 파일과 하위 디렉토리를 추가 할 수 있습니다.

$ svn st? 프로젝트 / 트렁크 /myfile.x

감사.

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