100개가 넘는 파일을 체크아웃했다고 가정해 보겠습니다. 하나씩 지정하거나 파일에 추가하지 않고 모두 변경 목록에 추가할 수 있는 방법이 있나요?
답변1
어떤 운영 체제를 사용하고 있나요?
저는 리눅스를 가정하겠습니다. 다음과 같이 시도해 보세요.
ls *.c *.h */*.c */*.h | xargs svn cl source
그러면 현재 하위 디렉토리와 바로 하위 디렉토리에 있는 모든 C 및 헤더 파일이 변경 목록 소스에 추가됩니다. 위 명령은 파일 이름의 공백으로 인해 문제가 발생할 수 있습니다. 좀 더 복잡한 경우에는 차원을 사용해 보십시오.
find . -name .svn -type d -prune -o -type f -print0 | xargs -0 svn cl source
그러면 .svn 디렉터리에 없는 모든 일반 파일이 변경 목록 소스에 추가됩니다. 이는 파일 이름의 공백에도 적용됩니다.
답변2
원하는 것이 무엇인지 확실하지 않습니다. 100개가 넘는 파일을 체크아웃했지만 해당 파일을 저장소에 추가하고 싶다고 말했습니다. 작업공간에 이미 존재하는 파일을 추가하고 작업공간에서 변경사항을 커밋하는 방법을 보여드리겠습니다.
체크아웃된 작업 복사본에 디렉터리 트리를 추가하려면 svn add --force .
이를 사용하여 현재 디렉터리부터 시작하여 작업 복사본에 버전이 없는 모든 파일을 추가합니다(현재 디렉터리에 버전이 있는 경우에도). 추가된 파일은 여전히 저장소에 커밋되어야 합니다.
수정 사항을 커밋하려면 svn commit -m "*insert comment here* .
이를 실행하여 현재 디렉터리에서 저장소로 작업 복사본의 모든 변경 사항을 커밋합니다.
답변3
나는 이 작업을 수행하기 위해 보통 텍스트 편집기에 의존합니다. 왜냐하면 내가 올바른 길을 가고 있다는 시각적 확인이 필요하기 때문입니다. 여기서는 vim을 사용하고 있지만 emacs도 마찬가지로 해당 작업을 수행합니다.
프로젝트 루트에서 새 버퍼로 vim을 시작하세요.
그런 다음 vim에서 실행하십시오.
:r !svn st
그러면 출력이 svn st
버퍼로 읽혀집니다. 이를 검토하여 예상과 일치하는지 확인하거나 변경 목록에 없는 항목을 제거할 수 있습니다.
M project/path/to/file1
M project/path/to/file2
M project/path/to/file3
M project/path2/to/file1
M project/path23/to/file1
그런 다음 편집기 마법을 사용하여 이를 명령으로 변환할 수 있습니다. 예를 들어::
:%s/^M/svn cl change/
그러면 위의 줄이 다음과 같이 변경됩니다.
svn cl change project/path/to/file1
svn cl change project/path/to/file2
svn cl change project/path/to/file3
svn cl change project/path2/to/file1
svn cl change project/path23/to/file1
그런 다음 다음 명령을 셸로 보낼 수 있습니다.:
:w !bash
그러면 퀵리스트 창에 각 명령의 출력이 반환됩니다.
이는 다른 솔루션보다 더 장황해 보일 수 있지만 확인을 위해 전체 프로세스를 시각적으로 볼 수 있으며(emacs dired 모드를 생각해 보세요), svn은 기록을 다시 쓸 수 없으므로 오류를 방지합니다.
이러한 명령은 이전 기록에 남아 있으므로 일반적으로 다시 입력할 필요가 없으며 기록에서 호출하기만 하면 됩니다.