문제

CVS2SVN을 사용하여 CVS 프로젝트를 전복으로 변환하고 싶습니다. 메인 트렁크 (헤드)가 있으며 트렁크에서 여러 임시 개발 지점이 생성됩니다.

이를 변환하기 전에 트렁크에서 최신 변경 사항을 모든 개발 분기로 병합합니다. 그러나 그들은 아직 트렁크에 다시 합병되지 않은 변경 사항이있을 것입니다.

프로젝트를 SVN으로 변환 할 때 병합 역사 속성이 없습니다. 그렇다면 해당 속성을 초기화하려면 어떻게 지점과 합병 할 수 있습니까?

다시 말해, 전환 후, 트렁크와 주어진 지점 사이에는 여러 차이가있을 것입니다. 다음에 트렁크에서 지점으로 합병 할 때, 그 차이를 병합 해야하는 변화로보고 싶지 않습니다. 그러나 내가 지점에서 트렁크로 합쳐지면 나는 그렇게한다. 이게 가능해?

업데이트: 나는 Mhagger의 제안을 받아 SVN에 지점이 트렁크에서 이미 병합 된 모든 변경 사항이 있다고 말했다.

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

이것은 효과가 있으므로 다음에 트렁크에서 지점으로 병합하려고 할 때 새로운 변경 사항이 표시되지 않습니다.

그러나 나는 여전히 분기에서 트렁크에 이르기까지 -reintegrate 병합에 문제가 있습니다. 많은 "r"eplaced 파일이 표시되는데, 이는 트렁크에 파일 x가 있고 분기에는 파일 x가 있지만 동일한 파일로 간주되지는 않습니다. 이것은 올바른 결과로 끝나는 것처럼 보이지만 합병을 지저분하게 만듭니다.

나는 이것이 다음과 같은 일련의 사건으로 인해 발생한다고 생각합니다.

  • 지점이 생성되었습니다 (CVS)
  • 파일 X가 트렁크에 추가되었습니다 (CVS)
  • X는 지점 (CVS)에 병합되었습니다.
  • 프로젝트는 전복으로 전환되었습니다
  • Subversion은 Branch/X가 Trunk/X에서 복사되었다는 것을 몰랐습니다. 그래서 그것은 교체품이라고 생각합니다.

SVN 역사는 다음과 같습니다.

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

그렇다면, -반동 병합을 할 때 파일의 조상을 무시할 수있는 전복을 말할 수있는 방법이 있습니까? 아니면이 파일을 변환하는 더 좋은 방법?

도움이 되었습니까?

해결책 2

좋아, 나는 누군가가 관심을 갖는 경우 위의 -반동 문제에 대한 해결 방법이 있다고 생각한다.

에 따르면 이 문서, 최신 버전의 트렁크를 지점에 병합 한 경우 -reintegrate를 수행하는 것은 본질적으로 트렁크에이를 수행하는 것과 동일합니다.

svn merge [trunk URL] [branch URL]

그러나이 구문은 (Inignore-Ancestry)를 허용합니다. 그래서 나는 할 수있다 :

svn merge --ignore-ancestry [trunk URL] [branch URL]

그것은 모든 "r"eplaced 파일없이 -reintegrate와 동일한 결과를 보여줍니다. 유일한 다른 차이점은 Mergeinfo 속성 인 것 같습니다. 이것들이 올바른지 확실하지 않으므로 -reintegrate 이후와 마찬가지로 나중에 분기를 삭제하는 것이 가장 좋습니다.

다른 팁

아시다시피, CVS2SVN은 분기가 발아 한 위치에 대한 암시 적 정보를 제외하고는 병합 메타 데이터를 생성하지 않습니다. (CVS는 그러한 정보를 기록하지 않기 때문에 할 수는 없습니다.) 따라서 변환 후 CVS에서 수행 된 합병에 대해 전복을 명시 적으로 알려야합니다.

가장 쉬운 방법은 사용하는 것입니다.svn merge --record-only ...", 설명대로 지하 책.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top