SVN : 일부 디렉토리를 재귀 적으로 무시합니다.


106

트리의 깊이에 관계없이 이름이 지정된 디렉토리 builddistSVN에 들어가는 것을 원하지 않습니다 .

이게 가능해? 자식에 그냥 넣어

build
dist

.gitignore루트에서 재귀 적으로 무시합니다. svn으로 어떻게 수행합니까? 모든 부모 디렉토리에서 propset을 수행하라고 말하지 마십시오.


Subversion 1.8을 사용하는 경우 기본 솔루션에 대한 이 답변 을 확인하십시오 .
Frank Kusters

답변:


57

Subversion 1.8부터는 svn:global-ignores비슷 svn:ignore하지만 재귀 적으로 작동 하는 속성이 있습니다 (따라서 최상위 디렉토리에 설정하십시오)


3
약간 혼란 스럽 global-ignores습니다. ~/.subversion/config파일에 있지만 SVN 리포지토리의 디렉토리에 설정된 상속 가능한 svn:global-ignores 속성 도 svn:ignore있습니다. 이러한 다양한 옵션과 비교 방법에 대한 요약을 제공 할 수 있습니까? 어떻게 않는 --recursive플래그는 그들도 영향을 미칩니 까?
Dai

2
나는 내 자신의 연구를 수행 하고이 QA 답변에 내 결과를 발표했습니다. stackoverflow.com/a/86052/159145
Dai

[내가 시도했지만 실패했지만 obj여전히 폴더가 나타남] ( stackoverflow.com/questions/50960188/… ), 내가 살펴볼 수 있도록 도와 줄 수 있습니까?
Luke

"build / *"라고 말하고 모든 빌드 폴더 내에서 빌드 아래의 모든 것을 무시할 수 있습니까?
Johannes Schaub-litb

45

svn propset--recursive옵션으로 취 하므로 두 가지 단점이 있습니다.

  1. 전체 저장소 (또는 적어도 그 안에있는 모든 디렉토리)를 확인해야합니다.
  2. svn:ignore새 디렉토리를 추가 할 때마다 속성 을 설정해야 합니다.

42

이것을 할 수 없습니다. Subversion에는 svn:ignore(비재 귀적) 무시 메커니즘 과 global-ignores(저장소에 국한되지 않음 ) 두 가지 무시 메커니즘 만 있습니다 .


7
svn propset --recursive svn : ignore svn_ignore_rules. svn_ignore_rules 파일이 포함되는 곳이 규칙을 무시 - 한 줄에 하나씩
게오르그

3
'svn propset --recursive svn : ignore --file svn_ignore_rules.' SVN-1.7.6, 다른 재귀라는 이름의 파일을 무시하고 'svn_ignore_rules'와 나를 위해 [편집 : 아래의 코멘트에 'wytten'에 따라]
elbeardmorez

9
댓글 작성자에게 : 질문자가 말했듯이 "부모 디렉토리마다 propset을 수행하라고 말하지 마십시오 ...".
Kevin Reid

5
이제 Subversion 1.8에서 가능합니다
Squirrel

17

이것은 나를 위해 작동합니다.

 svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>

2
감사합니다. 잘 작동합니다. * .txt와 * .pdf를 모두 무시하는 유일한 방법은 이러한 패턴을 파일에 넣은 다음 'svn
propset

13

~ / .subversion / config 또는 / etc / subversion / config 파일에 추가하십시오.

[miscellany]
global-ignores = build dist

내가 할 수 있다면 차라리 repo별로하고 싶다
Paul Tarjan

1
저장소별로 쉽게 수행 할 수있는 방법이 있는지 확실하지 않은 경우 사전 커밋 후크가 특정 패턴을 거부 할 수 있지만 완전한 솔루션은 아닙니다. svn : ignore on each parent dir 작동하지만 재귀 적으로 작동하지는 않습니다. 다른 저장소에서 작업 할 때 구성 파일을 스크립트로 바꿀 수 있지만 이는 추가 단계입니다.
jspcal 2010 년

1
무엇합니까 빌드 DIST의 평균은?
IgorGanapolsky

9

버전 제어에서 디렉토리를 제거하여 빌드 및 디렉토리를 무시할 수 있습니다. 트릭은 --keep-local 옵션을 사용하여 디렉터리를 작업 복사본에 남겨 두는 것입니다. 예를 들면 :

svn rm dist --keep-local
svn ci -m'removed build directory from version control'

디렉토리는 더 이상 Subversion에 의해 추적되지 않지만 컴파일러 출력 등을 보관하기 위해 작업 복사본에 계속 남아 있습니다.

건배, 조


7

예를 들어 폴더 구조 :

Project/
Project/dist/

cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"

ignore 명령 전에 dist 내용을 svn 삭제하는 것이 좋습니다. 따라서 분기의 경우 dist가 비어 있습니다.

나를 위해 일했고 오늘 테스트했습니다. 여기에 조금 설명하는 페이지가 있습니다.


6

모든 저장소에서 이러한 파일을 모두 무시 global-ignores하려면 사용자 별 구성 파일에를 추가 할 수 있습니다 .

Unix 계열 시스템에서이 영역은 사용자의 홈 디렉토리에서 .subversion이라는 디렉토리로 나타납니다. Win32 시스템에서 Subversion은 일반적으로 사용자 프로필 디렉터리의 Application Data 영역 내에 Subversion이라는 폴더를 만듭니다.

구성 옵션 참조

안타깝게도이를 수행 할 수있는 저장소 별 옵션이 없습니다. 기본적으로 사용자 단위 또는 디렉토리 단위이므로 여러 개를 사용하는 svn:ignores것이 가장 성가신 일입니다.


1
내가 할 수 있다면 차라리 리포지토리별로하고 싶습니다
Paul Tarjan

오, 그럼 당신은 운이 없군요. @Kevin Reid가 말했듯이-디렉토리 또는 사용자별로 있습니다.
Blair Conrad

6

먼저 작업 복사본의 최상위 폴더로 이동하여 무시할 모든 패턴을 배치해야하는 파일 (예 : .svnignore)을 만들어야합니다 (예 : Android 프로젝트의 경우).

bin
gen
proguard
.classpath
.project
local.properties
Thumbs.db
*.apk
*.ap_
*.class
*.dex

그런 다음 다음 명령을 실행합니다 (작업 복사본의 최상위 폴더에 있어야합니다).

svn propset svn:ignore -R -F .svnignore .

이것은 아직 버전 관리가되지 않는 폴더와 파일에 대해서만 작동합니다. 버전 관리중인 폴더 (또는 파일)도 무시되기 시작하려면 다음 명령을 실행하여 버전 제어에서 제거하십시오.

svn rm --keep-local <path>

이 모든 것을 설명하는이 훌륭한 기사에서이 모든 것을 얻었습니다 : http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/


이것은 대단히 도움이되었습니다. 이것은 svn에서 자식과 같은 무시 동작을 얻는 가장 좋은 방법입니다. 매우 감사합니다.
조나단 윌슨

6

Subversion 1.8 이상에서는 현재 저장소에 대해 전역 무시를 설정할 수 있습니다.

svn propset svn:global-ignores build .
svn propset svn:global-ignores dist .

또한 .svnignore라는 폴더를 만들고 조건을 작성할 수 있습니다.

build
dist

한 줄에 하나의 조건을 기억하십시오. build / * 또는 dist / debug 설정은 헛된 것입니다. 그런 다음 다음 명령을 수행하십시오.

svn propset svn:global-ignores -F .svnignore .

완벽하게 작동합니다! 새로 체크 아웃 된 저장소에서 첫 번째 명령을 실행하십시오.
gaurav

3

파일을 만들고 무시 항목을 추가하십시오.

ingore 목록 :

file1 
directory1
file2
etc...

그런 다음 다음 명령을 적용하십시오.

for n in directory; do svn propset svn:ignore -F ignore-list $n; done

디렉토리는 디렉토리의 이름이며 디렉토리 / 하위 디렉토리뿐만 아니라 하위 분류 할 수 있습니다. 또는 *를 사용하여 현재 디렉토리를 기록하십시오.

이것은 bash를 쉘로 사용하고 있다고 가정합니다.


여기서 $ n 은 무엇입니까 ?
IgorGanapolsky

1
@igor Ganapolsky-$ n은 for 루프의 변수입니다. 루핑하는 시퀀스의 인덱스로 설정됩니다. 이 경우 위의 예에서 "directory"로 지정된 디렉토리입니다.
jncc99

3
svn propset --recursive svn:ignore svn_ignore_rules .

여기서 svn_ignore_rules는 무시 규칙을 포함하는 파일 (한 줄에 하나씩)입니다.

물론 repo에 새 디렉토리를 추가 할 때마다 다시 실행해야합니다.

svn_ignore_rules는 저장소에 대한 쓰기 액세스 권한이있는 다른 사용자가 재사용 할 수 있도록 저장소에 체크인 된 것으로 간주 할 수도 있습니다.


2
cd parent_dir # 재귀 적으로 무시할 폴더를 포함하는 디렉토리
svn propedit svn : ignore. # svn-prop.tmp가 열립니다.
폴더 등록
^ X
와이
commit -m 'targeted direcoty 무시'

절 도와 줬어요, 내가 설정 폴더 패턴에 문제가 있었다, SVN이 REPO에없는 폴더를 complianing했다 set EDITOR=notepad, svn propedit svn:ignore .... 잘 작동
Betlista

1

이 일반적인 문제에 대한 해결책이없는 것 같으므로 해결책을 공유하고 싶습니다. 다른 사람들이 이미 분명히 밝혔 듯이 svn:ignore속성을 사용할 수 있습니다 . 이것은 단일 디렉토리 (따라서 새 디렉토리에는 적용되지 않음)에 global-ignores적용 되거나 단일 사용자에게 적용되는 것을 사용할 수 있습니다 (저장소에 속하지 않음).

삶을 좀 더 쉽게 만들기 위해 reg 파일을 만들고 Settings.Svn.reg저장소의 루트에 추가했습니다. 이제 누구나이 regfile을 두 번 클릭하면 설정이 완료됩니다.

REGEDIT4

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"

SVN 저장소 내의 솔루션을 정말 고맙게 생각합니다. 누군가 알고 있다면 공유해 주시겠습니까?


0

한 가지 방법은 사전 또는 사후 커밋 후크에 어떤 종류의 검사를 추가하는 것이지만 repo 서버를 소유하지 않은 경우 간단하게 메모 할 수 있습니다.

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