나는 동일한 소스 트리의 복사본 두 개를 보관합니다. 하나는 "작업 복사본"이고 다른 하나는 "저장 복사본"입니다. "작업 복사본" 편집을 마치면 "스토리지 복사본"을 새로 고칩니다 rsync
(수정된 파일만 복사되며, 추가로 작업 복사본에서 삭제된 파일도 저장소 복사본에서도 삭제됩니다). SCM도 있지만 "저장된 복사본" 이후에 발생하므로 여기서는 SCM을 무시할 수 있습니다.
하지만 이제 "작업 복사본"에서 "저장소" 복사본으로 새로 고칠 때 코드 미화를 적용하고 싶습니다. 코드 미화자는 stdin/stdout 리디렉션을 통해 적용할 수 있지만, 제가 아는 rsync
한 복사를 수행할 때 stdin/stdout 필터를 전달하는 것은 허용되지 않습니다.
"저장된 복사본"에서 변경되지 않은 파일의 타임스탬프를 수정하고 싶지 않기 때문에 수정된 파일만 예쁘게 만들고 싶습니다. "작업 복사본"과 "저장 복사본"의 미화 규칙이 다르기 때문에 작업 복사본에는 미화를 적용할 수 없습니다.
어떻게 해야 하나요? UNIX 친화적인 솔루션은 모두 허용되지만 Bourne 쉘 스크립트나 C 프로그램을 선호합니다. rsync
특별한 방법이 있다면 좋을 것 같습니다.
답변1
질문과 의견에 설명된 제약 조건을 고려하여 먼저 작업 복사본과 저장소 복사본에 사용되는 스타일 가이드 간의 차이점을 제거하겠습니다. 그러나 나는 이것이 매우 어려울 수 있다는 것을 알고 있으므로 그 조언을 무시하십시오.
난 그렇게 생각하지 않아 rsync
(즉, 파일이 복사될 때 필터링)은 저장된 복사본을 커밋하기 전에 Beautify를 적용하기 위한 올바른 위치입니다. SCM을 사용할 수 있다면 git
다음 과 같이 활용하겠습니다 rsync
.
git diff --name-only -z | xargs -O beautifier
beautifier
인수로 제공된 파일에서 실행될 수 있다고 가정하면 변경된 모든 파일에서 실행됩니다 .
SCM을 사용할 수 없거나 사용하지 않을 경우 로그 rsync
( --log-file
및 --log-file-format
옵션 참조)를 사용하여 복사된 내용을 확인 rsync
하고 해당 파일에 대해서만 뷰티파이어를 실행할 수 있습니다.
로그를 악용할 수 없는 경우 rsync
문제를 해결하는 다른 방법이 있습니다. "저장된 복사본"의 각 파일에 대해 뷰티파이어를 실행하고 임시 파일로 출력한 다음 출력을 원본 파일과 비교하는 것입니다. 미화로 인해 파일이 변경된 경우 출력을 원본 파일로 다시 복사하세요.