developer tip

svn : mergeinfo를 사용하여 TortoiseSVN을 끄는 방법이 있습니까?

optionbox 2020. 11. 5. 07:57
반응형

svn : mergeinfo를 사용하여 TortoiseSVN을 끄는 방법이 있습니까?


TortoiseSVN 병합을 수행 할 때 실제 변경 사항이 없더라도 여러 디렉터리와 일부 파일을 수정 된 파일에 포함합니다.

그것은 속성을 변경합니다 svn:mergeinfo.

디렉토리 / 파일에 설정된 이러한 속성이 필요한 이유가 있습니까? 이러한 변경 사항을 수행하지 않는 방법이 svn:mergeinfo있습니까?

일반적으로 항목을 되 돌린 다음 커밋하지만 이것은 추가 시간을 낭비합니다.


이러한 파일과 디렉토리에는 이전 병합에서 설정 한 svn : mergeinfo 속성이 있기 때문에 이런 일이 발생할 가능성이 높습니다. 저는 일반적으로 mergeinfo가 개별 파일에 기록되도록하는 방식으로 개별 파일이나 디렉토리를 병합하는 것이 좋지 않다고 생각합니다. 병합 정보 속성이 / trunk 또는 /branches/1.0과 같은 구조적 디렉터리에만 설정되도록 워크 플로에 대해 가능한 가장 높은 수준에서 병합하는 습관을 가져야합니다.

그러나 개별 파일 및 폴더에 대한 mergeinfo 속성을 사용하는 경우 수행 할 수있는 두 가지 작업이 있습니다. 첫 번째 작업은 해당 파일 및 디렉터리에서 svn : mergeinfo 속성을 제거하는 것입니다. 당신이 무엇을하고 있는지, 그리고 어떤 효과가 있을지 정말로 알지 못한다면 이것이 권장되는 것인지 잘 모르겠습니다. 이 작업을 수행하기 전에 설명서를 읽으십시오!

두 번째로 할 수있는 일은 SVN이 원하는 방식으로 속성 변경을 커밋하는 것입니다. 소프트웨어를 신뢰한다면 아마도 옳은 일일 것입니다.

그렇게 말했듯이, 나는 우리가 더 이상 이러한 성가심을 느끼지 않도록 올바른 습관을 갖기 위해 동료들과 협력하고 있습니다.


SVN 1.7 이상

이것은 SVN 1.7에서 수정되어야합니다. 에서 릴리스 노트 :

하위 트리가 병합의 영향을받지 않은 경우 병합은 더 이상 하위 트리 (자신의 명시 적 병합 정보가있는)에 mergeinfo (병합 설명)를 기록하지 않습니다. 이것은 svn:mergeinfo명시적인 mergeinfo를 가진 많은 수의 서브 트리를 가진 사용자에 대한 가짜 속성 변경 의 수를 크게 줄여야합니다 .

1.7 이전의 SVN

파일 / 폴더에 명시 적 mergeinfo가 있으면 분기에 대한 각 후속 병합이 파일 / 폴더가 관련이없는 경우에도 해당 mergeinfo를 업데이트합니다. 이것은 각 병합에 대한 변경 목록에 점점 더 많은 혼란을 야기하므로 성가신 일입니다.

이를 방지하려면 분기의 "루트"폴더 (예 : "/branches/maintenance2.x")에만 병합하십시오. "/branches/maintenance2.x"아래의 파일이나 폴더는 mergeinfo를 가져 오지 않아야합니다. SVN 책병합 조언을 따르십시오 .

불행히도 분기의 "루트"폴더에서만 병합하더라도 svn:mergeinfo복사 할 때 개별 파일 및 폴더에 속성이 표시되어 형제와 동일한 병합을받지 않았 음을 나타낼 수 있습니다.

불필요한 하위 트리 mergeinfo를 삭제하는 것이 안전 할 수 있습니다. 이를 수행하는 한 가지 방법은 svn:mergeinfo프로젝트 루트의 각 파일 및 폴더에서 속성을 재귀 적으로 삭제하는 것입니다 . (하지만 mergeinfo는 루트 폴더 자체에 보관하십시오!)

또는 Subversion 1.6으로 업그레이드 할 수 있습니다 . 이 문제가 해결되었음을 확인했습니다. 이전 버전에서 추가 한 불필요한 mergeinfo를 삭제하는 것 같습니다.

주석으로 판단하면 SVN 1.6에서 불필요한 하위 트리 mergeinfo가 나타나는 경우가 여전히 있습니다. 그러나 나는 그것을 재현 할 수 없었다.


--ignore-ancestry 옵션을 사용하여 병합을 수행하면 mergeinfo 속성이 처음에 생성되지 않습니다.

svn merge --ignore-ancestry -c 1234 svn://sourcecontrol .

당신이 체크하면 조상을 무시 이 폴더에 svn의 mergeinfo를 생성하지 않습니다. 이미 svn 병합 정보를 얻은 경우에는 되돌리고 상위 항목 무시를 확인하여 병합을 다시 수행하십시오.

여기에 이미지 설명 입력


svn : mergeinfo는 Subversion이 병합 기록추적하는 데 사용하는 속성 입니다. 나는 그것이해야 할 일을하도록 내버려 둘 것입니다. 나중에 병합 기록 추적이 필요할 수 있으며 이러한 속성을 커밋하지 않았기 때문에 작동하지 않는다는 것을 발견 할 수 있습니다.


Stack Overflow question Remove 불필요한 svn : mergeinfo 속성에 제공된 명령 은 추가 mergeinfo를 제거합니다.

From the root of the project do:

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"

이 버그의 적어도 한 부분이 Subversion 1.5.5에서 수정되었다고 추가합니다. 로부터 1.5.5 변경 사항 파일 :

do not create mergeinfo for wc-wc moves or copies (r34184, -585)

즉, 1.5 이전에는 SVN에서 사용하지 않았고 불필요한 mergeinfo 항목을 생성하는 버그가 있었으며, 이는 원래 질문자가 svn:mergeinfo속성 이 많을 경우 타격을 입었을 가능성이 높습니다 .


거의 모든 파일에이 정보가있어 병합을 매우 성가 시게 만들었 기 때문에 프로젝트에서 반복적으로 제거했습니다 (하나의 파일 만 변경된 경우 모든 파일을 병합해야 함). 이제부터는 루트에서만 병합 할 것이므로 앞으로 이러한 상황을 피해야합니다.

지금까지 우리에게 아무런 문제도주지 않았습니다. 로깅은 여전히 ​​파일에서 사용할 수 있으며 동일한 것으로 보입니다 (하지만 위험을 감수해야합니다!).

오, 우리는 새 지점을 만들기 직전에 트렁크에서 해냈습니다. 이렇게하면 깨끗한 슬레이트에서 시작할 수 있습니다.


우리 팀에도이 문제가 있었고 전체 병합 프로세스가 약간 혼란 스러웠습니다. 이것을 읽은 후 여러 파일에서 svn : mergeinfo 속성을 삭제하려고 시도했으며 추가 테스트 후 문제가 해결 된 것처럼 보입니다.


좋은 질문과 답변! 우리는 자동화 된 빌드 시스템의 한계를 해결하기 위해 노력하고 있기 때문에 최근에이 문제가 발생했습니다. 빌드 시스템은 버전 및 경로 정보와 함께 .bdsproj 및 일부 .dpr / .dpk 파일을 자동으로 증가시킵니다.

변경하고 싶지만 지금 당장 한 브랜치를 다른 브랜치와 병합하려면 변경 한 몇 개의 파일을 얻은 다음 빌드 머신이 변경 한 1000 개의 파일을 가져옵니다. 그래서 우리는 "타겟팅 된"병합 (때로는 한 번에 파일)을 수행했습니다. 특히 합법적 인 변경 사항이있는 .dpr 또는 .bdsproj 파일의 경우 (예 : 추가 단위 포함). 이제 나는 무슨 일이 일어나고 있는지 알고 있으므로 광기를 멈출 수 있기를 바랍니다.

감사합니다 스택 오버플로!

참고 URL : https://stackoverflow.com/questions/622409/is-there-a-way-to-turn-tortoisesvn-using-svnmergeinfo-off

반응형