Subversion에서 파일을 어떻게 무시합니까?


645

Subversion에서 파일을 어떻게 무시합니까?

또한 버전 제어가 아닌 파일을 어떻게 찾을 수 있습니까?


각 간단한 질문 (아마도 자식 사용자의 질문)이 많은 복잡한 답변을 의미하는 것을 보는 것은 재미 있습니다. 이런 일이 발생하면 Subversion 아기입니다.
Valerio Bozz

답변:


738

(이 답변은 SVN 1.8 및 1.9의 동작과 일치하도록 업데이트되었습니다)

두 가지 질문이 있습니다.

파일을 무시 된 것으로 표시 :

"무시 된 파일"이란 파일이 "버전 화되지 않은"경우에도 목록에 표시되지 않음을 의미합니다. SVN 클라이언트는 파일 시스템에 파일이 전혀 존재하지 않는 것으로 간주합니다.

무시 된 파일은 "파일 패턴"으로 지정됩니다. 파일 패턴의 구문과 형식은 SVN의 온라인 설명서 ( http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Subversion의 파일 패턴" )에 설명되어 있습니다.

Subversion은 버전 1.8 (2013 년 6 월) 이상에서 파일 패턴을 지정하는 3 가지 방법을 지원합니다. 다음은 예제가 포함 된 요약입니다.

1-런타임 구성 영역- global-ignores옵션 :

  • 이 설정 은 클라이언트 전용 설정이므로 global-ignores다른 사용자가 목록을 공유하지 않으며 컴퓨터에 체크 아웃 한 모든 리포지토리에 적용됩니다.
  • 이 설정은 런타임 구성 영역 파일에서 정의됩니다.
    • Windows (파일 기반)- C:\Users\{you}\AppData\Roaming\Subversion\config
    • 윈도우 (레지스트리 기반) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores모두 HKLMHKCU.
    • 리눅스 / 유닉스- ~/.subversion/config

2- svn:ignore특성은 파일이 아닌 디렉토리에 설정됩니다.

  • 이것은 repo 내에 저장되므로 다른 사용자는 동일한 무시 파일을 갖게됩니다. .gitignore작동 방식과 유사 합니다.
  • svn:ignore디렉토리에 적용되며 비 재귀 적이거나 상속됩니다. 파일 패턴과 일치하는 상위 디렉토리의 모든 파일 또는 즉각적인 서브 디렉토리는 제외됩니다.
  • SVN 1.8은 "상속 된 속성"이라는 개념을 추가하지만, svn:ignore즉시 그 자체가 아닌 하위 디렉토리 에서는 속성 자체가 무시됩니다.

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    따라서 ./subdirectory/ignoreThis" ignoreThis.txt"가 .리포지토리 루트 에 적용 되더라도 파일 은 무시되지 않습니다 .

  • 따라서 무시 목록을 재귀 적으로 적용하려면을 사용해야합니다 svn propset svn:ignore <filePattern> . --recursive.

    • 모든 서브 디렉토리에 특성 사본이 작성됩니다.
    • <filePattern>하위 디렉토리에서 값이 다른 경우 하위 값이 상위를 완전히 대체하므로 "추가"효과가 없습니다.
    • 따라서 <filePattern>root .에서를 변경 --recursive하면 하위 및 하위 디렉토리에서 덮어 쓰도록 변경해야합니다 .
  • 명령 줄 구문은 직관적이지 않습니다.

    • svn ignore pathToFileToIgnore.txtSVN의 무시 기능이 작동하는 방식이 아닌 것과 같은 것을 입력하여 SVN의 파일을 무시한다고 가정했습니다 .

3- svn:global-ignores재산. SVN 1.8 필요 (2013 년 6 월) :

  • 이것은 svn:ignoreSVN 1.8의 "상속 된 속성"기능을 사용한다는 점을 제외하고 와 비슷 합니다.
  • 와 비교할 svn:ignore때 파일 패턴은 모든 하위 디렉토리 (직접 하위 노드가 아닌)에 자동으로 적용됩니다.
    • 설정 불필요이 수단 svn:global-ignores--recursive상속으로, 플래그은 상속하고 같은 파일 패턴이 자동으로 적용됩니다 무시합니다.
  • 이전 예제와 동일한 명령 세트를 실행하지만 svn:global-ignores대신 사용

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

TortoiseSVN 사용자의 경우 :

TortoiseSVN의 용어 (Windows 탐색기 메뉴 시스템에 사용됨)가 처음에 오도 되었기 때문에이 전체적인 배열이 혼란 스러웠습니다. 무시 메뉴의 "재귀 적으로 추가", "추가 *"및 "추가"의 중요성을 확신 할 수 없었습니다. 옵션. 이 게시물이 무시 기능이 SVN 속성 기능과 어떻게 관련되는지 설명하기를 바랍니다. 즉, 명령 줄을 사용하여 무시 된 파일을 설정하면 GUI를 사용하는 대신 파일이 작동하는 방식을 느끼고 명령 줄에 익숙한 후에 GUI를 사용하여 속성을 조작하는 것이 좋습니다.

무시되는 파일 나열 :

이 명령 svn status은 무시 된 파일 (즉, RGA global-ignores패턴과 일치하거나 직계 상위 디렉토리의 svn:ignore패턴 또는 조상 디렉토리의 svn:global-ignores패턴 과 일치하는 파일)을 숨 깁니다 .

--no-ignore해당 파일을 보려면 옵션을 사용하십시오 . 무시 된 파일의 상태는 "I"로 시작하는 행만 표시 I하도록 출력을 파이프합니다 grep.

명령은 다음과 같습니다.

svn status --no-ignore | grep "^I"

예를 들면 다음과 같습니다.

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

따다!


6
무시 된 파일을 찾으려면 : svn status -u -v --no-ignore | grep "^ I"| awk "{print \ $ 2}"
Christian Madsen

3
./FolderA/FolderB/FileToIgnore 파일을 무시하려면. 폴더 : svn propset svn : ignore "FileToIgnore"FolderA / FolderB /
jnj

8
ssh'ing svn propedit svn:ignore .이고 텍스트 편집기가 구성되지 않은 경우 svn : E205007 : 환경 변수 SVN_EDITOR, VISUAL 또는 EDITOR가 설정되지 않았으며 'editor-cmd'런타임 구성 옵션이 설정되지 않았다는 오류 메시지가 표시 됩니다. 에디터를 여는 대신에 찾았 습니다. 따라서 --editor-cmd nano를 다음 과 같이 지정 하십시오.svn propedit svn:ignore . --editor-cmd nano
Jonathan Morales Vélez

12
"--recursive"인수를 사용하여 모든 하위 폴더에서 특정 파일 이름을 가진 파일을 무시할 수도 있습니다. 예 : svn propset svn : ignore "* .jpg". --recursive
Templar

2
awk에 대한 더 간단한 대안은 grep입니다.svn status | grep '^?'
Johnride

91

버전 제어 파일에없는 목록을 작성하려면 다음 명령을 사용하십시오.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

그런 다음 파일을 편집하여 실제로 무시하려는 파일 만 남겨 두십시오 . 그런 다음이 파일을 사용하여 파일에 나열된 파일을 무시하십시오.

svn propset svn:ignore -F ignoring.txt .

줄 끝의 점에 유의하십시오. 속성이 현재 디렉토리에서 설정되고 있음을 SVN에 알립니다.

파일을 삭제하십시오.

rm ignoring.txt

마지막으로 커밋

svn ci --message "ignoring some files"

다음을 통해 어떤 파일이 무시되는지 확인할 수 있습니다.

svn proplist -v

2
좋은. 사소한 개선은 svn status | awk "/^?/ {print \$2}" > ignoring.txt입니다.
Dirk Eddelbuettel

4
왜 파일을 삭제합니까? 다시 작성 / 추가 / 제거해야 할 경우 repo에 보관하십시오.
tgkprog

이 솔루션은 하위 디렉토리의 파일을 무시하지 않습니다 (ignoring.txt에 표시 되더라도).
shaneb

기존의 무시를 유지합니까? 그렇지 않은 경우 하나의 명령으로 수행하는 방법 (예 : --no-ignores 및 행 앞에 I을 유지)?
a1an

이것은 현재 무시를 덮어 씁니다 svn pg svn:ignore . >> ignore.txt. 현재 무시를 파일에 추가하는 첫 번째 명령 후에 시도 하십시오.
ulitosCoder 2016 년

55

접근 방식과 같은 .gitignore

.gitignore와 같은 파일이나 디렉토리는 무시해도됩니다. 무시하려는 디렉토리 / 파일 목록의 텍스트 파일을 만들고 아래 코드를 실행하십시오.

svn propset svn:ignore -F ignorelist.txt .

또는 텍스트 파일을 사용하지 않으려면 다음과 같이하십시오.

svn propset svn:ignore "first
 second
 third" .

출처 : Karsten 's Blog-명령 줄에서 여러 파일에 대해 svn : ignore 설정


1
나중에 무시 파일을 수정하는 경우 svn:ignore명령 을 다시 실행 해야합니다 ( stackoverflow.com/a/58380306/189518 참조 )
Sensei James

50

TortoiseSVN 을 사용 하는 경우 파일을 마우스 오른쪽 단추로 클릭 한 다음 TortoiseSVN / 추가를 선택 하여 무시 목록 을 선택 하십시오 . 파일 / 와일드 카드가 svn:ignore속성에 추가 됩니다.

svn:ignore파일을 체크인 할 때 확인되고 일치하는 파일은 무시됩니다. Visual Studio .NET 프로젝트에 대해 다음과 같은 무시 목록이 있습니다.

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

TortoiseSVN / Properties 의 상황에 맞는 메뉴에서이 목록을 찾을 수 있습니다 .


26

아무도 언급하지 않은 것처럼 ...

svn propedit svn:ignore .

그런 다음 파일의 내용을 편집하여 무시할 패턴을 지정하고 편집기를 종료하면 모든 작업이 완료됩니다.


3
이 답변은 유용했습니다. 제 경우에는 "."를 변경해야했습니다. 무시하고 파일 패턴을 지정하려는 파일의 하위 디렉토리에. 또한, 처음으로, 나는 (내가 맥에있어)이 실행 필요성 : 수출 SVN_EDITOR = "나노"
엘리야 로프 그렌에게

22

.svnignore Example for Java 기사를 찾았습니다 .

예 : Ruby on Rails의 .svnignore,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

그리고 나서:

svn propset svn:ignore -F .svnignore .

.gitignore의 예. 당신은 당신의 .svnignore에 사용할 수 있습니다

https://github.com/github/gitignore


1
나는 u가 말했듯이 ...하지만 svn status를 실행할 때. 여전히 "?"와 함께 무시 된 파일을 보여줍니다.
Harshit Gupta

나는 svn 상태를 확인하지 않았지만 svn add *를 사용하고 그 svn commit 후에 파일 무시는 커밋되지 않습니다.
d.danailov

"a.txt"파일이 이미 버전 제어 상태 인 경우 "svn propset svn : ignore -F .svnignore a.txt"와 같은 명령으로 무시됩니다. 맞습니까?
errakeshpd

.svnignore 파일에 "a.txt"를 추가하면 확실하지 않지만 명령은 올바르게 수행되어야합니다.
d.danailov

10

propedit를 사용할 때는 파일이 무시 목록에서 제외되도록 후행 공백이 없어야합니다.

Linux에서 tab-autocomplete를 사용하여 시작할 파일을 만들면 자동으로 삽입됩니다.

svn propset svn:ignore 'file1
file2' .

6
이것은 bash와 같은 일부 쉘에서만 작동합니다. propset 명령을 다시 발행하면 이전 패턴 세트를 겹쳐 씁니다.
JA Faucett

그래서 file1file2 는 별도의 줄에 있어야합니까?
IgorGanapolsky

8

또 다른 해결책은 다음과 같습니다.

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

또는 한 줄씩

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

그것이하는 일 :

  1. svn에서 상태 파일을 가져옵니다.
  2. ? 로 모든 파일을 저장합니다 . "svnignore.txt"파일로
  3. 이미 무시 된 파일을 가져 와서 "svnignore.txt"파일에 추가합니다
  4. "svnignore.txt"의 파일을 무시하도록 svn에 지시합니다.
  5. 파일을 제거합니다

8

또한 Tortoise SVN을 사용하면 다음을 수행 할 수 있습니다.

  1. 상황에 맞는 메뉴에서 "TortoiseSVN"을 선택한 다음 "속성"을 선택하십시오.
  2. 나타난 창에서 "새로 만들기"를 클릭 한 다음 "고급"을 클릭하십시오.
  3. "속성 이름"의 반대쪽에 나타나는 창에서 "속성 값"유형의 원하는 파일 이름 또는 폴더 이름 또는 파일 마스크 (내 경우에는 "* / target")의 반대쪽에 "svn : ignore"를 선택하거나 입력하십시오. "적용"을 클릭하십시오. 재귀 적으로 속성 "
  4. 확인. 확인.
  5. 범하다

6
  1. cd ~ / .subversion
  2. 설정 열기
  3. 'global-ignores'와 같은 줄을 찾으십시오.
  4. 다음과 같이 파일 유형을 무시하십시오. global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store node_modules 출력

감사합니다. 귀하의 답변은 config파일 을 언급 한 유일한 답변입니다 .
Henrique de Sousa

이 답변은 @HenriquedeSousa stackoverflow.com/a/86052/7724에 언급되어 있으며 파일을 무시하는 로컬 클라이언트 전용 방법이라고 설명합니다.
bzlm

5

더 읽기 쉬운 bkbilly의 답변 :

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

그것이하는 일 :

  1. svn에서 상태 파일을 가져옵니다.
  2. ? 로 모든 파일을 저장합니다 . "svnignore.txt"파일로
  3. 이미 무시 된 파일을 가져 와서 "svnignore.txt"파일에 추가합니다
  4. "svnignore.txt"의 파일을 무시하도록 svn에 지시합니다.
  5. 파일을 제거합니다

bkbilly의 답변이 마음에 들지만이 버전은 각 행을 더 읽기 쉽게 만들고 첫 번째 줄은 항상 임시 파일을 만들고 동일한 동일한 임시 파일은 항상 무시 목록에 들어가기 때문에 테스트에서 아무것도하지 않은 & &를 제거합니다.
LivingDust

이 경우 편집 제안이 더 적합 할 것입니다. 노력을 감사합니다!
Jim

편집을 제안 할만한 평판이 아직 충분하지 않았습니다. 그러나 나는 좋은 프로토콜을 망치고 싶지 않습니다. 새로운 답변 등을 게시하는 것보다 제안하고 수정하는 것이 더 나은지에 대한 지침에 대한 간단한 README가 있습니까?
LivingDust

1
귀하의 답변이 1 년 반 전에 게시 된 답변과 정확히 동일한 경우, 매우 간단합니다. 심지어 " 무엇을 하는가 "설명 도 복사했습니다 .
Jim

3

SVN의 구성 파일에서 전역 무시 패턴을 설정할 수도 있습니다.


1
특정 저장소에 대해 무시 패턴을 설정할 수 있습니까?
David Doria

3

svn status SVN에없는 파일과 변경된 내용을 알려줍니다.

상기 봐 SVN의 특성 (가) 속성을 무시합니다.

SVN의 모든 것에는 Red Book 이 필요합니다.



2

작업 사본에서 svn status 명령을 사용하여 파일의 상태를 표시하십시오. 아직 버전 제어가되지 않고 무시되지 않은 파일 옆에 물음표가 표시됩니다.

파일을 무시하려면 svn : ignore 속성을 편집해야합니다 . http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore 에서 svnbook의 버전없는 항목 무시 장을 읽으십시오 . html . 이 책은 svn status 사용에 대한 자세한 내용도 설명합니다.


2

SVN ignore은 TortoiseSVN에서 관리하기 쉽습니다. TortoiseSVN을 열고 파일 메뉴를 마우스 오른쪽 버튼으로 클릭 한 다음 추가를 선택하여 무시 목록을 선택하십시오.

svn:ignore속성에 파일이 추가 됩니다. 파일을 체크인하면 해당 파일과 일치하는 파일은 svn:ignore무시되고 커밋되지 않습니다.

Visual Studio 프로젝트에서 무시할 다음 파일을 추가했습니다.

bin obj
*.exe
*.dll
*.pdb
*.suo

이 방법을 사용하여 Comparetrap의 SVN에서 소스 코드를 관리하고 있습니다.


2

나를 위해 일한 것 :

Subversion에서 파일을 어떻게 무시합니까?
1. 파일 탐색기에서 SVN 프로젝트 폴더 이름을 마우스 오른쪽 버튼으로 클릭하십시오.
2. "SVN Commit ..."을 클릭하십시오
. 3. "commit"창이 나타납니다.
4. 무시하려는 폴더 / 파일을 마우스 오른쪽 버튼으로 클릭하십시오.
5. Add를 클릭하여 목록을 무시합니다
6. 폴더 / 파일을 선택합니다
7. "속성 변경"을 SVN에 커밋

또한 버전 관리를받지 않는 파일은 어떻게 찾습니까?
위의 3 단계 후에 "버전없는 파일 표시"를 클릭하십시오.


0
  1. JetBrains 제품 (예 : Pycharm)을 사용하십시오
  2. 다음 상단 도구 모음 또는 사용 단축키 'Ctrl + K'의 '커밋'버튼을 클릭 screenshot_toolbar
  3. 커밋 인터페이스에서 다음과 같이 원하지 않는 파일을 다른 변경 목록으로 이동하십시오. screenshot_commit_change
  4. 다음에 기본 변경 목록 만 커밋 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.