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

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

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

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

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

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



답변

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 에서는 이것에 대한 오래된 이슈 가 향후에 변경 될 경우에 발생합니다.


답변

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

나는 리눅스 커맨드 라인에서 일한다. 그래서 나의 해결책은 다음과 같이 스크립트 / 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을 실행하십시오. 이게 도움이 되길 바란다!


답변

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

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

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

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


답변

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

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


답변

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

svn ci filename1 filename2

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


답변

여러분 방금 해결책을 찾았습니다. 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로 파일을 제외해야하는 이유는 해당 메뉴 항목을 찾을 수 없기 때문입니다. 이유는 확실하지 않습니다. 어떤 방식 으로든 작동합니다!)


답변

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

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