SVN : 파일을 "커밋하지 않음"으로 표시하는 방법이 있습니까?


153

TortoiseSVN을 사용하면 파일을 커밋 할 때 변경 목록으로 이동하여 전체 트리를 커밋 할 때 해당 파일의 변경 사항이 커밋되지 않습니다.

svn 명령 줄 도구를 사용하여 이와 같은 작업을 수행 할 수있는 방법이 있습니까?

편집 :을 사용하는 제안에 감사드립니다 svn:ignore.하지만 내가 찾고있는 것은 아닙니다.

svn:ignoresvn add& 같은 것들에 영향을줍니다 svn import. 무시할 파일 이름 패턴 목록을 제공합니다.

이미 소스 제어를 받고있는 파일이 있지만 나중에 전체 소스 트리를 커밋 할 때 커밋하지 않으려는 파일을 임시로 변경하고 싶습니다. 다른 많은 변경 작업을하고 있으며 트리를 커밋하기 전에 해당 파일을 되돌 리라고 알려주는 메모를 모니터에 붙일 수 있지만 svn이 해당 파일을 자동으로 건너 뛸 수 있다면 좋을 것입니다.


1
개인 브랜치 및 스위치 상태를 사용하는 방법이 있습니다. [이 주제에 관한 나의 다른 포스트를 참조하십시오.] [1] [1] : stackoverflow.com/questions/862950/…
ptitpion

답변:


120

Subversion에는 2016 년 2 월 / 버전 1.9부터 내장 된 "커밋하지 않음"/ "커밋 무시"기능이 없습니다. 이 답변은 비 이상적인 명령 줄 해결 방법입니다.

OP 상태에 따라 TortoiseSVN에는 "커밋 무시"라는 변경 목록이 내장되어 있으며 커밋에서 자동으로 제외됩니다. 커맨드 라인 클라이언트는 이것을 가지고 있지 않으므로, 동일한 행동을하기 위해 여러 변경 목록을 사용해야합니다 (주의 사항) :

  • 당신이하고 싶은 일을위한 것 [일]
  • 무시하고 싶은 것들에 대한 것 [커밋 무시]

TortoiseSVN의 선례가 있기 때문에 커밋하고 싶지 않은 파일에 대해서는 예제에서 "커밋 무시"를 사용합니다. 내가하는 파일에 "작업"을 사용하지만 원하는 이름을 선택할 수 있습니다.

먼저 모든 파일을 "work"라는 변경 목록에 추가하십시오. 작업 복사본의 루트에서 실행해야합니다.

svn cl work . -R

그러면 작업 복사본의 모든 파일이 "work"라는 변경 목록에 재귀 적으로 추가됩니다. 새로운 파일이 작업 복사본에 추가 될 때 새 파일을 구체적으로 추가해야합니다. 그렇지 않으면 포함되지 않습니다. 둘째, 다시 실행해야 할 경우 모든 "커밋 무시"파일을 다시 추가해야합니다. 이상적이지 않습니다-다른 사람들이했던 것처럼 파일에서 자신의 '무시'목록을 유지하기 시작할 수 있습니다.

그런 다음 제외하려는 파일의 경우 :

svn cl ignore-on-commit path\to\file-to-ignore

파일은 하나의 변경 목록에만있을 수 있으므로 이전 "작업"추가 후에이 추가를 실행하면 "작업"변경 목록에서 무시하려는 파일이 제거되고 "커밋시 무시"변경 목록에 저장됩니다.

수정 한 파일을 커밋 할 준비가되면 커밋에 "--cl work"를 추가하면됩니다.

svn commit --cl work -m "message"

내 컴퓨터에서 간단한 예를 보여줍니다.

D:\workspace\trunk>svn cl work . -R
Skipped '.'
Skipped 'src'
Skipped 'src\conf'
A [work] src\conf\db.properties
Skipped 'src\java'
Skipped 'src\java\com'
Skipped 'src\java\com\corp'
Skipped 'src\java\com\corp\sample'
A [work] src\java\com\corp\sample\Main.java
Skipped 'src\java\com\corp\sample\controller'
A [work] src\java\com\corp\sample\controller\Controller.java
Skipped 'src\java\com\corp\sample\model'
A [work] src\java\com\corp\sample\model\Model.java
Skipped 'src\java\com\corp\sample\view'
A [work] src\java\com\corp\sample\view\View.java
Skipped 'src\resource'
A [work] src\resource\icon.ico
Skipped 'src\test'

D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties
D [work] src\conf\db.properties
A [ignore-on-commit] src\conf\db.properties

D:\workspace\trunk>svn status

--- Changelist 'work':
        src\java\com\corp\sample\Main.java
        src\java\com\corp\sample\controller\Controller.java
        src\java\com\corp\sample\model\Model.java
M       src\java\com\corp\sample\view\View.java
        src\resource\icon.ico

--- Changelist 'ignore-on-commit':
M       src\conf\db.properties

D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue"
Sending        src\java\com\corp\sample\view\View.java
Transmitting file data .done
Committing transaction...
Committed revision 9.

대안은 단순히 '작업'변경 목록에 커밋하려는 모든 파일을 추가하고 무시 목록을 유지 관리하지는 않지만 많은 작업입니다. 실제로 유일한 단순하고 이상적인 솔루션은 이것이 SVN 자체에서 구현되는 경우입니다. Subversion 이슈 트래커 인 SVN-2858 에서는 이것에 대한 오래된 이슈 가 향후에 변경 될 경우에 발생합니다.


1
당신이 언급 한 명령으로 두 개의 파일을 추가했습니다. $svn st --- Changelist 'ignore-on-commit': M database.php M config.php 그러나 여전히 커밋시 repo로 전송되었습니다. 내가 뭘 잘못했는지 알아?
Attila Fulop

7
변경 목록 'commit-on-commit'에 파일을 추가한다고해서 파일이 커밋되는 것을 막을 수는 없습니다. TortoiseSVN (Windows GUI 클라이언트)은 "커밋 무시"에 대해 작성되었지만 명령 행 svn은 그렇지 않습니다. 원래 답변에서 내가 제안한 유일한 제안은 변경 목록에 커밋하려는 파일을 추가하고 커밋하도록 알려주는 것입니다.
Joshua McKinnon

7
커밋시 무시는 확실하게 Tortoise 예약 목록입니다. 기본적으로 GUI에서 항목을 확인하지 못하기 때문에 Tortoise GUI 전용 기능입니다. GUI를 사용하는 경우 명령 줄을 사용하여 목록에 추가 할 필요는 없습니다. 커밋 목록 항목의 컨텍스트 메뉴 만 있고 맨 아래에는 변경 목록으로 이동할 수 있으며 커밋시 무시가 이미 정의되어 있습니다. tortoisesvn.net/docs/release/TortoiseSVN_en/…
tjmoore

이것은 잭을하지 않았다. 그것은 모든 것을 커밋했습니다.
ahnbizcad

작동하지 않는이 질문은 GUI가 아닌 명령 줄 솔루션에 대해 구체적으로 질문했습니다.
riv

26

나는 일관되게도이 상황에서 자신을 발견했습니다 및 변경 목록은 나를 위해 작동하지 않습니다 - 나는 것을 파일에 대한 간단한 목록을 만들고 싶어 하지 않는 커밋이 아닌 내가 그 파일의 거대한 목록을 유지 관리 할 희망을 커밋하기!

나는 리눅스 커맨드 라인에서 일한다. 그래서 나의 해결책은 다음과 같이 스크립트 / usr / bin / svnn (예, 두 개의 'n!')을 만드는 것이다.

#! /bin/bash
DIR=/home/mike/dev/trunk

IGNORE_FILES="\
        foo/pom.xml \
        foo/src/gwt/App.gwt.xml \
        foo/src/main/java/gwt/Common.gwt.xml \
        foo/src/main/resources/context/datasource/local.xml \
        foo/src/main/resources/context/environment/local.xml"

for i in $IGNORE_FILES; do mv $DIR/$i $DIR/"$i"_; done;

svn "$@"

for i in $IGNORE_FILES; do mv $DIR/"$i"_ $DIR/$i; done;

분명히 이것은 내 상황에 맞게 조정되었지만 개발자 설정에 맞게 DIR 및 IGNORE_FILES를 변경하십시오. 다음을 사용하여 스크립트를 실행 파일로 변경하십시오.

sudo chmod +x /usr/bin/svnn

.. 그런 다음 IGNORE_FILES 목록의 파일에 대한 로컬 변경 사항을 확인할 필요없이 "svn"대신 "svnn"을 사용하여 Subversion을 실행하십시오. 이게 도움이 되길 바란다!


마지막으로이 답변은 실제로 옳습니다. 몇 가지 도구를 작성해야합니다. svnn ignore configs/*와일드 카드, 종소리 및 휘파람과 같은 동적 옵션을 원하기 때문에 이것은 실제로 불완전 합니다. 나는 그런 것을 직접 쓰고 여기로 돌아온 것 같아요!
Tomasz Gandor

대단해! 더 좋은 방법은 svn-> svnn의 .bashrc에 별칭을 생성하는 것입니다. 더 나은 방법은 명령 내에서 무시할 파일을 지정하는 대신 git처럼 동작 할 수 있다는 것입니다. 폴더 내의 .ignore 파일을 확인하고 패턴과 일치하는 모든 파일을 무시합니다.
Tarek

대신에 데의 입력을 재 학습 svnn을 호출, 고려 svn와 같은 당신의 PATH의 시작이 될 수있는 일이 스크립트를 배치 ${HOME}/bin. 스크립트 자체에서을 호출 /usr/bin/svn합니다.
Joost

17

저장소에서 파일을 무시하는 방법이 없다고 생각합니다. 우리는 종종 web.config 및 기타 구성 파일을 사용합니다.

완벽하지는 않지만 가장 자주보고 사용하는 솔루션은 .default 파일과 로컬 복사본을 만드는 nant 작업을 갖는 것입니다.

예를 들어, 저장소 web.config.default에는 기본값 이있는 파일 이 있습니다. 그런 다음 모든 web.config.default파일의 이름을 바꾸고 web.config로컬 값으로 사용자 지정할 수 있는 nant 작업을 만듭니다 . 이 작업은 새 작업 복사본을 검색하거나 빌드를 실행할 때 호출해야합니다.

또한 web.config리포지토리에 커밋되지 않도록 생성 된 파일 을 무시해야 합니다.


8

변경했지만 커밋하지 않으려는 파일을 필터링하는 옵션을 제공 할 수있는 changelists를 확인하십시오 . SVN은 사용자가 지시하지 않는 한 파일을 자동으로 건너 뛰지 않습니다.이 파일이 다른 파일과 다르다는 것을 알려주는 방법은 변경 목록에 넣는 것입니다.

더 많은 작업이 필요하며 변경 목록을 작업 사본에만 적용 할 수 있습니다 ( '업데이트에 절대 업데이트'속성을 적용 할 수없는 경우 발생할 수있는 혼란을 상상해보십시오!).


1
그러나 이것이 바로 우리가 원하는 것입니다. 예를 들어, 시스템 기본값 대신 defaultUserId = yourId를 설정해야하는 소스 파일입니다.
orbfish

4

나는이 쓰레드에 와서 단지 일부 파일을 "원자"커밋하는 방법을 찾고 커밋시 일부 파일을 무시하는 대신 다른 방법으로 가서 원하는 파일 만 커밋했다.

svn ci filename1 filename2

아마 누군가에게 도움이 될 것입니다.


귀하의 답변은이 스레드에서 하나의 적절한 제안입니다. svn ci에 대한 별칭 svn commit입니다. 커밋 명령을 사용하면 지정된 파일을 커밋 할 수 있습니다.
oxfn

3

여러분 방금 해결책을 찾았습니다. TortoiseSVN이 원하는 방식으로 작동한다는 것을 감안할 때 Linux에서 와인을 실행하려고 시도했습니다. 놀랍게도 작동합니다! 당신이해야 할 일은 :

  1. "svn changelist 'ignore-on-commit'"을 실행하여 커밋을 건너 뛰려는 파일을 추가하십시오.
  2. TortoiseSVN을 사용하여 커밋 : "~ / .wine / drive_c / Program \ Files / TortoiseSVN / bin / TortoiseProc.exe / command : commit / path : '
  3. 제외 파일이있을 것입니다 선택하지 않은 다른 수정 된 파일이 선택 될 때, 기본적으로 커밋. 이것은 Windows에서와 동일합니다. 즐겨!

(CLI로 파일을 제외해야하는 이유는 해당 메뉴 항목을 찾을 수 없기 때문입니다. 이유는 확실하지 않습니다. 어떤 방식 으로든 작동합니다!)


2

충돌하는 파일은 커밋 할 수 없습니다. 이를 활용하여 개인 변경 사항을 저장소에서 유지하십시오. 적은 수의 파일에 가장 적합합니다.

에 대한 충돌을 일으키기 위해 a-file작업 사본 (WC) a-file에 저장소의 최신 정보가 없으며 WC 의 저장소에 a-file변경 사항과 동일한 위치에있는 변경 사항이 있습니다 (업데이트하지 않은 변경 사항) 아직까지). 위의 조건을 기다리지 않으려면 다음 a-file과 같이 충돌을 일으킬 수 있습니다
. 작업 사본 1 (WC1) 에서 "여기에 충돌을 일으키십시오"a-file 와 같은 텍스트를 맨 위에 추가 하십시오 . 리포지토리를 중단하지 않도록 필요한 구문을 사용하십시오. a-fileWC1에서 커밋합니다 . WC2에서 "i want a conflict"a-file 와 같이 다른 텍스트 줄을 위에 추가하십시오 . WC2에서 업데이트하면 이제 파일이 충돌합니다.


1

대신 svn commit필요한 모든 파일에서 실행 되고 필요없는 파일에서 실행되는 도우미 bash 스크립트를 작성합니다 . 이 방법으로 훨씬 더 많은 제어권을 갖습니다.

예를 들어, 한 줄로 확장명이 .h있고 .cpp변경 한 (그리고 충돌을 일으키지 않는) 모든 파일을 커밋 할 수 있습니다 .

svn commit -m "" `svn status | grep "^M.*[h|cpp]$" | awk '{print $2}' | tr "\\n" " "`

[h|cpp]부품 확장을 변경 / 추가합니다 . -m ""필요한 경우 따옴표 사이에 로그 메시지를 추가하십시오 .


1

제안 된 아이디어 중 일부는 다음과 같이 구현 될 수 있습니다.

PowerShell의 Windows에서

기본 목록에 모두 추가하십시오.

dir -Recurse | ? { -not $_.PSIsContainer } | % { svn cl default $_.FullName }

목록을 무시하려면 추가하십시오.

 dir file1 ... filN  % { $_.FullName } > ignore-on-commit
 cat .\ignore-on-commit | % { svn cl ignore-on-commit $_ }
 svn add ignore-on-commit

이제 svn ci --changelist default매번 지정할 필요가 없도록 별명 을 지정할 수 있습니다. 추가 이점은 커밋시 무시 목록 (원하는 경우)을 저장소에 저장할 수 있다는 것입니다.

나는 지속적으로 재생되지만 실제로는 거의 직접 변경되지 않는 일부 파일에 대해이 작업을 수행합니다. 예를 들어 특정 자리 표시 자의 구성 파일에 개정 번호를 추가하여 커밋마다 파일이 변경되지만 수동 변경은 거의 없습니다.


1

SVN에 내장되기를 기다리는 데 지쳤습니다. 나는 커밋시 무시와 함께 tortoiseSVN을 사용하고 있었지만 명령 줄에서 억제 할 수없는 사용자 대화 상자가 나타나고 빌드 스크립트를 실행하고 차를 마시면 싫어합니다. 나는 그것이 사용자 입력의 10 %를 기다리고 있음을 발견하기 위해 돌아왔다.

다음은 변경 목록에없는 파일 만 커밋하는 Windows powershell 스크립트입니다.

# get list of changed files into targets
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad
# select the nodes that aren't in a changelist
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path};
# create a temp file of targets
$fileListPath =  [IO.Path]::GetTempFileName();
$fileList | out-file $fileListPath -Encoding ASCII
# do the commit
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file
Remove-Item $filelistPath

1

user88044의 스크립트 업데이트

아이디어는 커밋하지 않는 변경 목록의 파일을 푸시하고 사악한 스크립트를 실행하는 것입니다.

스크립트는 명령에서 do-not-commit 파일을 추출합니다. svn status --changelist 'do-not-commit'

#! / bin / bash DIR = "$ (pwd)"

IGNORE_FILES = "$ (svn status --changelist 'do-not-commit'| tail -n +3 | grep -oE '[^] + $')"

$ IGNORE_FILES에서 i의 경우; mv $ DIR / $ i $ DIR / "$ i"_; 끝난;

svn "$ @";

$ IGNORE_FILES에서 i의 경우; mv $ DIR / "$ i"_ $ DIR / $ i; 끝난;

스크립트는 / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)에 있습니다.

svnn 상태, svnn 커밋 등


1

TortoiseSVN을 사용하여 "커밋시 무시"변경 목록을 직접 구성 할 수 있습니다. 다른 모든 파일을 포함하여 다른 변경 목록을 구성 할 필요가 없습니다.

1) "SVN Commit ..."을 클릭하십시오. (변경 목록에 대한 그래픽 메뉴를 찾기위한 방법은 커밋하지 않습니다.) 2) 목록에서 제외 할 파일을 마우스 오른쪽 버튼으로 클릭하십시오. 3) 메뉴 : 변경 목록으로 이동> 커밋시 무시

다음에 SVN 커밋을 수행 할 때 ... 파일은 커밋 무시-카테고리 아래의 목록 끝에서 확인되지 않은 상태로 나타납니다.

테스트 : TortoiseSVN 1.8.7, 빌드 25475-64 비트, 2014/05/05 20:52:12, Subversion 1.8.9, -release


1
youps, 방금 tjmoore의 의견을 보았습니다. 이미 tortoiseSVN 사용자에게 좋은 정보를 제공합니다 ... no tortoisesvn.net/docs/release/TortoiseSVN_en/…
luney

이것은 1.9에서 깨졌습니까?
Jake Hm

1

이것은 게임에 늦었지만이 문제에 대해 가장 멋진 명령 줄 명령을 찾았습니다. bash를 사용하여 완료했습니다. 즐겨.

svn status | grep -v excluding | sed 's/^A */"/g; s/$/"/g' | tr '\n' ' ' | xargs svn commit -m "My Message"

자, 여기 명령에 대한 설명이 있습니다. 사용 사례에 따라 일부 사항을 변경해야합니다.

svn status

모든 파일 목록을 얻습니다. 모두 상태 문자 (?,!, A 등)로 시작합니다. 각각 자체 라인에 있습니다

grep -v excluding

grep을 사용하여 목록을 필터링합니다. 일반적으로 (포함) 또는 -v 플래그 (제외)와 함께 사용할 수 있습니다. 이 경우 제외 할 단어 "제외"를 사용하여 제외하는 데 사용됩니다.

sed 's/^. */"/g; s/$/"/g'

이제 각 줄의 시작 부분에서 상태 문자와 공백을 제거한 다음 sed를 사용하여 각 줄을 인용하십시오. 내 파일 이름 중 일부에는 공백이 있으므로 인용 부호가 있습니다.

tr '\n' ' '

tr을 사용하여 모든 줄 바꿈을 공백으로 바꿉니다. 이제 커밋 할 파일의 전체 목록이 한 줄에 있습니다.

xargs svn commit -m "My Message"

마지막으로 xargs를 사용하여 메시지와 함께 commit 명령을 실행합니다. 커밋을 수행하고 인용 된 파일 목록을 마지막 인수로 삭제합니다.

결과적으로 모든 것이 궁극적으로 내가 원하는 방식으로 작동합니다. 나는 아직도 이런 빌어 먹을 농구를 뛰어 넘는 것에 대해 svn을 증오하지만, 이것과 함께 살 수 있습니다. 나는 추측한다.


0

내가 똑같은 문제에 직면하고 인터넷 검색 결과가 나에게 아무것도주지 않았으므로 해결 방법을 찾았습니다. 여기 내가 한 일이 나를 위해 일하는 것처럼 보이지만 이전 버전의 SVN (<1.5, --keep-local 옵션이 없기 때문에)으로 붙어있어서 전문가가 아닙니다. , 그것이 보편적 인 해결책인지 확신 할 수 없습니다. 그것이 당신에게도 효과가 있다면, 알려주세요!

다른 사람들이 이미 작업을 시작했기 때문에 SVN에서 가져온 Prestashop 설치를 처리하고있었습니다. 다른 서버에 대한 DB 설정이 완료되었으므로 / config 폴더의 일부 파일에서 변경했습니다. 이 폴더는 이미 버전 화되었으므로 svn : ignore에서 설정해도 로컬 수정 사항이 커밋되지 않습니다. 내가 한 일은 다음과 같습니다.

cp config ../cfg_bkp              # copy the files out of the repo
svn rm config                     # delete files both from svn and "physically"
svn propset svn:ignore "config" . # as the files no longer exists, I can add my ignore rule and then...
mv ../cfg_bkp config              # ...bring'em back
svn revert --recursive config     # make svn forget any existing status for the files (they won't be up for deletion anymore)

이제 svn add --force를 실행할 수 있습니다. repo의 버전과 일치하지 않더라도 구성을 추가하지 않고 repo 루트에서 (한 번 더 수정하면 테스트하지 않았다고 생각합니다). 내 파일을 덮어 쓰거나 오류없이 svn 업데이트를 수행 할 수 있습니다.


0

디렉토리 특성의 변경 사항을 무시하지 않는 솔루션

에 기반한 솔루션을 사용하려고 시도했지만 changelist몇 가지 문제가 있습니다. 먼저 내 저장소에는 수천 개의 파일이 있으므로 커밋 할 변경 목록이 크며 svn status출력이 너무 길어 구문 분석해야 유용했습니다. 가장 중요한 것은 병합으로 인한 변경 사항을 커밋하고 싶었습니다. 즉, 속성 변경 사항이 포함됩니다. 변경 목록을 커밋 할 때 디렉토리에 연결된 svn 속성은 커밋되지 않으므로 추가 커밋을 수행해야했습니다.

svn ci --cl work -m "this commits files from the work changelist only"
svn up
svn ci --depth empty DIR . -m "record merge properties"

기본적으로 명령을 실행할 때 두 번째 열에 있는 DIR디렉토리와 같은 여러 디렉토리 (여기서는 현재 dir 의 특성 과 현재 디렉토리를 기록함 .)에 대해 수행해야 할 수도 있습니다 .Msvn status

해결책

나는 패치를 사용했다 svn patch. 의사 코드에서 :

svn diff $IGNORE_FILES > MYPATCH   # get the mods to ignore
svn patch --reverse-diff MYPATCH   # remove the mods
svn ci -m "message"                # check-in files and directory properties
svn patch MYPATCH                  # re-apply the mods

다른 포스터와 마찬가지로 스크립트를 사용하여 무시할 파일 목록을 유지합니다.

#! /usr/bin/env bash

finish() {
    svn patch MYPATCH               # re-apply the mods
}
trap finish EXIT

IGNORE_FILES="\
sources/platform/ecmwf-cca-intel-mpi.xml \
runtime/classic/platform/ecmwf-cca.job.tmpl \
runtime/classic/platform/ecmwf-cca-intel.xml"

svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods

svn "$@"

나는 일반적으로 ciand 와 함께 사용했습니다 revert -R ..


-1

svn:ignore 당신의 대답입니다.

예:

$ svn propset svn:ignore -F .cvsignore .
property 'svn:ignore' set on '.'

1
위의 예는 미리 구성된 cvsignore 파일을 svnignore 특성에 대한 입력으로 사용하는 방법을 보여줍니다.
Ben

1
svn : ignore는 버전 파일이 아닙니다. 버전 파일로는 작동하지 않습니다
Sérgio

1
또한 지역이 아닙니다. 자체적으로 커밋 될 속성 변경입니다.
Adam Badura

-9
svn propset "svn:ignore" "*.xml" .

*.xml무시하는 파일의 패턴이다; 여기에서도 디렉토리 이름을 사용할 수 있습니다.


3
저장소의 일부인 파일을 무시할 수 없으므로 -1입니다.
zellus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.