2008-10-10 3 views
20

CVS와 Subversion은 모두 손쉬운 병합 기능을 제공하므로 사용자가 수정 한 소스 파일을 업데이트하면 다른 사람이 동일한 파일에서 변경 한 사항을 병합 할 수 있습니다.CVS와 Subversion이 병합시 공백을 무시하도록 설정할 수 있습니까?

그러나 변경 사항과 다른 변경 사항이 호환되지 않는 경우 (일반적으로 코드의 동일한 부분을 모두 변경 한 경우) 충돌이 발생합니다. 두 가지 스트레치 소스 코드가 병합 된 파일에 포함되며 유지할 변경 사항을 수동으로 정렬해야합니다. 지금까지 괜찮아.

내 문제는 다른 개발 환경 (알고 있어야하는 경우 Netbeans 대 vi)을 사용하고 Netbeans에 코드를 다시 들여 쓰는 자동 들여 쓰기 기능이 있다는 것입니다. 따라서 변경 사항을 병합 할 때 가끔씩 간단한 들여 쓰기 변경으로 발생하는 엄청난 충돌이 발생하고 코드가 변경되지 않습니다. 종종 이러한 것들은 수 백 줄의 명백한 충돌을 만들어 수동으로 해결해야하지만 대개 몇 줄의 실제 변경 사항이 있습니다. 다른 사람의 편집자가 유닉스와 윈도우의 줄 바꿈을 바꾸거나 그 반대의 경우도 비슷한 상황이 발생합니다.

이렇게 두 버전을 비교할 때 이러한 "충돌"을 무시하도록 병합을 설정할 수 있습니까? 차이점은 --ignore-space-change 또는 -b 옵션을 가지고 있으며 본질적으로 cvs 나 svn에서 동일한 기능을 사용할 수 있기를 원합니다. 서로 다른 프로젝트에서 각 도구를 사용하므로 어느 쪽이든 둘 다에 대한 답을 얻게되어 기쁩니다.

두 최종 노트 :

  • 명확하게 병합 프로세스는 공백의 버전이 병합 된 파일에 사용하기로하는 등의 임의의 선택을해야합니다. 나는 그것으로 좋습니다 - 우리는 나중에 언제든지 다시 포맷 할 수 있습니다.
  • 나는 좀 더 훈련되고 더 자주 수표를 받음으로써 이러한 것을 피할 수 있습니다. 그러나 나는 완벽하지 않습니다.
  • SVN에 대한

답변

11

는 : 명령 행 도구에서, 당신은 공간이 RESP를 변경 무시 "B"또는 "w "을 설정할 수있는 옵션이 -x있다. 모든 칸.
또한 병합을 수행하기위한 타사 도구를 제공 할 수도 있습니다. 따라서 공백을 무시한 합병이 있다면이 공백을 사용할 수 있습니다. TortoiseSVN은 항상 그렇듯 모든 매개 변수의 프런트 엔드이므로 공백을 무시하도록 지원합니다.

svn merge 명령은 here으로 설명됩니다. 당신이 필요로하는 옵션은 --diff3 - cmd를 당신이 설명하는 것을 지원 merge features 함께 제공 Windows 사용자

+0

소리가 잘 들립니다. 그렇다면 다음 질문이 있습니다 : 누군가 공백을 무시할 수있는 합병을 알고 있습니까? 다른 질문에 나는 (meld, tortoisesvn) 좋게 보이는 몇 가지 시각적 병합 도구를 찾았지만 누구나 명령 행을 알 수 있습니까? –

+0

당신은 winmerge (http://www.winmerge.org/)를 볼 수 있습니다. 그것은 opensource이고 tortoiseSVN에서 diff/merge 뷰어로 쉽게 사용할 수 있습니다. –

+0

Linux에서이 문제를 조사해 왔으며 이것을하는 쉬운 방법이 없습니다. 예를 들어, "diff3"을 사용하도록 말할 수는 있지만 공백을 무시하는 매개 변수는 없습니다. 그러나 매개 변수를 전달하여 다른 "diff"프로그램을 사용할 수 있습니다. 그래서, 당신은 그것을 "diff -b"라고 부릅니다. 그러나 SVN 명령 (즉, svn (diff3 사용 (diff -b) 사용)))에서 재귀 적으로 (명백하게) 할 수는 없습니다. 필자가 조사 할 해결책은 "diff"를 사용하여 "diff"를 호출하여 공백을 무시하는 쉘 스크립트를 만드는 것입니다. 그런 다음 SVN에서 쉘 스크립트를 사용하게 할 것입니다. – UncaAlby

5

, 당신은 TortoiseSVN (서브 버전의 Windows 탐색기 셸 확장)를 사용할 수 있습니다 :

줄 끝을 무시하면 줄 끝 스타일의 차이만으로 인한 변경 사항 이 제외됩니다.

비교 공백은 들여 쓰기 변경 사항이 모두 이고 추가/제거 라인이 공백 인 입니다.

전적으로 즉 양 또는 공백 의 유형에 변화로 인한 공백 변경을 변경을 제외 무시한다. 들여 쓰기를 변경하거나 탭을 공백으로 변경하십시오. 이 공백을 추가하기 전에 없거나 공백을 완전히 제거하면 공백이 계속 변경되어 여전히 으로 표시됩니다.

모든 공백을 무시하면 모두 공백 만 변경되는 개가 제외됩니다.

0

TortoiseMerge에는 공백을 무시하고 대소 문자를 무시하는 CLA (명령 줄 인수)가 없습니다. 많이 검색 한 후에는 레지스트리 값을 조정하여 여전히 달성 할 수있는 것으로 보입니다.

/* DisableWhitespaceDifferences and DisableCaseDifferences. 
* The settings for TortoiseMerge is stored in Registry in CurrentUser\Software\TortoiseMerge\ 
* DWORDS stored the property values. 
* 
* IgnoreWS   : Set to 1 to ignore the whitespace differences. 
*      Set to 0 to allow the whitespace differences.    
* IgnoreEOL  : Set to 1 to ignore the End of Line differences. 
*      Set to 0 to allow the End of Line differences.    
* CaseInsensitive : Set to 1 to ignore the Case differences. 
*      Set to 0 to allow the Case differences.    
*/ 

// Get the key from the registry 
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\TortoiseMerge", true)) 
{ 
    if (key != null) 
    { 
     // Set the IgnoreWS and IgnoreEOL DWORDs based on DisableWhitespaceDifferences is set or not 
     key.SetValue("IgnoreWS", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord); 
     key.SetValue("IgnoreEOL", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord); 

     // Set the CaseInsensitive DWORD based on DisableCaseDifferences is set or not 
     key.SetValue("CaseInsensitive", DisableCaseDifferences ? 1 : 0, RegistryValueKind.DWord); 

     // close key 
     key.Close(); 
    } 
} 
관련 문제